|
/*-----------------------------------------------------* *工 程 名:PWM.prj * *硬件接线:PTD.4,即定时器1通道0(21脚)接指示灯或蜂鸣器 * *程序描述:通过对PWM占空比的调节实现现指示灯的渐亮的功能* * 当占空比为100%时再从0%逐渐增加 * *目 的:学习HC08系列定时器脉宽调制功能 * *---------《嵌入式应用技术基础教程》教学实例----------*/ /*[头文件]*/ #i nclude "GP32C.H" //包含头文件 /*函数声明*/ void PWMInit(unsigned int ); //PWM初始化 void PWMconf(unsigned int); //PWM设置 extern void Delay_ms(unsigned char ); //延时 /*主程序*/ void main() { unsigned int Period; //PWM周期 unsigned int Duty; //PWM占空比 //[变量初始化] Period =0x0180; //PWM周期默认为10ms //[PWM初始化] PWMInit(Period); Duty = 0; //PWM占空比为0 //[主循环] while(1) { //[判断脉宽是否达到周期的长度(占空比为100%)] if(Duty<Period) Duty=Duty+1; //PWM占空比加1 else //占空比达到100%,设置占空比为0% Duty=0; T1SC|=(1<<5); //停止定时器1计数器计数 //[设置PWM脉宽] T1CH0H = (Duty>>8); //设置高字节 T1CH0L = Duty; //设置低字节 T1SC&=~(1<<5); //允许定时器1计数器计数 Delay_ms(10); //延时10ms } } /*PWMconf:PWM初始化设置--------------------------------* * 功 能:PWM脉冲周期、占空比的设置 * * 参 数:rate=脉宽时钟数,cyc=脉冲周期时钟数 * * 返 回:无 * *-----------------------------------------------------*/ void PWMInit(unsigned int Period) { unsigned int Temp=Period; //不允许溢出中断,不启动计数,分频因子=64,置位TSTOP,TRST T1SC = 0x36; //[设置PWM周期] T1MODH = (Temp>>8); T1MODL = Period; //[初始化设置PWM脉宽为0] T1CH0H = 0x00; T1CH0L = 0x00; //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲 T1SC0 = 0x1E; //允许定时器1计数寄存器计数 T1SC &= 0xDF; } |