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 */

以上为转载,没经过验证

posted on 2013-01-25 10:23  scdyxcc  阅读(3458)  评论(0编辑  收藏  举报