亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
51單片機定時器中斷做10.00s的秒表,if(b==50)段的代碼位置不同結果出錯
[打印本頁]
作者:
王可樂_
時間:
2020-1-25 16:17
標題:
51單片機定時器中斷做10.00s的秒表,if(b==50)段的代碼位置不同結果出錯
各位大神新年好,TH0,TL0初始化是一定要放在while(1)里面嗎?我在網上查一般是放while外面的,我寫的也是放外面,但是出錯了,如果放while(1)里面就是正確的,請問為什么?調試的時候發現TH0.TL0好像不會重置一樣,就是if (b==50)下面的那段,如果放在中斷函數里就是正確的,放主函數里是錯的,假如把TH0.TL0初值改大了,比如1000,就是對的,請問一下是為什么?是因為什么錯過了檢測b==50的時間嗎?
單片機源程序如下:
#include<reg52.h>
char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
int bai,shi,ge,b=0,temp=0;
sbit S1=P3^5;
void main()
{
TMOD=0x01;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
bai=temp/100;
shi=temp/10%10;
ge=temp%10;
P2=0xfe;
P0=table[bai]&0x7f;
P0=0xff;
P2=0xfd;
P0=table[shi];
P0=0xff;
P2=0xfb;
P0=table[ge];
P0=0xff;
if(b==50)
{
temp++;
b=0;
}
if(temp==999)
temp=0;
}
}
void Timer0() interrupt 1
{
TH0=(65536-200)/256;
TL0=(65536-200)%256;
b++;
}
作者:
王可樂_
時間:
2020-1-25 20:58
已經解決,因為延時的計數判斷放主循環導致b的判斷與定時器相加不同步
作者:
Dtrahon
時間:
2020-1-26 02:22
好神奇 ,占個沙發坐等大神。你的代碼我賦值了一下 中斷子程序哪里報錯了
作者:
王可樂_
時間:
2020-1-26 19:31
Dtrahon 發表于 2020-1-26 02:22
好神奇 ,占個沙發坐等大神。你的代碼我賦值了一下 中斷子程序哪里報錯了
你好,請問你賦值多少?報的錯誤是什么?我這里是0 error 0 waring噢,我的錯誤是因為判斷b==50的前面有很多語句,耽誤了判斷,因為main函數和定時器分開并且同時運行,然后我賦初值是0.2ms,b=50的時候還沒執行到判斷語句,當執行到判斷語句了b又加一了,所以初值改成1000的話,就有充足的時間完成判斷
作者:
Dtrahon
時間:
2020-1-27 23:20
Dtrahon 發表于 2020-1-26 02:22
好神奇 ,占個沙發坐等大神。你的代碼我賦值了一下 中斷子程序哪里報錯了
哈哈,這個的確很容易錯,把==改成>應該就能解決了
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1