下面的程序是源代码,我修改了以下具体的数值(两条注释),发现原本的呼吸灯变成了快速地一亮一灭,为什么?
时间:10-02
整理:3721RD
点击:
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit PWM=P2^1;
bit DIR;
u16 count,value,timer1;
void Timer1Init()
{
TMOD|=0X10;
TH1 = 0xFF;
TL1 = 0xff;
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
void main()
{
Timer1Init();
while(1)
{
if(count>3000) //count的数值由原来的200改为3000,value的数值由1000改为5000,
{ //之后现象就如我在题目中所说的一样,为什么会这样?
count=0; //PWM的周期和占空比的数值到底应该根据什么条件进行合理的设置?
if(DIR==1)
{
value++;
}
if(DIR==0)
{
value--;
}
}
if(value==5000)
{
DIR=0;
}
if(value==0)
{
DIR=1;
}
if(timer1>5000)
{
timer1=0;
}
if(timer1 <value)
{
PWM=1;
}
else
{
PWM=0;
}
}
}
void Time1(void) interrupt 3
{
TH1 = 0xFF;
TL1 = 0xff; //1us
timer1++;
count++;
}
typedef unsigned int u16;
typedef unsigned char u8;
sbit PWM=P2^1;
bit DIR;
u16 count,value,timer1;
void Timer1Init()
{
TMOD|=0X10;
TH1 = 0xFF;
TL1 = 0xff;
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
void main()
{
Timer1Init();
while(1)
{
if(count>3000) //count的数值由原来的200改为3000,value的数值由1000改为5000,
{ //之后现象就如我在题目中所说的一样,为什么会这样?
count=0; //PWM的周期和占空比的数值到底应该根据什么条件进行合理的设置?
if(DIR==1)
{
value++;
}
if(DIR==0)
{
value--;
}
}
if(value==5000)
{
DIR=0;
}
if(value==0)
{
DIR=1;
}
if(timer1>5000)
{
timer1=0;
}
if(timer1 <value)
{
PWM=1;
}
else
{
PWM=0;
}
}
}
void Time1(void) interrupt 3
{
TH1 = 0xFF;
TL1 = 0xff; //1us
timer1++;
count++;
}
if(count>3000)把这值个改小点。
时间设置的过快
快速熄灭,点亮;3楼说明了原因,2楼说明了方法。 小编温习一下定时中的知识,想出来原因,就会有大收获啦~