您的位置 首页 应用

51单片机脉冲调制(PWM)操控源程序

要用51产生PWM去控制LED,首先要确定PWM的周期T和占空比D,确定了这些以后,可以用定时器产生一个时间基准T,比如定时器溢出N次的时间是PWM

要用51发生PWM去操控LED,首先要确认PWM的周期T和占空比D,确认了这些今后,能够用定时器发生一个时刻基准T,比方定时器溢出N次的时刻是PWM的高电平的时刻,则D*T=N*T,相似的能够求出PWM低电平时刻需求多少个时刻基准N。

那么就能够编写程序,依据定的时刻基准T给定时器赋值初始化,然后敞开定时器,界说一个标志位Flag,依据Flag的状况决议输出高平仍是低电平,假定 界说Flag=1的时分输出高电平,用一个变量去记载定时器中止的次数,每次中止就让记载中止次数的变量+1,在中止程序里边判别这个变量的值是否到了 N,假如到了阐明高电平的时刻够了,那么就改动Flag为0,输出低电平,一起记载中止变量的值清零,每次中止的时分仍旧+1,依据Flag=0的状况跳 去判别记载变量的值是否到了N 假如到了,阐明PWM的低电平时刻够了,那么就改Flag=1,输出改高电平,一起记载次数变量清零,重新开始,如此循环便可得到想要的PWM波形。

#I Nclude
Unsigned Char CYCLE;     
Unsigned Char Count = 0;        
Unsigned Char PWM_ON;     
Void Delay()         
{
Unsigned Char I, J;
For(J = 100; J; J–)
For(I = 255; I; I–)
;
}
Void Main()
{
Bit Flag;      
TMOD = 0x01;          
TH0 = (65536 – 100) / 256;     
TL0 = (65536 – 100) % 256;     
IE = 0x82;      
TR0 = 1;         
CYCLE = 10;          
While(!Flag)         
{
Delay();          
PWM_ON++;      
If(PWM_ON == CYCLE)      
{
Flag = 1;      
}
}
While(Flag)      
{
Delay();      
PWM_ON–;      
If(PWM_ON == 0)     
{
Flag = 0;     
}
}
}
Void Time0_server() Interrupt 1 Using 1
{
TH0 = (65536 – 100) / 256;     
TL0 = (65536 – 100) % 256;     
If(Count == PWM_ON)     
{
P2 = 0xFF;       
}
Count++;       
If(Count == CYCLE)     
{
Count = 0;      
If(PWM_ON != 0)      
{
P2 = 0;       
}
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/257055.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部