满意答案
zJ张俭
2014.02.09
采纳率:43% 等级:12
已帮助:10469人
你有几个错误:
1 你的定时器没有重装,导致第一次中断和后面的中断时间不一样,第一次时间短,后面的时间一直是以65536个周期中断的.
2 你在中断函数里用了 for 循环,for循环是一下子就执行完了的,而不是你想象的每中断一次才执行一次.
for(a=0;a<8;a++)
{
P1=(P1<<1)+1; //----这一句,使得你的第二个灯亮,其实第三,四,五个都亮了,但是因为你的
//----For循环太快了,你看不出来
};
if(a==8) //---执行完for之后,a肯定等于8,所以执行下面的,结果就是第一个灯亮
P1=0xfe;
3 我给你改正的,程序:功能是先是第一个灯亮,再是第一个灯灭,亮2,然后2灭,亮3.....
void time1() interrupt 3
{
tt++;
if(tt==10)
{
tt = 0; //---这句表示中断10次换一个灯,不可少
//----如果没有这句tt = 0,则成了中断256次才换一个灯
P1 =~(1<
//---最好要自己思考,想明白
aa++;
aa &= 0x07;
}
//----别忘记装入初值,你这个应该是10ms中断,然后是100ms换一次灯
//-----如果你不装初值,就成了 65.536ms中断一次,再加上你前面不加上 tt = 0;
//------就成了16秒才换一次灯
TH1=0xd8;
TL1=0xf0;
}
10分享举报