新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 软件实现多路PWM的输出

软件实现多路PWM的输出

作者:时间:2012-10-27来源:网络收藏
单片机应用于舞台灯光、民用照明的调光、电机转速、温度控制等众多领域时需要用到PWM占空比进行调节。市场上,集成了硬件PWM模块的单片机型号如PIC16F628A、STC12C2052等。使用硬件PWM时仅需进行一些特殊功能寄存器的设置,使用方便。但硬件PWM输出路数往往较少,如果要增PWM的输出路数则会使产品成本上升,较难适应于价格敏感的产品上。如:PIC16F628A、STC12C2052仅具有两路PWM输出。舞台光通常要到用三路PWM信号调光(三路分别控制红、绿、蓝三基色进行组合搭配出不同色彩)。因此软件实现PWM是较为合理的选择。

在舞台灯光厂做了这么久,虽然明白软件PWM的原理,但就是弄不清它们的关系,一直写不出比较好的软件PWM程序。近日,一偶然的机会得到启发,写下这个程序和单片机爱好者分享。

程序如下:

AUXR EQU 8EH
PWM1DATA EQU 60H
PWM2DATA EQU 61H
PWM3DATA EQU 62H
PWM1DATA1 EQU 63H
PWM2DATA1 EQU 64H
PWM3DATA1 EQU 65H
PWM1 EQU P0.5
PWM2 EQU P0.6
PWM3 EQU P0.7
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIMER0
ORG 0030H
MAIN:
CLR PWM1
MOV P0,#11H
MOV SP,#30H
MOV AUXR,#01H
CLR RS1
CLR RS0
MOV TMOD,#02H
MOV TH0,#00H

MOV TL0,#00H
MOV R2,#0FFH;R2用作PWM周期寄存器
MOV PWM1DATA,#0
MOV PWM2DATA,#85
MOV PWM3DATA,#170
MOV PWM1DATA1,PWM1DATA
MOV PWM2DATA1,PWM2DATA
MOV PWM3DATA1,PWM3DATA
SETB EA ;开中断总控制
SETB ET0;开TO中断控制
SETB TR0 ;开始 计数

MAIN1:
ACALL DEL
INC PWM1DATA
INC PWM2DATA
INC PWM3DATA
AJMP MAIN1
DEL:
MOV R4,#05H
D1:
MOV R5,#0FFH
D2:
MOV R6,#0FFH
DJNZ R6,$
DJNZ R5,D2
DJNZ R4,D1
RET

TIMER0: ;定时器中断
PUSH ACC
TIMER001:
MOV A,PWM1DATA1
JZ TIMER0011
SETB PWM1
DEC PWM1DATA1
AJMP TIMER002
TIMER0011:
CLR PWM1
TIMER002:
MOV A,PWM2DATA1
JZ TIMER0021
SETB PWM2
DEC PWM2DATA1
AJMP TIMER003
TIMER0021:
CLR PWM2
TIMER003:
MOV A,PWM3DATA1
JZ TIMER0031
SETB PWM3
DEC PWM3DATA1
AJMP TIMER004
TIMER0031:
CLR PWM3
TIMER004:
DJNZ R2,TIMER005
MOV R2,#0FFH
MOV PWM1DATA1,PWM1DATA
MOV PWM2DATA1,PWM2DATA
MOV PWM3DATA1,PWM3DATA
TIMER005:
POP ACC
RETI
END

这个程序是基于实现的。因为PWM的频率较低,所以当的是LED时会有较大的闪动。如果要解决这个问题,则可以提高时钟频率。或使用工作速度更快的单片机,如STC12C2052可以设置为1时钟1,工作频率最高可达420MHZ。尽量不要改变定时器T0的初值(初值越小越好,最好为00H),因为如果单片机此时还要执行其它的任务(如串行通讯)时,T0的中断频率过高对软件PWM是致命的。

pwm相关文章:pwm原理




评论


相关推荐

技术专区

关闭