×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-09-02 发布时间:
|
关于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 口的 条线输出 PWM 波形;
 在 /INT1、/INT0 外接了两个按键,用来调整占空比;
 在 P0 口外接了两个 BCD 数码显示器,用来显示当前的占空比的等级。
 实验的时候,可以使用示波器来观察 P2 口输出的波形。
 如果把 PWM 波形的频率提高,也可以用 LED 观察到渐亮渐暗的效果,目前看,只是闪烁的时间发生变化。

//程序如下:
//==========================================
#include
unsigned int a, b;
//------------------------------------------
void main()
{
         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;         0;
         10;
         while(1);
}
//------------------------------------------
void time0() interrupt 1
{
         TL0 (65536-50000) 256;
         TH0 (65536-50000) 256;  //50ms@12MHz
         a++;
         if(a == 20) 0;           //在这里调整周期.
         if(a b) P2 0xff;        //在这里调整占空比.
         else   P2 0x00;
         P0 ((b 10) <4) 10; //显示占空比等级
}
//------------------------------------------
void X0_INT() interrupt 0
{
         b++;
         if(b 19) 19;           //占空比等级最大为19
}
//------------------------------------------
void X1_INT() interrupt 2
{
         b--;
         if(b 1) 1;             //占空比等级最小为1.
}
//==========================================
关键字:MCS-51  单片机  PWM

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项