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...