📄 timer0.lst
字号:
C51 COMPILER V7.05 TIMER0 08/18/2007 19:56:59 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE TIMER0
OBJECT MODULE PLACED IN timer0.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe timer0.c DB OE
stmt level source
*** WARNING C500 IN LINE 1 OF TIMER0.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1
2 //----------------------------------------------------------------
3 // C8051F020实验核心模块测试程序
4 // 定时器0及IO口输出实验
5 //
6 // 实现功能:在定时器0的驱动下,实现:
7 // 1.底板上发光二极管LED2以1秒为单位闪烁
8 //
9 // 实验条件:
10 // 1.底板上拨码开关JP1的4位设置为ON状态
11 //
12 // 说明:
13 // 本模块中配套的测试程序都是以消息驱动的.
14 //---------------------------------------------------------------
15 // 修改记录
16 // 版本 时间 人员 内容
17 // 1.0 2007/4/30 scj 建立文件,实现基本功能
18 //
19 //
20 //---------------------------------------------------------------
21
22 #include "F020.h"
23
24
25 //--------------------------------------------
26 // 数据类型定义
27 //--------------------------------------------
28
29 // 基本数据类型
30 typedef unsigned char BYTE; // 8位无符号数
31 typedef unsigned int WORD; // 16位无符号数
32 typedef unsigned long DWORD; // 32位无符号数
33
34 // 结构体
35 typedef struct
36 {
37 BYTE base; // DIDA次数
38 BYTE second; // 秒
39 BYTE minute; // 分
40
41 }S_TIME;
42
43
44 //--------------------------------------------
45 // 引脚定义
46 //--------------------------------------------
47 #define P_LED2 P31
48
49 //--------------------------------------------
50 // 宏定义
51 //--------------------------------------------
52
53 // 系统消息定义
54 #define SECD_SIGNAL 0x01
C51 COMPILER V7.05 TIMER0 08/18/2007 19:56:59 PAGE 2
55 #define MINU_SIGNAL 0x02
56
57 // 常量定义
58
59 //定时器0定时,使用SYSCLK/12作为时钟源
60 //定时计算方法,TH0:TL0= 65536-t*SYSCLK/12
61 // 定时25ms,TH0:TL0=0x4C 00
62 #define TMR0H 0x4C
63 #define TMR0L 0x00
64
65 // 每个节拍为25ms
66 #define TICKS_PER_SEC 40
67 //--------------------------------------------
68 // 全局变量定义
69 // 全局变量以g_开头
70 // 位变量: g_b
71 // 无符号字节变量: g_c
72 // 无符号双字节变量: g_w
73 // 无符号4字节变量: g_dw
74 // 有符号数在类型前加s,比如char型位g_sc
75 // 结构体为g_s后为大写
76 //--------------------------------------------
77 data BYTE g_cMainSignal; // 主消息变量
78
79 data S_TIME g_sTime; // 主时钟
80 //-----------------------------------------------
81 // 初始化函数
82 //
83 //-----------------------------------------------
84 void Timer_Init()
85 {
86 1
87 1 //.......................................
88 1 // 设置定时器的时钟信号
89 1 // - T4M T2M T1M T0M - - -
90 1 // 0 1 1 1 0 0 0 0
91 1 // 1:使用SYSCLK;0:使用SYSCLK/12
92 1 // 定时器1,2,4均使用SYSCLK
93 1 // 定时器0使用SYSCLK/12
94 1 //.......................................
95 1 CKCON = 0x70;
96 1
97 1
98 1 //......................................
99 1 // 定时0工作在16位定时器模式
100 1 // 定时器1工作在8位重载模式
101 1 //......................................
102 1
103 1 TMOD = 0x21;
104 1
105 1 //....................................
106 1 // T0作为系统节拍时钟
107 1 // 定时计算方法= 65536-t*SYSCLK/12
108 1 //.....................................
109 1 TH0 = TMR0H;
110 1 TL0 = TMR0L;
111 1
112 1
113 1 TCON = 0x00;
114 1
115 1
116 1 T2CON = 0x00; // Timer 2 Control Register
C51 COMPILER V7.05 TIMER0 08/18/2007 19:56:59 PAGE 3
117 1
118 1 TMR3CN = 0x00; // Timer 3 Control Register
119 1
120 1
121 1 T4CON = 0x30; // Timer 4 Control Register
122 1
123 1 // 定时器0启动
124 1 TR0 = 1;
125 1
126 1
127 1
128 1 }
129
130 void Port_IO_Init()
131 {
132 1 // P0.0 - TX0 (UART0), Open-Drain, Digital
133 1 // P0.1 - RX0 (UART0), Open-Drain, Digital
134 1 // P0.2 - SCK (SPI0), Open-Drain, Digital
135 1 // P0.3 - MISO (SPI0), Open-Drain, Digital
136 1 // P0.4 - MOSI (SPI0), Open-Drain, Digital
137 1 // P0.5 - NSS (SPI0), Open-Drain, Digital
138 1 // P0.6 - SDA (SMBus), Open-Drain, Digital
139 1 // P0.7 - SCL (SMBus), Open-Drain, Digital
140 1
141 1 // P1.0 - TX1 (UART1), Open-Drain, Digital
142 1 // P1.1 - RX1 (UART1), Open-Drain, Digital
143 1 // P1.2 - Unassigned, Open-Drain, Digital
144 1 // P1.3 - Unassigned, Open-Drain, Digital
145 1 // P1.4 - Unassigned, Open-Drain, Digital
146 1 // P1.5 - Unassigned, Open-Drain, Digital
147 1 // P1.6 - Unassigned, Open-Drain, Digital
148 1 // P1.7 - Unassigned, Open-Drain, Digital
149 1
150 1 // P2.0 - Unassigned, Open-Drain, Digital
151 1 // P2.1 - Unassigned, Open-Drain, Digital
152 1 // P2.2 - Unassigned, Open-Drain, Digital
153 1 // P2.3 - Unassigned, Open-Drain, Digital
154 1 // P2.4 - Unassigned, Open-Drain, Digital
155 1 // P2.5 - Unassigned, Open-Drain, Digital
156 1 // P2.6 - Unassigned, Open-Drain, Digital
157 1 // P2.7 - Unassigned, Open-Drain, Digital
158 1
159 1 // P3.0 - Unassigned, Open-Drain, Digital
160 1 // P3.1 - Unassigned, Open-Drain, Digital
161 1 // P3.2 - Unassigned, Open-Drain, Digital
162 1 // P3.3 - Unassigned, Open-Drain, Digital
163 1 // P3.4 - Unassigned, Open-Drain, Digital
164 1 // P3.5 - Unassigned, Open-Drain, Digital
165 1 // P3.6 - Unassigned, Open-Drain, Digital
166 1 // P3.7 - Unassigned, Open-Drain, Digital
167 1
168 1 XBR0 = 0x07;
169 1 XBR2 = 0x44;
170 1
171 1
172 1 // 设置端口输出方式
173 1 // 设置端口P31为输出,驱动LED
174 1 P3MDOUT = 0x02;
175 1 }
176
177 void Oscillator_Init()
178 {
C51 COMPILER V7.05 TIMER0 08/18/2007 19:56:59 PAGE 4
179 1 int i = 0;
180 1 OSCXCN = 0x67;
181 1 for (i = 0; i < 3000; i++); // Wait 1ms for initialization
182 1 while ((OSCXCN & 0x80) == 0);
183 1 OSCICN = 0x08;
184 1 }
185
186 void Interrupts_Init()
187 {
188 1 //..................................
189 1 // 初始化中断
190 1 // EA IEGF0 ET2 ES0 ET1 EX1 ET0 EX0
191 1 //..................................
192 1 IE = 0;
193 1
194 1 ET0 = 1; // 打开定时器0中断
195 1
196 1 }
197
198 //-------------------------------
199 // 功能: 初始化单片机内部资源
200 // 输入参数:无
201 // 输出参数:无
202 //-------------------------------
203 void Init_Device(void)
204 {
205 1 Timer_Init();
206 1
207 1 Port_IO_Init();
208 1
209 1 Oscillator_Init();
210 1
211 1 Interrupts_Init();
212 1 }
213
214 //------------------------------------------------
215 // 函数名称:InitVariable()
216 // 函数功能:初始化系统全局变量
217 //------------------------------------------------
218 void InitVariable()
219 {
220 1 g_cMainSignal = 0;
221 1
222 1 g_sTime.base = 0;
223 1 g_sTime.second= 0;
224 1 g_sTime.minute= 0;
225 1
226 1 }
227
228 //-------------------------------------------------------------
229 // 函数名称:定时器0中断入口函数,完成计时功能,定时时间为25ms
230 // 输入参数: 无
231 // 输出参数: 无
232 //-------------------------------------------------------------
233
234 void timer0() interrupt 1
235 {
236 1 TH0=TMR0H;
237 1 TL0=TMR0L;
238 1
239 1 // 程序时基信号
240 1 if(++g_sTime.base>=TICKS_PER_SEC)
C51 COMPILER V7.05 TIMER0 08/18/2007 19:56:59 PAGE 5
241 1 {// 1s到
242 2 g_sTime.base = 0;
243 2
244 2 g_cMainSignal|=SECD_SIGNAL; // 产生秒信号
245 2
246 2 if(++g_sTime.second>59)
247 2 {// 1分钟到
248 3 g_sTime.second = 0;
249 3
250 3 g_cMainSignal|=MINU_SIGNAL; // 产生分信号
251 3
252 3 if(++g_sTime.minute>59) g_sTime.minute=0;
253 3 }
254 2 }
255 1
256 1 }
257
258 //------------------------------------------------------------------
259 // 主函数开始
260 //-------------------------------------------------------------------
261 void main()
262 {
263 1 Init_Device(); // 初始化系统
264 1 InitVariable(); // 初始化变量
265 1
266 1 EA=0; // 禁止看门狗
267 1 WDTCN = 0xDE; // 实验中不使用看门狗
268 1 WDTCN = 0xAD;
269 1
270 1 EA = 1; // 启动系统调度
271 1
272 1
273 1 P_LED2 = 1; //
274 1
275 1
276 1 while(1)
277 1 {
278 2 if(g_cMainSignal&SECD_SIGNAL)
279 2 {
280 3 g_cMainSignal&=~SECD_SIGNAL;
281 3
282 3 P_LED2 = !P_LED2;
283 3
284 3 }
285 2
286 2 if(g_cMainSignal&MINU_SIGNAL)
287 2 {
288 3 g_cMainSignal&=~MINU_SIGNAL;
289 3
290 3 }
291 2
292 2
293 2 }
294 1
295 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 183 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.05 TIMER0 08/18/2007 19:56:59 PAGE 6
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -