📄 timer.lst
字号:
C51 COMPILER V7.20 TIMER 01/31/2007 10:20:43 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\c51.exe timer.c DB OE
line level source
1 /****************************************************************************
2 **
3 ** 文件名: timer.c
4 ** 功能: C8051Fxxx定时器驱动和延时函数;
5 ** 创建时间:2005.08.05
6
7 ** 修改时间:2005.12.01
8 ** 修改说明:
9
10 ** 作者: 李立学
11 ** 版权申明:可以拷贝,可以修改,但必须保留修改时间和作者信息
12 **
13 ****************************************************************************/
14
15
16 #include "LZK.H"
17
18 /***********************************************************************
19 * 名称:DuS()
20 * 功能:延时,10uS为1个单位.
21 * 入口参数:ucTime,延时单位个数时间.
22 * 出口参数:无
23 * 说明:
24 ***********************************************************************/
25 void DuS(unsigned char ucTime) // Unit: 1uS,24MHz System clock
26 {
27 1 unsigned char i;
28 1 for(i=0;i<ucTime;i++);
29 1 for(i=0;i<ucTime;i++);
30 1 }
31
32 /***********************************************************************
33 * 名称:DmS()
34 * 功能:延时,1mS为1个单位.
35 * 入口参数:ucTime,延时单位个数时间.
36 * 出口参数:无
37 * 说明:
38 ***********************************************************************/
39 void DmS(unsigned char ucTime) // Unit: 1mS
40 {
41 1 unsigned char i;
42 1 for(i=0; i<ucTime; i++)
43 1 {
44 2 DuS(250);
45 2 DuS(250);
46 2 DuS(250);
47 2 DuS(250);
48 2 }
49 1 }
50
51 /***********************************************************************
52 * 名称:D1S()
53 * 功能:延时,1S为1个单位.
54 * 入口参数:ucTime,延时单位个数时间.
55 * 出口参数:无
C51 COMPILER V7.20 TIMER 01/31/2007 10:20:43 PAGE 2
56 * 说明:
57 ***********************************************************************/
58 void D1S(unsigned char ucTime) // Unit: 1S
59 {
60 1 unsigned char i;
61 1 for(i=0;i<ucTime;i++)
62 1 {
63 2 DmS(250);
64 2 DmS(250);
65 2 DmS(250);
66 2 DmS(250);
67 2 }
68 1 }
69
70 /***********************************************************************
71 * 名称:T0T1_Init()
72 * 功能:T0、T1初始化.
73 T0:功率因数的相差测量;T1:UART1的波特率发生器,8位自装载模式;
74 Mode 1: 16-bit CNT; Mode 2: 8-bit CNT with Auto-Reload
75 * 入口参数:无.
76 * 出口参数:无
77 * 说明:
78 ***********************************************************************/
79 void T0T1_Init(void)
80 {
81 1 SFRPAGE = TIMER01_PAGE; // T0: PhaseDiff MSR; T1: UART1;
82 1 TCON = 0x00; // 0000 0000
83 1 // TCON(00000000): Timer Control Register
84 1 // TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
85 1 // Bit7: TF1: Timer 1 Overflow Flag.
86 1 // Bit6: TR1: Timer 1 Run Control.
87 1 // Bit5: TF0: Timer 0 Overflow Flag.
88 1 // Bit4: TR0: Timer 0 Run Control.
89 1 // Bit3: IE1: External Interrupt 1 Flag.
90 1 // Bit2: IT1: External Interrupt 1 Type Select.
91 1 // 0/1: /INT1 is level triggered , active logic-low / edge triggered, falling-edge.
92 1 // Bit1: IE0: External Interrupt 0 Flag.
93 1 // Bit0: IT0: External Interrupt 0 Type Select.
94 1 // 0/1: /INT0 is level triggered , active logic-low / edge triggered, falling-edge.
95 1
96 1 TMOD = 0x29; // 0010 1001: T1 MODE 2; T0 MODE 1;
97 1 // TMOD(00000000): Timer Mode Register
98 1 // Bit7: GATE1: Timer 1 Gate Control.
99 1 // 0: Timer 1 enabled when TR1 = 1 irrespective of /INT0 logic level.
100 1 // 1: Timer 1 enabled only when TR1 = 1 AND /INT0 = logic 1.
101 1 // Bit6: C/T1: Counter/Timer 1 Select.
102 1 // 0: Timer : Timer 1 incremented by clock defined by T0M bit (CKCON.3).
103 1 // 1: Counter: Timer 1 incremented by high-to-low transitions on external input pin (T0).
104 1 // Bits5-4: T1M1-T1M0: Timer 1 Mode Select.
105 1 // 00 Mode 0: 13-bit counter/timer
106 1 // 01 Mode 1: 16-bit counter/timer
107 1 // 10 Mode 2: 8-bit counter/timer with auto-reload
108 1 // 11 Mode 3: Timer 1 inactive
109 1 // Bit3: GATE0: Timer 0 Gate Control.
110 1 // 0: Timer 0 enabled when TR0 = 1 irrespective of /INT0 logic level.
111 1 // 1: Timer 0 enabled only when TR0 = 1 AND /INT0 = logic 1.
112 1 // Bit2: C/T0: Counter/Timer Select.
113 1 // 0: Timer: Timer 0 incremented by clock defined by T0M bit (CKCON.3).
114 1 // 1: Counter: Timer 0 incremented by high-to-low transitions on external input pin (T0).
115 1 // Bits1-0: T0M1-T0M0: Timer 0 Mode Select. Same with T1M1-T1M0
116 1 // 00 Mode 0: 13-bit counter/timer
117 1 // 01 Mode 1: 16-bit counter/timer
C51 COMPILER V7.20 TIMER 01/31/2007 10:20:43 PAGE 3
118 1 // 10 Mode 2: 8-bit counter/timer with auto-reload
119 1 // 11 Mode 3: Timer 1 inactive
120 1 CKCON = 0x00; // 000 1 0 0 00: T1 Uses the SYSCLK; T0 USE SYSCLK/12;
121 1 // CKCON(00000000): Clock Control Register
122 1 // Bits7-5: UNUSED. Read = 000b, Write = don’t care.
123 1 // Bit4: T1M: Timer 1 Clock Select.
124 1 // 1, use SYSCLK.
125 1 // Bit3: T0M: Timer 0 Clock Select.
126 1 // 1, use SYSCLK.
127 1 // Bit2: UNUSED. Read = 0b, Write = don’t care.
128 1 // Bits1-0: SCA1-SCA0: Timer 0/1 Prescale Bits
129 1 // 00 System clock divided by 12
130 1 // 01 System clock divided by 4
131 1 // 10 System clock divided by 48
132 1 // 11 External clock divided by 8
133 1 TH0 = TH0_INIT; // TH0_INIT = 0x00;
134 1 TL0 = TL0_INIT; // TL0_INIT = 0x00;
135 1
136 1 TH1 = TH1_INIT; // UART1: 57600;
137 1 TL1 = TL1_INIT; // UART1: 57600;
138 1
139 1 SFRPAGE = 0x00;
140 1 }
141
142 /***********************************************************************
143 * 名称:T2_Init()
144 * 功能:T2初始化.
145 125uS定时中断,高优先级.
146 * 入口参数:无.
147 * 出口参数:无
148 * 说明:
149 ***********************************************************************/
150 void T2_Init(void)
151 {
152 1 SFRPAGE = TMR2_PAGE;
153 1 TMR2CN = 0x00; // 0000 0000
154 1 // TMR2CN(00000000): Timer n Control Registers
155 1 // Bit7: TFn: Timer n Overflow/Underflow Flag.
156 1 // Bit6: EXFn: Timer 2, 3, or 4 External Flag.
157 1 // Bit5-4: Reserved.
158 1 // Bit3: EXENn: Timer n External Enable.
159 1 // Bit2: TRn: Timer n Run Control.
160 1 // 0/1: Timer Disabled / Enabled and running/counting.
161 1 // Bit1: Tn/C: Timer Select/Counter.
162 1 // Bit0: CP/RLn: Capture/Reload Select.
163 1 // 0/1: Timer is in Auto-Reload Mode / Capture Mode.
164 1 TMR2CF = 0x00; // 000 00 000: T2 uses the sysclk devided by 12;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -