1樓:匿名使用者
同時用兩個中斷肯定會衝突
定時器1完全可以不用,主程式只管顯示就行,定時器0中斷程式中更新計時數值
還可以嘗試在定時器0的中斷程式裡關閉定時器1,交且將定時器0的中斷優先順序設高
2樓:匿名使用者
就你現在的程式可以正常掃描顯示的呀,就是有點閃爍的效果。
但不知道,這是和誰學習的,數碼管顯示要用定時器定時,中斷一次顯示一次,這可是**,執行速度肯定比實物要慢,所以,就會有閃爍的。
其實,你的主程式中有計算四位數的程式
temp[0]=number[num/1000];
temp[1]=number[num/100%10];
temp[2]=number[num/10%10];
temp[3]=number[num%10];
這是很費時的,這個時間足夠顯示一位的延時了,所以,就在主程式中呼叫顯示子函式就很好的,何必還定時掃描呢。
這樣void main()
}問題就解決了。
最後就一句,那計數是很快了,是每秒計一個數嗎,還是就是計數?
這樣改,要關掉定時器t1的中斷。
3樓:匿名使用者
display中真不知道你要幹嘛,你只這樣傳遞引數有何意義
關於51微控制器使用兩個定時器進行控制的問題
4樓:匿名使用者
//看你意思,兩個定時都是50ms中斷吧?假設d1=1為燈亮
while(1)
}//我覺得你先用一個定時做實驗,比較好。
5樓:沒事來玩幽白
d1=0,d1=1,這倆應該放到if裡面
tf0=0;//關閉定時器0
tf1=1;開啟定時器1
d1=0;//led滅
while(1)
if(bb==40)
}並且在程式開始處開啟定時器1(也就是先執行的定時器),但是要注意,你現在是兩個定時器同時工作,應該在if中關閉當前的定時器,並開啟另一個定時器
6樓:2014的彈子球
首先tmod設定不對,只設定了定時器0,應為tmod=0x11,我記得不清楚了不一定對,。二tcon不對,這個暫存器是控制所有定時器的,應為0x01010000,這個·你也自己查,記不清楚了。詳情自己看資料手冊。。
至於你說的風格,我目前還是沒理解。而且這麼簡單的程式也看不出來啥
7樓:匿名使用者
#include
#define uchar unsigned charvoid init();
uchar aa,bb;
sbit d1=p1^0;
void main()
}void init()
void timer0() interrupt 1void timer1() interrupt 3
51微控制器在同時使用兩個定時器時候,我的為什麼t0總是不好使??
8樓:匿名使用者
這兩個地方改一下試試
void time0_isr() interrupt 1 using 1
void time1_isr() interrupt 3 using 2
9樓:硬體開發
你兩個定時器定時50ms中斷同時到達中斷,你覺得可能嗎, t1高於t0,肯定先執行t1,問題就出現在這裡。
利用微控制器設計59秒計時器,利用51微控制器,4個數碼管設計一個計時器,要求在數碼管上顯示的資料從0開始每1秒鐘加1。
共陽共陰只是你在選com端時給其高低電平的問題無關大雅我給一段pic微控制器的程式讓你參考一下,如果你看懂的話應該能做出來了 include include 此程式實現計時秒錶功能,時鐘顯示範圍00.00 99.99秒,分辨度 0.01秒 unsigned char s0,s1,s2,s3 定義0....
怎樣51微控制器呼叫兩個子程式,怎樣51微控制器呼叫兩個子程式
mov r0,08h mov a,0feh loop mov p1,a lcall del rr a djnz r0,loop 使用djnz 指令。為0執行下一指令,不為0跳轉。就可以呼叫內兩個容子程式了 估計是進入到倒計時程式,一直沒有出來。主程式直接呼叫洗滌程式。定時器,每到1s時,再去呼叫一下...
51微控制器的串列埠io(txd,rxd),能否同時接到兩片ma
理論上是可以的,但你必須從應答的流程上保證,在任意時刻最多只能有一個從 版機在傳送資料,這權點要考慮清楚。另外,txd,rxd可能驅動不了這麼多口子,最簡單的辦法,你可以將訊號輸入到一個74ls04,以增強其驅動。可以!用一片cd4052晶片把txd rxd分接到兩片max232晶片中去。cd405...