1 //晶振的頻率 2 #define OSC_FREQ (11059200UL) 3 4 //每個指令的振盪周期數(4,6,12),注意,這里一定要仔細查看芯片手冊 5 //*12 - 早期的8051、8052及當前的絕大部分51單片機 6 //*6 - Philips 的芯片 7 //*4 - Dallas 8 #define OSC_PER_INST (12) 9 10 //TIME 為定時時間 單位MS 11 #define PRELOAD1MS (65536 - 1*(UINT16)(OSC_FREQ/(OSC_PER_INST*1000))) 12 #define PRELOAD5MS (65536 - 5*(UINT16)(OSC_FREQ/(OSC_PER_INST*1000))) 13 14 void start_Timeout1ms(){ 15 TH0 = PRELOAD1MS / 256; 16 TL0 = PRELOAD1MS % 256; 17 TF0 = 0 ;//清溢出標志位 18 19 ET0 = 0; //關定時器0的中斷 20 21 TR0 = 1; //啟動定時器 22 23 } 24 25 void start_Timeout5ms(){ 26 //TMOD = ; 27 28 TH0 = PRELOAD5MS / 256; 29 TL0 = PRELOAD5MS % 256; 30 TF0 = 0 ;//清溢出標志位 31 32 ET0 = 0; //關定時器0的中斷 33 34 TR0 = 1; //啟動定時器 35 36 } 37 38 void stop_Timeout(){ 39 TR0 = 0; 40 } 41 42 void Delay5ms(){ 43 start_Timeout5ms(); 44 while(!_testbit_(TF0)); 45 stop_Timeout(); 46 } 47 48 /* 用法 49 start_Timeout1ms(); 50 while(!TF0); //等待T0超時 51 stop_Timeout(); 52 */
以上為轉載,沒經過驗證