📄 manager.lst
字号:
C51 COMPILER V6.12 MANAGER 05/26/2005 20:51:46 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE MANAGER
OBJECT MODULE PLACED IN .\manager.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\manager.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //***********************************************************************************
2 // 头文件
3 //***********************************************************************************
4
5 //-------------------------------------------------------------------------
6 // 包含文件
7 //-------------------------------------------------------------------------
8 #include <c8051f020.h> //SFR declarations
9 #include <intrins.h> //未知
10
11 //------------------------------------------------------------------------------------
12 // 数据类型定义
13 //------------------------------------------------------------------------------------
14
15 #define uchar unsigned char
16 #define uint unsigned int
17
18 //------------------------------------------------------------------------------------
19 // 16-bit SFR Definitions for 'F02x
20 //------------------------------------------------------------------------------------
21
22 sfr16 DP = 0x82; // data pointer
23 sfr16 TMR3RL = 0x92; // Timer3 reload value
24 sfr16 TMR3 = 0x94; // Timer3 counter
25 sfr16 ADC0 = 0xbe; // ADC0 data
26 sfr16 ADC0GT = 0xc4; // ADC0 greater than window
27 sfr16 ADC0LT = 0xc6; // ADC0 less than window
28 sfr16 RCAP2 = 0xca; // Timer2 capture/reload
29 sfr16 T2 = 0xcc; // Timer2
30 sfr16 RCAP4 = 0xe4; // Timer4 capture/reload
31 sfr16 T4 = 0xf4; // Timer4
32 sfr16 DAC0 = 0xd2; // DAC0 data
33 sfr16 DAC1 = 0xd5; // DAC1 data
34
35 //------------------------------------------------------------------------------------
36 // 全局常数
37 //------------------------------------------------------------------------------------
38
39 //------------------------------------------------------------------------------------
40 // 数据类型定义
41 //------------------------------------------------------------------------------------
42
43 struct time //时-分-秒结构
44 {
45 int hour;
46 int minute;
47 int second;
48 };
49
50 //------------------------------------------------------------------------------------
51 // 全局变量
52 //------------------------------------------------------------------------------------
53
54 int present_time[17]; //当前时间,RTC取得的数据
55 int present_second; //当前时间-秒
C51 COMPILER V6.12 MANAGER 05/26/2005 20:51:46 PAGE 2
56 int present_minute; //当前时间-分
57 int present_hour; //当前时间-时
58 int present_date; //当前时间-日
59 int present_month; //当前时间-月
60 int present_year; //当前时间-年
61
62 uint rtc_read_write; //RTC读写码
63 uint rtc_register; //RTC寄存器地址
64 uint rtc_data; //向RTC写的数据
65 uint rtc_data_flag; //RTC
66
67
68 //------------------------------------------------------------------
69 // 函数声明
70 //------------------------------------------------------------------
71
72 // RTC-实时时钟部分
73
74 void rtc_int(void); //RTC中断
75 void send_rtc_command(uint rtc_register_local, uint rtc_data_local); //向RTC写数据
76 void init_rtc(void); //RTC初始化
77 void delay(int time);
78
79 //*************************************************************************************
80 // RTC-实时时钟部分
81 //
82 // void rtc_int(void); //RTC中断
83 // void send_rtc_command(uint rtc_register_local, uint rtc_data_local); //向RTC写数据
84 // void init_rtc(void); //RTC初始化
85 // void read_rtc_data(void); //读取RTC的数据
86 //*************************************************************************************
87
88 //================================================================
89 // RTC串行中断
90 //================================================================
91
92 void rtc_int(void) interrupt 7
93 {
94 1 //EA=0;
95 1
96 1 switch(SMB0STA)
97 1 {
98 2 case 0x08:
99 2 {
100 3 SMB0DAT=rtc_read_write;
101 3 STA=0;
102 3 break;
103 3 }
104 2 case 0x10:
105 2 {
106 3 STO=1;///
107 3 break;
108 3 }
109 2 case 0x18:
110 2 {
111 3 SMB0DAT=rtc_register;
112 3 break;
113 3 }
114 2 case 0x20:
115 2 {
116 3 STO=1;///
117 3 break;
C51 COMPILER V6.12 MANAGER 05/26/2005 20:51:46 PAGE 3
118 3 }
119 2 case 0x28:
120 2 {
121 3 if(rtc_data_flag==0)
122 3 {
123 4 SMB0DAT=rtc_data;
124 4 rtc_data_flag=1;
125 4 }
126 3 else
127 3 {
128 4 STO=1;
129 4 rtc_data_flag=0;
130 4 }
131 3 break;
132 3 }
133 2 case 0x30:
134 2 {
135 3 STO=1;///
136 3 break;
137 3 }
138 2 case 0x38:
139 2 {
140 3 STO=1;///
141 3 break;
142 3 }
143 2 case 0x40:
144 2 {
145 3 AA=1;
146 3 break;
147 3 }
148 2 case 0x48:
149 2 {
150 3 STO=1;///
151 3 break;
152 3 }
153 2 case 0x50:
154 2 {
155 3 present_time[rtc_data_flag]=SMB0DAT;
156 3 if(rtc_data_flag==15)
157 3 {
158 4 AA=0;
159 4 }
160 3 rtc_data_flag=rtc_data_flag+1;
161 3 break;
162 3 }
163 2 case 0x58:
164 2 {
165 3 STO=1;
166 3 break;
167 3 }
168 2 default:
169 2 {
170 3 STO=1;///
171 3 break;
172 3 }
173 2 }
174 1 SI=0;
175 1
176 1 //EA=1;
177 1 }
178
179 //================================================================
C51 COMPILER V6.12 MANAGER 05/26/2005 20:51:46 PAGE 4
180 // 向RTC写数据
181 //================================================================
182
183 void send_rtc_command(uint rtc_register_local, uint rtc_data_local)
184 {
185 1 rtc_read_write=0xd0;
186 1 rtc_register=rtc_register_local;
187 1 rtc_data=rtc_data_local;
188 1 rtc_data_flag=0;
189 1
190 1 STA=1;
191 1 }
192
193 //================================================================
194 // 初始化RTC
195 //================================================================
196
197 void init_rtc(void)
198 {
199 1 send_rtc_command(0x00,0x00);delay(1000); //second
200 1 send_rtc_command(0x01,0x32);delay(1000); //minute
201 1 send_rtc_command(0x02,0x08);delay(1000); //hour
202 1 send_rtc_command(0x03,0x04);delay(1000); //day
203 1 send_rtc_command(0x04,0x14);delay(1000); //date
204 1 send_rtc_command(0x05,0x04);delay(1000); //month
205 1 send_rtc_command(0x06,0x05);delay(1000); //year
206 1 send_rtc_command(0x07,0x00);delay(1000);
207 1 send_rtc_command(0x08,0x00);delay(1000);
208 1 send_rtc_command(0x09,0x00);delay(1000);
209 1 send_rtc_command(0x0a,0x00);delay(1000);
210 1 send_rtc_command(0x0b,0x00);delay(1000);
211 1 send_rtc_command(0x0c,0x00);delay(1000);
212 1 send_rtc_command(0x0d,0x00);delay(1000);
213 1 send_rtc_command(0x0e,0x18);delay(1000); //control
214 1 send_rtc_command(0x0f,0x00);delay(1000); //status
215 1 send_rtc_command(0x10,0xa5);delay(1000); //trickle charge
216 1 }
217
218 //================================================================
219 // 延时函数
220 //================================================================
221
222 void delay(int time)
223 {
224 1 int i;
225 1 for(i=0;i<time;i++){;}
226 1 }
227
228 //********************************************************************
229 // 主程序部分
230 //********************************************************************
231
232 void main (void)
233 {
234 1 int i;
235 1
236 1 P0MDOUT=0xff;
237 1 P1MDOUT=0x00;
238 1 P3MDOUT=0xff; //端口设置
239 1
240 1 WDTCN = 0xde; WDTCN = 0xad; // 关闭看门狗
241 1
C51 COMPILER V6.12 MANAGER 05/26/2005 20:51:46 PAGE 5
242 1 //启动外部时钟
243 1 OSCXCN=0x27; //外部时钟允许
244 1 for(i=0;i<100;i++) delay(500); //等待至少1ms
245 1 //while(!(OSCXCN&0x80));
246 1 OSCICN=0x88;
247 1
248 1 XBR0 = 0x01; //SDA-P0.0, SCL-P0.1
249 1 XBR1 = 0x14; //INT0-P0.2, INT1-P0.3
250 1 XBR2 = 0x40; //交叉开关允许
251 1
252 1 EX0 = 1; //INT0允许
253 1 EX1 = 1; //INT1允许
254 1 EIE1=0x02; //MSBus中断允许
255 1
256 1 IT0=1; //INT0下降沿触发
257 1 IT1=0; //INT1电平触发
258 1
259 1 EA = 1; //允许所有中断
260 1
261 1 SMB0CR=0x00; //时钟速率寄存器
262 1 ENSMB=1;
263 1 SMBFTE=0;
264 1 SMBTOE=1;
265 1
266 1 TMR3CN=0x87;
267 1 TMR3RLL=0xff;
268 1
269 1 init_rtc(); //初始化时钟
270 1
271 1 while(1)
272 1 {
273 2 }
274 1
275 1 }
276
277
278
279
280
281
282
283
284
285
286
287
288
289
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 550 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 54 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -