|
你的說法是不對(duì)的。
看我的程序:
#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++;
}
看出我們的程序有什么不同了沒?
就是那點(diǎn)不同,卻得到不同的結(jié)果。
分析程序可以知道:你和我都是用的time++,你用的判斷是<=,我作的>=。我們都沒有學(xué)匯編,對(duì)語句執(zhí)行的時(shí)間不了解,中斷在什么時(shí)候發(fā)生就不可預(yù)見。我的語句判斷,是大了就怎么樣,你的判斷是小了就怎么樣。大了,不論大多少,總是可以判斷到的,而小了的判斷,當(dāng)數(shù)據(jù)大了后,就無法判斷,這正是你的程序執(zhí)行不了的原因。 |
|