rtcconf.lst
来自「菜鸟,详细NRF24E1运用,程序,电路」· LST 代码 · 共 377 行
LST
377 行
C51 COMPILER V9.00 RTCCONF 11/13/2010 14:44:19 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE RTCCONF
OBJECT MODULE PLACED IN rtcconf.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL C V4\C51\BIN\C51.EXE rtcconf.c BROWSE DEBUG OBJECTEXTEND
line level source
*** WARNING C500 IN LINE 1 OF RTCCONF.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))
1 #include "reg24le1.h"
2 #include "rtcconf.h"
3
4 //函数
5
6 #define ONESTEP 33333
7
8 static char hour=0,minute=0,second=0;
9
10 void rtcconfig(void) //rtc config
11 {
12 1 RTC2CON&=0xfe;
13 1 RTC2CMP1=0x7f;
14 1 RTC2CMP0=0xff;
15 1 RTC2CON=0x07;//mode 11外部捕捉关闭,使能RTC,触发捕捉
16 1 //IRCON|=0x20;//int flag
17 1 IE1|=0x20;
18 1 }
19
20 void delay(unsigned int dx)
21 {
22 1 int dj;
23 1 for(;dx>0;dx--)
24 1 for(dj=120;dj>0;dj--)
25 1 {
26 2 ;
27 2 }
28 1 }
29
30 /*用来读取时间*/
31 void readtime(unsigned char *h,unsigned char *m,unsigned char *s)
32 {
33 1 *h=hour;
34 1 *m=minute;
35 1 *s=second;
36 1 }
37 /*用来设定时间,type 0,1,2 代表时分秒设置*/
38 void settime(unsigned char dat,char type)
39 {
40 1 if(type==0)
41 1 {hour=dat; }
42 1 else if(type==1)
43 1 {minute=dat;}
44 1 else if(type==2)
45 1 {second=dat;}
46 1 else puts("type error!");
47 1 send('\n');
48 1 if((hour>=24||hour<0)||(minute>=60||minute<0)||(second>=60||second<0))
49 1 puts("time set wrong,please set again use instructions!");
50 1 send('\n');
51 1 }
52 //IO口的初始化
53 void ioconfig()
54 {
C51 COMPILER V9.00 RTCCONF 11/13/2010 14:44:19 PAGE 2
55 1 P1DIR&=0XFE; //初始化为输出
56 1 P10=0;//初始化输出为0
57 1 //led
58 1 }
59
60 //定时器演示
61 void timer0()
62 {
63 1 TMOD=0x01;
64 1 TH0=(65536-ONESTEP)/256;
65 1 TL0=(65536-ONESTEP)%256;
66 1 ET0=1;
67 1 TR0=1;
68 1 }
69
70
71 /*串口初始化*/
72 void uart_init()
73 {
74 1 CLKCTRL = 0x28; // Clock sourced by XCOSC16M
75 1 CLKLFCTRL = 0x01;
76 1
77 1 P0DIR &= 0xF7; // P03 (TxD) is output
78 1 P0DIR |= 0x10; // P04 (RxD) is input
79 1 P0|=0x18;
80 1
81 1 S0CON = 0x50;
82 1 PCON |= 0x80; // SMOD = 1
83 1 WDCON |= 0x80; // Select internal baud rate generator
84 1
85 1 S0RELL = 0xFB;
86 1 S0RELL = 0xF3; // BAUD_38K4
87 1 ES0=1;
88 1 }
89 //发送一个字节
90 void send(char ch)
91 {
92 1 S0BUF=ch;
93 1 while(!TI0);
94 1 TI0=0;
95 1 }
96 //打印一个字符串
97 void puts(char *str)
98 {
99 1 while(*str!='\0')
100 1 {
101 2 send(*str++);
102 2 }
103 1 }
104
105 //rtc enable
106 void RTC_En()
107 {
108 1 TR0=1;//使能定时0
109 1 }
110 //rtc disable
111 void RTC_Dis()
112 {
113 1 TR0=0;//关闭定时器0
114 1 }
115
116 /*
C51 COMPILER V9.00 RTCCONF 11/13/2010 14:44:19 PAGE 3
117 指令的格式为$seth**#,$setm**#,$sets**#,用于设置时分秒,设置$stop用于暂停时间,$runc用于走时
118 */
119
120 /*指令解码*/
121 void decode()
122 {
123 1 char buf;
124 1 static char insf=0;
125 1 unsigned char buffer[7];
126 1 static char num=0;
127 1 static char insh=0;
128 1 static char dat=0,count=0;
129 1 static char rtcstop=0,rtcgo=0;
130 1 static char mf=0,hf=0,sf=0;
131 1 static char disf=0;//显示指令的标志
132 1 if(RI0)
133 1 {
134 2 //LED=!LED; //DEBUG
135 2 buf=S0BUF;
136 2 RI0=0;
137 2 if(buf=='$')
138 2 {insf=1;
139 3 num=0;
140 3 }
141 2 if(insf)
142 2 {
143 3 if(buf!='$')
144 3 buffer[num++]=buf;
145 3 }
146 2 if(num==7)
147 2 {
148 3 insf=0;
149 3 num=0;
150 3 //识别设置指令
151 3 if((buffer[0]=='s'||buffer[0]=='S')&&(buffer[1]=='e'||buffer[1]=='E')&&(buffer[2]=='t'||buffer[2]=='T'))
152 3 {insh=1; }
153 3 //解析暂停指令
154 3 else if((buffer[0]=='s'||buffer[0]=='S')&&(buffer[1]=='t'||buffer[1]=='T')&&(buffer[2]=='o'||buffer[2]=='O
-')&&(buffer[3]=='p'||buffer[3]=='P'))
155 3 {rtcstop=1;
156 4 rtcgo=0;
157 4 LED=!LED;
158 4 }
159 3 //解析启动指令
160 3 else if((buffer[0]=='r'||buffer[0]=='R')&&(buffer[1]=='u'||buffer[1]=='U')&&(buffer[2]=='n'||buffer[2]=='N
-')&&(buffer[3]=='c'||buffer[3]=='C'))
161 3 {rtcgo=1;
162 4 rtcstop=0;
163 4 LED=!LED;
164 4 }
165 3 else if((buffer[0]=='s'||buffer[0]=='S')&&(buffer[1]=='h'||buffer[1]=='H')&&(buffer[2]=='o'||buffer[2]=='O
-')&&(buffer[3]=='w'||buffer[3]=='W'))
166 3 {
167 4 disf=1;//显示指令启用
168 4 }
169 3
170 3 //解析时间设置的指令
171 3 if(insh)
172 3 {
173 4 insh=0;
174 4 switch(buffer[3])
175 4 {
C51 COMPILER V9.00 RTCCONF 11/13/2010 14:44:19 PAGE 4
176 5 case 'h':
177 5 case 'H': hf=1;count=0;puts("hour set!");break;
178 5 case 'm':
179 5 case 'M': mf=1;count=0;puts("minute set!");break;
180 5 case 's':
181 5 case 'S': sf=1;count=0;puts("second set!");break;
182 5 default:{hf=mf=sf=0;}puts("this instruction is undefined!");break;
183 5 }
184 4
185 4 }
186 3
187 3 if(rtcstop)
188 3 { RTC_Dis();//暂停RTC模块
189 4 puts("rtc stop working...");
190 4 send('\n');
191 4 rtcgo=0;
192 4 }
193 3
194 3 if(rtcgo)
195 3 {RTC_En(); //开启RTC模块
196 4 puts("rtc start working...");
197 4 send('\n');
198 4 rtcstop=0;
199 4 }
200 3 if(disf)
201 3 {
202 4 disf=0; //消除显示指令的标志
203 4 showtime();//执行显示函数
204 4 }
205 3
206 3 if(hf)
207 3 {
208 4 dat=(buffer[4]-'0')*10+(buffer[5]-'0');
209 4 if(buffer[6]=='#')
210 4 {
211 5 //写入时间
212 5 if(rtcstop)
213 5 {
214 6 settime(dat,0);
215 6 //debug
216 6 }
217 5 else puts("you don't stop time,please stop it use $stop!\n");
218 5 dat=0;
219 5 hf=0;
220 5 }
221 4 }
222 3
223 3 else if(mf)
224 3 {
225 4 dat=(buffer[4]-'0')*10+(buffer[5]-'0');
226 4 if(buffer[6]=='#')
227 4 {
228 5 //写入时间
229 5 if(rtcstop)
230 5 settime(dat,1);
231 5 else puts("you don't stop time,please stop it use $stop!\n");
232 5 dat=0;
233 5 mf=0;
234 5 }
235 4
236 4 }
237 3 else if(sf)
C51 COMPILER V9.00 RTCCONF 11/13/2010 14:44:19 PAGE 5
238 3 {
239 4 dat=(buffer[4]-'0')*10+(buffer[5]-'0');
240 4 if(buffer[6]=='#')
241 4 {
242 5 //写入时间
243 5 if(rtcstop==1)
244 5 settime(dat,2);
245 5 else puts("you don't stop time,please stop it use $stop!\n");
246 5 dat=0;
247 5 sf=0;
248 5 }
249 4
250 4 }
251 3 }
252 2
253 2
254 2
255 2 }
256 1
257 1
258 1 }
259
260 void timecount()
261 {
262 1 second++;
263 1 if(second>59)
264 1 {second=0;
265 2 minute++;
266 2 if(minute>59)
267 2 {
268 3 minute=0;
269 3 hour++;
270 3 if(hour>23)
271 3 hour=0;
272 3 }
273 2 }
274 1
275 1 }
276
277 void showtime()
278 {
279 1 puts("time==");
280 1 send(' ');
281 1 send((hour/10)+'0');
282 1 send((hour%10)+'0');
283 1 send(' ');
284 1 send(':');
285 1 send(' ');
286 1 send((minute/10)+'0');
287 1 send((minute%10)+'0');
288 1 send(' ');
289 1 send(':');
290 1 send(' ');
291 1 send((second/10)+'0');
292 1 send((second%10)+'0');
293 1 send('\n');
294 1 }
295
296
297
298 void uart_service() interrupt 4 //串口中断程序
299 {
C51 COMPILER V9.00 RTCCONF 11/13/2010 14:44:19 PAGE 6
300 1 if(TI0)
301 1 {
302 2 TI0=0;
303 2 }
304 1 else{
305 2 //如果接受到数据
306 2
307 2 decode();
308 2 //timecount();
309 2 }
310 1 LED=!LED;//debug
311 1 }
312
313 void tick() interrupt INTERRUPT_TF0
314 {
315 1 static char num=0;
316 1 TR0=0;
317 1 TH0=(65536-ONESTEP)/256;
318 1 TL0=(65536-ONESTEP)%256;
319 1 if(num==40)
320 1 {
321 2 num=0;
322 2 timecount();
323 2 showtime();
324 2 LED=!LED;
325 2 }
326 1 num++;
327 1 TR0=1;
328 1 }
329
330
331
332
333
334
335
336
337
338
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1133 ----
CONSTANT SIZE = 222 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 15 19
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?