您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 综合/其它 > 51单片机PWM程序
/*关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为1KHZ,这样定时中断次数设定为C=10,即0.1MS中断一次,则TH0=FF,TL0=9C;由于设定中断时间为0.1ms,这样可以设定占空比可从1-100变化。即0.01ms*100=1msTH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256;TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时间为1ms*65536=65.536ms*/#includeREG51.H#defineucharunsignedchar#defineV_TH00xFF#defineV_TL00x9C#defineV_TMOD0x01sbitP1_4=P1^4;sbitP1_3=P1^3;sbitP1_2=P1^2;sbitP1_1=P1^1;voidinit_sys(void);/*系统初始化函数*/voidDelay5Ms(void);unsignedcharZKB1,ZKB2;voidmain(void){init_sys();ZKB1=4;/*占空比初始值设定(20%)*/ZKB2=8;/*占空比初始值设定(70%)*/while(1){if(!P1_1)//如果按了+键,增加占空比{Delay5Ms();if(!P1_1){ZKB1++;//ZKB2=10-ZKB1;}}if(!P1_2)//如果按了-键,减少占空比{Delay5Ms();if(!P1_2){ZKB1--;//ZKB2=10-ZKB1;}}if(ZKB19)ZKB1=1;//对占空比值限定范围if(ZKB11)ZKB1=9;}}/*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/voidinit_sys(void)/*系统初始化函数*/{/*定时器初始化*/TMOD=V_TMOD;TH0=V_TH0;TL0=V_TL0;TR0=1;ET0=1;EA=1;}//延时voidDelay5Ms(void){unsignedintTempCyc=5000;while(TempCyc--);}/*中断函数*/voidtimer0(void)interrupt1//using2{staticuchari=0;/*中断次数计数器变量*/TH0=V_TH0;/*恢复定时器初始值*/TL0=V_TL0;++i;if(i10)i=0;if(i=ZKB1)/*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/P1_3=0;elseP1_3=1;if(i=ZKB2)P1_4=0;elseP1_4=1;}
本文标题:51单片机PWM程序
链接地址:https://www.777doc.com/doc-5430925 .html