51单片机输出PWM的两种方法
2012-12-17

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

一、原理图

图一

二、固定脉宽PWM输出

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

PWM:

程序清单:(12MHz)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        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位定时器。

程序清单:(12MHz)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        PwmData0;T0定时t1所需的定时初值(字)
        PwmData1;T1定时T所需的定时初值(字)
        ;*********************************************************
        setb tro       ;启动T0
        setb tr1
        。。。。。。
T0Int:  ;T0中断服务程序
        Clr tr0
        setb p1.0      ;PWM输出脚
        reti
T1Int:  ;T1中断服务程序
        Clrp1.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的值。

可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号