一个51产生PWM的演示程序
发布时间:2016-9-13 11:19
发布者:designapp
这是一个51产生PWM的演示程序 其中P1.3 P1.4是两个输出,这个程序比较匆忙,没有严格验证,可能有错,如有错误请指正。 /***************************************************************************** * 程序名称:PWM占空比调整演示程序 * * 编写时间:2005.9.15 23:30分 * * 程序版本:1.0 * * * * ****************************************************************************** *程序思路说明: * * * *关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为1KHZ,这样定时中断次数 * *设定为C=10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样* *可以设定占空比可从1-100变化。即0.01ms*100=1ms * ******************************************************************************/ #i nclude #define uchar unsigned char /***************************************************************************** * TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256; * * TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器* * 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时 * * 间为1ms*65536=65.536ms * ******************************************************************************/ #define V_TH0 0XFF #define V_TL0 0XF6 #define V_TMOD 0X01 void init_sys(void); /*系统初始化函数*/ void Delay5Ms(void); unsigned char ZKB1,ZKB2; void main (void) { init_sys(); ZKB1=40; /*占空比初始值设定*/ ZKB2=70; /*占空比初始值设定*/ while(1) { if (!P1_1) //如果按了+键,增加占空比 { Delay5Ms(); if (!P1_1) { ZKB1++; ZKB2=100-ZKB1; } } if (!P1_2) //如果按了-键,减少占空比 { Delay5Ms(); if (!P1_2) { ZKB1--; ZKB2=100-ZKB1; } } /*对占空比值限定范围*/ if (ZKB1>99) ZKB1=1; if (ZKB1=100) click="0"; if (click<=ZKB1) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/ P1_3=0; else P1_3=1; if (click<=ZKB2) P1_4=0; else P1_4=1; } |
网友评论