您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 51单片机PWM波输出
占空比:如图PWM波所示,在一周期内t/T的比值称为占空比利用51单片产生PWM波方案:单片机使用资源:定时器0,定时器1,工作模式2(8位溢出自动重装初值)当定时器1溢出时,置位输出I/O,并停止自己计时,当定时器0溢出时,对输出I/O口清0,并打开定时器1,如此反复动作,这种模式有点像ATMEGA16单片机的快速PWM模式,都是通过中断自行操作的,而51单片机没有此功能,只能通过软件实现,改变定时器1即可改变占空比,程序如下:#includereg51.hsbitout=P3^0;//频率输出引脚1sbitor_out=P3^1;//频率输出引脚2,与引脚1相位相差180度/*初始化子程序**********************************************/voidinti(){out=or_out=0;//初始化输出I/O,将其清0TMOD=0x22;//设置两个定时器,工作方式2,即8位自动重装TL0=206;//TL0=256-t*fosc/12=255-1/20KHz*12/12MHz=256-50*1us=206,定时期0工作模式2下TL0作为计数器,定时器050ms溢出一次并自动重装TH0=206;//定时期0工作模式2下TH0作为自动重装初值,即TL0溢出时,TH0中的数据自动重装到TL0中TL1=223;//定时器1装初值TH1=223;//定时器1重装值设定ET0=1;//开定时器0中断ET1=1;//开定时器1中断EA=1;//开总中断TR0=TR1=1;//启动定时器0和1}/*主程序****************************************************/voidmain(){inti();while(1);}tT/*定时器0中断服务程序**************************************/voidT0_time()interrupt1{out=0;//定时器0有溢出就将out清0or_out=1;TR1=1;//溢出后打开定时器1}/*定时器1中断服务程序**************************************/voidT1_time()interrupt3{out=1;//定时器1有溢出就将out置1or_out=0;TR1=0;//溢出后关闭自己}
本文标题:51单片机PWM波输出
链接地址:https://www.777doc.com/doc-4711409 .html