你的说法是不对的。
看我的程序:
#include<reg51.h>
#define LED P2
unsigned int T=0,Tt=500,i=0,Ii=100,j=0;
bit A=1;
void TimeConfig();
void main(void)
{
TimeConfig();
while(1)
{
if (T>=Tt)
{
T=0;
}
if (i>=Ii)
{
i=0;
if (A==1)
{
j++;
}
else
{
j--;
}
}
if (j==Tt)
{
A=0;
}
if (j==0)
{
A=1;
}
if (T<=j)
{
LED=0x00;
}
else
{
LED=0xff;
}
}
}
void TimeConfig()
{
TMOD = 0x01;
TH0 = 0xff;
TL0 = 0xff;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Time0() interrupt 1
{
TH0 = 0xff;
TL0 = 0xff;
T++;
i++;
}
看出我们的程序有什么不同了没?
就是那点不同,却得到不同的结果。
分析程序可以知道:你和我都是用的time++,你用的判断是<=,我作的>=。我们都没有学汇编,对语句执行的时间不了解,中断在什么时候发生就不可预见。我的语句判断,是大了就怎么样,你的判断是小了就怎么样。大了,不论大多少,总是可以判断到的,而小了的判断,当数据大了后,就无法判断,这正是你的程序执行不了的原因。 |