1樓:匿名使用者
工作方式1是16位的自動重灌定時計數器,能裝的最大數為65536(0-65535);那麼初值為65536-50000=15536(0x3cb0),就是你說的50ms溢位一次;12m的晶振,一個時鐘週期剛好1us,50000us=50ms;
如果你需要1秒的定時,可以在定時器計數器中斷裡設一個計數變數x,進一次中斷x+1;然後在程式裡檢查x的值,當x加夠20次,把x清零,計時時間就是1秒了。
2樓:匿名使用者
看來,你對定時器真是不理解呀。
1.關於定時器最長的定時時間,假如晶振頻率是12mhz,機器週期是1us,最長定時的時間是65.536ms。
所以,你想定時1秒是不可能的。通常是定時50ms,以中斷方式,這樣,每中斷一次50ms,則中斷20次就是1秒。
2.你這個程式就是定時50ms的,變成50000us。晶振頻率是12m,初始值計算,x=65535-50000=15536=3cb0h,所以,高8位,th0=0x3c;
低8位,tl0=0xb0;
關於51微控制器使用兩個定時器進行控制的問題
3樓:匿名使用者
//看你意思,兩個定時都是50ms中斷吧?假設d1=1為燈亮
while(1)
}//我覺得你先用一個定時做實驗,比較好。
4樓:沒事來玩幽白
d1=0,d1=1,這倆應該放到if裡面
tf0=0;//關閉定時器0
tf1=1;開啟定時器1
d1=0;//led滅
while(1)
if(bb==40)
}並且在程式開始處開啟定時器1(也就是先執行的定時器),但是要注意,你現在是兩個定時器同時工作,應該在if中關閉當前的定時器,並開啟另一個定時器
5樓:2014的彈子球
首先tmod設定不對,只設定了定時器0,應為tmod=0x11,我記得不清楚了不一定對,。二tcon不對,這個暫存器是控制所有定時器的,應為0x01010000,這個·你也自己查,記不清楚了。詳情自己看資料手冊。。
至於你說的風格,我目前還是沒理解。而且這麼簡單的程式也看不出來啥
6樓:匿名使用者
#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微控制器定時器初始值的問題,51微控制器定時器初值公式
從本質上看,你根本不瞭解定時器的工作,你就只看 又豈能看懂。51微控制器的定時器0是16位,當然,這個模式是可以改變的。我就假設工作在16位模式下,因為大部分時候,也工作在這個模式下。16位的定時器,但只能用微控制器是8位的,所以,就拆分成了兩個位元組,高八位和低八位。th0表示定時器0的高八位,t...
51微控制器定時器0工作於方式3此時定時器1工作於方式
做而論道 定時器0工作於方式3 時,佔用了定時器1的tr1和tf0。此時,定時器1只能工作於 串列埠波特率發生器 的模式。把定時器1,按照 波特率發生器 的模式設定,寫入初始值即可正常工作。看看書去吧,有這方面的說明的。 我來回答 定時0工作於方式3分成兩個定時器th0,tl0,佔用了t1的tr1和...
C51微控制器定時器和中斷有什麼聯絡
刀光劍影 定時器是經過多少個週期之後執行什麼程式 中斷是有中斷請求時中斷正在執行的程式,沒有中斷請求時不影響 當有中斷或者中斷優先順序高於正在執行的程式時就產生中斷進入中斷程式 流星雨之張翰 px0 ip.0 外部中斷0優先順序設定位 pt0 ip.1 定時 計數器t0優先順序設定位 px1 ip....