原创 PWM

2009-8-26 09:35 2064 3 3 分类: MCU/ 嵌入式

51系列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。对精度要求不高的场合,非常实用。电路图见图一,采用了高速光隔(6N137)输出,并将PWM的信号倒相。


一、原理原理图

71634873763.jpg




图一

二、固定脉宽PWM输出

用T0定时器完成PWM输出,脉宽固定:65536微妙。T0定时器设置成:16位定时器





PWM:

71634180581.gif



程序清单:(12MHz)

                      PwmData0      ;T0定时t1所需的定时初值(字)

                      PwmData1      ;T0定时t2所需的定时初值(字)

                      PwmF             ;PWM输出标志

;*********************************************************

                      setb tro   ;启动T0

                      。。。。。。

T0Int:                                                ;T0中断服务程序

                      JB   PwmF ,PwmOutH ;PWM输出未完成返回

                      Mov TH0,High(PwmData0)

                      Mov TL0,Low(PwmData0)

                      Setb tr0

                      Setb PwmF

                      Clr   p1.0   ;PWM输出脚

                      reti

     PwmOutH:

                             Setb p1.0

                             Clr tr0

                             Mov TH0,High(PwmData1)

                             Mov TL0,Low(PwmData1)

                             Setb tr0

                             Clr PwmF

                              reti

说明:在主程序中计算PwmData0、PwmData1的值。         



三、可变脉宽PWM输出


用T0定时器控制PWM的占空比,T1定时器控制脉宽(最大:65536微妙)。

T0、T1定时器设置成:16位定时器。





71634861019.gif


程序清单:(12MHz)

                      PwmData0      ;T0定时t1所需的定时初值(字)

                       PwmData1      ;T1定时T所需的定时初值(字)

;*********************************************************

                      setb tro   ;启动T0

                      setb tr1

                      。。。。。。

      T0Int:;T0中断服务程序

                      Clr   tr0

                      setb   p1.0   ;PWM输出脚

                      reti

     T1Int:;T1中断服务程序

                             Clr   p1.0

                             Clr tr0

                             Clr tr1

                             Mov TH0,High(PwmData0)

                           Mov TL0,Low(PwmData0)

                             Mov TH1,High(PwmData1)

                             Mov TL1,Low(PwmData1)

                             Setb tr1

                             Setb tr0

                             reti
说明:在主程序中计算PwmData0、PwmData1的值。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条