微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 关于MCS-51单片机实现PWM的方法

关于MCS-51单片机实现PWM的方法

时间:11-23 来源:互联网 点击:
关于MCS-51单片机实现PWM的方法
PWM是“脉冲宽度调制”的意思。
PWM实际上是在单片机的某个引脚输出一系列的矩形波,其周期一般是固定的;而其高电平、低电平所占用的时间,是可以受控调整的。高电平、低电平所占用的时间之比,称为占空比,其值为0~1之间。PWM的应用很广,简单的说,它可以控制灯光的亮度、可以控制直流电机的转速,甚至还可以输出语音信号。
新型的单片机,往往都含有硬件的PWM模块,编写程序就很简单;而老式的MCS-51系列,就不具备这个条件。
其实,在没有PWM硬件的单片机上实现PWM,也并不难,只需一个定时器,令其工作在中断方式即可。下面以网上的一个题目为例,说明实现PWM方法。
题目链接:http://zhidao.baidu.com/question/170790790.html?push=core
题目:AT89C52单片机输出可调PWM波。
要求:
1。单片机的晶振是12MHz,输出周期为1s。
2。用两个开关控制占空比的增加和减少,分20等级。针对这个题目,做而论道设计了一个简单的实验电路:
 在P2口的8条线输出PWM波形;
 在/INT1、/INT0外接了两个按键,用来调整占空比;
 在P0口外接了两个BCD数码显示器,用来显示当前的占空比的等级。
 实验的时候,可以使用示波器来观察P2口输出的波形。
 如果把PWM波形的频率提高,也可以用LED观察到渐亮渐暗的效果,目前看,只是闪烁的时间发生变化。

//程序如下:
//==========================================
#include
unsignedinta,b;
//------------------------------------------
voidmain()
{
TMOD=0x01;//T0定时方式1
TH0=(65536-50000)/256;//50ms@12MHz
TL0=(65536-50000)%256;
TR0=1;ET0=1;
EX0=1;EX1=1;
IT0=1;IT1=1;
EA=1;a=0;
b=10;
while(1);
}
//------------------------------------------
voidtime0()interrupt1
{
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;//50ms@12MHz
a++;
if(a==20)a=0;//在这里调整周期.
if(ab)P2=0xff;//在这里调整占空比.
elseP2=0x00;
P0=((b/10)4)+b%10;//显示占空比等级
}
//------------------------------------------
voidX0_INT()interrupt0
{
b++;
if(b>19)b=19;//占空比等级最大为19
}
//------------------------------------------
voidX1_INT()interrupt2
{
b--;
if(b1)b=1;//占空比等级最小为1.
}
//==========================================

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top