51微控制器同時使用兩個計時器的問題

時間 2021-08-11 15:58:11

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,問題就出現在這裡。

微控制器60秒計時器的程式,用AT89C51實現

1 用at89c51微控制器的定時 計數器t0產生一秒的 定時時間,作為秒計數時間,當一秒產生時,秒 計數加1,秒計數到60時,自動從0開始。微控制器 晶振頻率為12mhz include define uchar unsigned char define uint unsigned intucha...

關於51微控制器定時器的問題,關於51微控制器使用兩個定時器進行控制的問題

工作方式1是16位的自動重灌定時計數器,能裝的最大數為65536 0 65535 那麼初值為65536 50000 15536 0x3cb0 就是你說的50ms溢位一次 12m的晶振,一個時鐘週期剛好1us,50000us 50ms 如果你需要1秒的定時,可以在定時器計數器中斷裡設一個計數變數x,進...

51微控制器定時器初始值的問題,51微控制器定時器初值公式

從本質上看,你根本不瞭解定時器的工作,你就只看 又豈能看懂。51微控制器的定時器0是16位,當然,這個模式是可以改變的。我就假設工作在16位模式下,因為大部分時候,也工作在這個模式下。16位的定時器,但只能用微控制器是8位的,所以,就拆分成了兩個位元組,高八位和低八位。th0表示定時器0的高八位,t...