由于最近想做一个红外遥控赛车,目前正在准备阶段,现在正在准备的是PWM控制直流电机的部分,这个程序也就是学习定时器产生PWM的一个小成果,实际上这也就是一个呼吸灯
在没打算做遥控车之前零零碎碎的看过PWM但是遇到了一点困难就放弃了,之前都是看别人写的程序,这次是在学习了一篇别人写的论文之后比较有收获而写出的程序,论文我发上来了,有需要的朋友可以参考参考
现在我对于PWM是这么理解的,不知道对不对,PWM就如同是不同海拔高度上空气的稀薄程度,占空比高即如同一定体积空气内含氧量高,反之则低
点击此处下载
ourdev_678058FUBHHQ.pdf(文件大小:121K) (原文件名:PWM直流电机调速论文.pdf)
#include<reg52.h>
sbit led1=P1^1;//变化
unsigned char num,pwm;
bit flag;//明暗方向标志
void init()
{
flag=0;pwm=0;num=0;//赋初值
TMOD=0x01;//定义定时器1和定时器0 都工作与方式1
TH0 = 0xFF;//100us=0.1ms
TL0 = 0x9C;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
if(flag==0)//暗---明
{
if(num==100)
{
num=0;
pwm++;
if(pwm==100)
{
flag=~flag;
}
}
}
if(flag==1)//明---暗
{
if(num==100)
{
num=0;
pwm--;
if(pwm==0)
{
flag=~flag;
}
}
}
if(num<=pwm)
led1=0;
else
led1=1;
}
}
void t0() interrupt 1//定时器0
{
TH0 = 0xFF;//100us=0.1ms
TL0 = 0x9C;
num++;
}
#include<reg52.h>
sbit d1=P0^0;
sbit x=P0^1;
unsigned char num;
void timer_init();
void main ()
{
x=0;
num=0;
timer_init();
while(1);
}
void timer_init()
{
TMOD=0x01; //16位定时器
TH0=(65536-100)/256; //赋初值
TL0=(65536-100)%256; //同上
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
}
void T0_() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
num++;
if(num==25)
{
d1=1;
}
if(num==100)
{
d1=0;
num=0;
}
}
本来我还懂pwm的,看了你的比喻,我竟然犯迷糊了
-----------------------------------------------------------------------
这哥们幽默!
谢谢兄弟,我照你这种方式写过不知道以前写的时候是否在哪里有错,一直没弄成,谢谢!mldmicro 加我!
一周热门 更多>