//软件环境:IAR FOR STM8 V1.0
//作者:Nicole
//功用:定时器2的PWM功用,操控小灯的亮灭距离
//日期:2010.11.10
#include “iostm8s207k6.h”
void CLK_Init(void);
void TIM_Init(void);
// 函数功用:延时函数
// 输入参数:ms — 要延时的毫秒数,这儿假定CPU的主频为2MHZ
void DelayMS(unsigned int ms)
{
unsigned char i;
while(ms != 0)
{
for(i=0;i<250;i++)
{
}
for(i=0;i<75;i++)
{
}
ms–;
}
}
// 函数功用:初始化时钟
void CLK_Init()
{
CLK_CKDIVR = 0x08;//8Mhz
}
// 函数功用:初始化定时器2的通道2,用于操控LED的亮度
void TIM_Init()
{
TIM2_CCMR1 = TIM2_CCMR1 | 0x70;// Output mode PWM2.
// 通道2被设置成比较输出方法
// OC2M = 111,为PWM形式2,
// 向上计数时,若计数器小于比较值,为无效电平
// 即当计数器在0到比较值时,输出为1,否则为0
TIM2_CCER1 = TIM2_CCER1 | 0x03;// CC polarity low,enable PWM output*/
// CC1P = 1,低电平为有用电平
// CC1E = 1,敞开输出引脚
//初始化主动装载寄存器,决议PWM方波的频率,Fpwm=1000000/1000=1Khz
TIM2_ARRH = 0x03;// 主动重载寄存器ARR=0x03e8=1000
TIM2_ARRL = 0xe8;// 每记数500次发生一次中止,即1000ms
//初始化比较寄存器,决议PWM方波的占空比
TIM2_CCR1H = 0;
TIM2_CCR1L = 0;
// 初始化时钟分频器为1,即计数器的时钟频率为Fmaster=8Mhz/2*2*2=1000000
TIM2_PSCR = 0x03;
// 发动计数
TIM2_CR1 = TIM2_CR1 | 0x01;
}
main()
{
CLK_Init();// 初始化时钟
TIM_Init();// 初始化定时器
while(1)// 进入无限循环
{
TIM2_CCR1H = 0x01;
TIM2_CCR1L = 0xf4;
}
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/257868.html