用AT89S2051单片机实现PWM输出控制

用AT89S2051单片机实现PWM输出控制
用AT89S2051单片机实现PWM输出控制

电子报/2007年/5月/27日/第015版

单片机应用

用AT89S2051单片机实现PWM输出控制

廊坊宋占坡

PWM(Pulse Width Modulation)脉宽调制技术,通过对脉冲宽的调制,获得所需要的波形(含形状和幅值)。

PWM也是单片机常用的模拟量输出方法,通过外接转换电路,可以将不同占空比的脉冲变成与之对应的电压(占空比是指正脉冲与整个周期的比值)。本文介绍的程序,是通过调整占空比来调节输出模拟电压的方法之一。可以用其控制直流电机的转速。

一、用延时子程序实现PWM控制

流程图如图1所示,电路如图2所示。

P1.0口接PWM转换电压输入端,电压输出接电压表的+端,电压表的-端接地,通过改变PWM的占空比来观察电压表的读数,占空比越大,电压表的读数就越大。

程序清单如下:

;输出50%占空比(1:2)PWM

;输出10%占空比(1:10)PWM

;输出90%占空比(9:10) PWM

;改变程序中两个A的值可控制占空比PWM

ORG 20H

OUTPUT BIT P1.0;定义P1.0

LOOP:CLR OUTPUT

MOV A,#5 ;A中内容可控制延时时间和占空比

CALL DELAY

SETB OUTPUT

MOV A,#5;A中内容是1:2

CALL DELAY

LJMP LOOP

DELAY:MOV R0,#00H;延时1275μS

DLOOP:DJNZ R0, DLOOP

DJNZ ACC, DLOOP

BET

END

二、用中断实现PWM控制

通过对单片机定时器初始值的两次不同设置,来实现占空比PWM输出控制。方法和电路图同前,只是单片机编程方法不一样。用定时器T0完成PWM输出,脉宽也是1275μS(定时器控制最大脉宽为65536μS),所以此程序的占空比是1:2。定时器计数初值为FB04H。计算方法:计数初值为65535-1275=64260,转换为十六进制:64260D=FB04H。

程序清单如下:

ORG 0000H

LJMP MAIN

ORG 0100H

MAIN:SETB EA;中断允许

SETB ET0 ;T0中断允许

MOV TMOD,#01H

;置T0为方式1,16位定时器

MOV TH0,#0FBH;赋初值64260

MOV TL0,#04H

SETB P1.0 ;P1.0置为高电平

SETB TR0;开启T0

LOOP:JNB TF0,$;查询T0中断

CLR TF0

JNB P1.0,QQ

MOV TH0,#0FBH

;赋初值,改控制低电平时间

MOV TL0,#04H

LJMP XX

QQ:MOV TH0,#OFBH

;赋初值,控制高点平时间

MOV TL0,#04H

XX:CPL P1.0

SJMP LOOP

END

注:此程序的占空比是1:2

相关主题
相关文档
最新文档