1. 程式人生 > >51微控制器基於定時器0的硬體延時程式碼

51微控制器基於定時器0的硬體延時程式碼

//晶振的頻率
 #define OSC_FREQ (11059200UL)

  //每個指令的振盪週期數(4,6,12),注意,這裡一定要仔細檢視晶片手冊
  //*12 - 早期的8051、8052及當前的絕大部分51微控制器
  //*6 - Philips 的晶片
  //*4 - Dallas
  #define OSC_PER_INST (12)

 //TIME 為定時時間 單位MS
 #define PRELOAD1MS (65536 - 1*(UINT16)(OSC_FREQ/(OSC_PER_INST*1000)))
 #define PRELOAD5MS (65536 - 5*(UINT16)(OSC_FREQ/(OSC_PER_INST*1000)))
void start_Timeout1ms(){ TH0 = PRELOAD1MS / 256; TL0 = PRELOAD1MS % 256; TF0 = 0 ;//清溢位標誌位 ET0 = 0; //關定時器0的中斷 TR0 = 1; //啟動定時器 } void start_Timeout5ms(){ //TMOD = ; TH0 = PRELOAD5MS / 256; TL0 = PRELOAD5MS % 256; TF0 = 0 ;//清溢位標誌位 ET0 = 0; //關定時器0的中斷 TR0 = 1
; //啟動定時器 } void stop_Timeout(){ TR0 = 0; } void Delay5ms(){ start_Timeout5ms(); while(!_testbit_(TF0)); stop_Timeout(); } /* 用法 start_Timeout1ms(); while(!TF0); //等待T0超時 stop_Timeout();

以上為轉載,沒經過驗證