main.lst
来自「菜鸟,详细NRF24E1运用,程序,电路」· LST 代码 · 共 427 行
LST
427 行
C51 COMPILER V9.00 MAIN 11/13/2010 14:45:14 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL C V4\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
*** WARNING C500 IN LINE 1 OF MAIN.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))
1 /******************
2 /
3 /源代码部分
4 /
5 ******************/
6
7 #include "reg24le1.h" /* 头文件包含部分 */
8
9 /******************
10 /
11 /宏定义低功耗模式
12 /
13 ******************/
14 #define DeepSleep 0x00
15 #define Mem_Ret_On 0x01
16 #define Mem_Ret_Off 0x02
17 #define Reg_Ret_On 0x03
18 #define Reg_Ret_Off 0x04
19 #define Standby 0x05
20
21 /******************
22 /
23 /宏定义定时器中断号
24 /
25 ******************/
26 #define TF0 0x01
27
28 /******************
29 /
30 /定义布尔逻辑常量
31 /
32 *******************/
33 #define true 0x01
34 #define false 0x00
35 /******************
36 /
37 /定义一个LED指示灯
38 /
39 ******************/
40 #define LED P07
41
42 /******************
43 /
44 /中断开关宏定义
45 /
46 *******************/
47 #define Disableint() {EA=0;}
48 #define Enableint() {EA=1;}
49
50 /******************
51 /
52 /定义全局变量seconds用于计秒数
53 /
54 ******************/
C51 COMPILER V9.00 MAIN 11/13/2010 14:45:14 PAGE 2
55 static unsigned char seconds=0;
56 /******************
57 /
58 /函数原型声明方便别的函数调用
59 /
60 ******************/
61 void getlastpowerdownmode(void);
62 /******************
63 /
64 /延时函数,通过修改延时参数实现延时的不同
65 /
66 *******************/
67 void delay(int x)
68 {
69 1 int i,j;
70 1 for(i=x;i>0;i--)
71 1 for(j=120;j>0;j--)
72 1 {
73 2 ;
74 2 }
75 1
76 1 }
77
78 /*****************
79 /
80 /nRF24LE1的uart的初始化,通过修改输入的参数可以初始化化不同的串口传输速率
81 /
82 ******************/
83 void baudrate(int rate)
84 {
85 1
86 1 P0DIR &= 0xF7; // P0.3 (TxD)
87 1 P0DIR |= 0x10; // P0.4 (RxD)
88 1
89 1 S0CON = 0x50;
90 1 PCON |= 0x80; // 倍增
91 1 WDCON |= 0x80; // 选用内部波特率发生器
92 1
93 1 switch(rate)
94 1 {
95 2 case 38400:
96 2 {
97 3 S0RELL = 0xF3;
98 3 S0RELH = 0x03;
99 3 }
100 2 break;
101 2 case 19200:
102 2 {
103 3 S0RELL =0xE6;
104 3 S0RELH =0x03;
105 3 }
106 2 break;
107 2 case 14400:
108 2 {
109 3 S0RELL =0xDE;
110 3 S0RELH =0x03;
111 3 }
112 2 break;
113 2 case 9600 :
114 2 {
115 3 S0RELL =0xCC;
116 3 S0RELH =0x03;
C51 COMPILER V9.00 MAIN 11/13/2010 14:45:14 PAGE 3
117 3 }
118 2 break;
119 2 case 4800 :
120 2 {
121 3 S0RELL =0x98;
122 3 S0RELH =0x03;
123 3 }
124 2 break;
125 2 case 2400 :
126 2 {
127 3 S0RELL =0x30;
128 3 S0RELH =0x03;
129 3 }
130 2 break;
131 2 default :
132 2 {
133 3 S0RELL =0xCC;
134 3 S0RELH =0x03;
135 3 }
136 2 break;
137 2
138 2 }
139 1
140 1 return ;
141 1 }
142
143 /****************
144 /
145 /定时器初始函数
146 /
147 ****************/
148 void timer0init(void)
149 {
150 1
151 1 TMOD=0X01;
152 1 TH0=(65536-50000)/256;
153 1 TL0=(65536-50000)%256;
154 1 ET0=1;
155 1 TR0=1;
156 1 }
157
158 /****************
159 /
160 /nRF24LE1工作时钟配置函数
161 /
162 *****************/
163 void workclkset(void)
164 {
165 1 CLKCTRL = 0x28; // 使用 XCOSC16M
166 1 CLKLFCTRL = 0x01;
167 1 }
168
169 /****************
170 /
171 /nRF24LE1的低功耗模式设置
172 /
173 ****************/
174 void powrdownmodeset(unsigned char mode)
175 {
176 1 char low_power=0;
177 1 switch(mode)
178 1 {
C51 COMPILER V9.00 MAIN 11/13/2010 14:45:14 PAGE 4
179 2 case DeepSleep :low_power=0x01;break;
180 2 case Mem_Ret_On :low_power=0x03;break;
181 2 case Mem_Ret_Off:low_power=0x02;break;
182 2 case Reg_Ret_On :low_power=0x04;break;
183 2 case Reg_Ret_Off:low_power=0x04;break;
184 2 case Standby :low_power=0x07;break;
185 2 default :low_power=0x07;break;
186 2 }
187 1
188 1 CLKCTRL=0x10; /*进入到睡眠前一定要启用RC时钟源*/
189 1 OPMCON|=0x02;
190 1 PWRDWN|=low_power;
191 1
192 1 }
193
194 /****************
195 /
196 /引脚唤醒模式设置
197 /
198 ****************/
199 void retentionpinset(void)
200 {
201 1 WUOPC0=0x00;
202 1 OPMCON=0x00; /* 开锁 */
203 1 WUOPC1=0x00; /*唤醒的引脚设置无 */
204 1 WUOPC0=0x01; /*唤醒的引脚设置为P0.0 */
205 1 P0DIR|=0x01; /*P0.0初始化为输入I/O口 */
206 1 P00 =0x00; /*P0.0初始化为高电平 */
207 1 }
208
209 /***************
210 /
211 /串口发送一个字符
212 /
213 ****************/
214 void putch(char ch)
215 {
216 1 S0BUF=ch;
217 1 while(!TI0);
218 1 TI0=0;
219 1 }
220
221 /***************
222 /
223 /串口发送一个字符串
224 /
225 ***************/
226 void prints(char * str)
227 {
228 1 while(*str!='\0')
229 1 {
230 2 putch(*str++);
231 2 }
232 1 }
233
234 /***************
235 /
236 /换行函数nextline()
237 /
238 ****************/
239 void nextline(void)
240 {
C51 COMPILER V9.00 MAIN 11/13/2010 14:45:14 PAGE 5
241 1 putch('\n');
242 1 }
243
244 /***************
245 /
246 /获得上一次低功耗模式
247 /
248 ****************/
249 void getlastpowerdownmode(void)
250 {
251 1 char tmp=0;
252 1 tmp=PWRDWN&0x03;
253 1 nextline();
254 1 switch(tmp)
255 1 {
256 2 case 0x00:prints("Power Off!"); break;
257 2 case 0x01:prints("Deep Sleep!");break;
258 2 case 0x02:prints("Memory Retention, Timer Off!");break;
259 2 case 0x03:prints("Memory Retention, Timer On!") ;break;
260 2 case 0x04:prints("Register Retention!");break;
261 2 case 0x07:prints("Standby!");break;
262 2 default :prints("Error Or Reserved!");break;
263 2 }
264 1 }
265
266 /**************
267 /
268 /获取上一次复位的原因
269 /
270 **************/
271 void getlastresetinf(void)
272 {
273 1 char tmp=0;
274 1 tmp=RSTREAS&0x07;
275 1 nextline();
276 1 prints("Reset Reason:");
277 1 if(0==tmp)
278 1 {
279 2 prints("On-chip reset generator!");
280 2 }
281 1 else if(0x01==tmp)
282 1 {
283 2 prints("RST pin!");
284 2 }
285 1 else if(0x02==tmp)
286 1 {
287 2 prints("Watchdog!");
288 2 }
289 1 else if(0x04==tmp)
290 1 {
291 2 prints("Reset from on-chip hardware debugger!");
292 2 }
293 1 else if(0x06==tmp)
294 1 {
295 2 prints(" a reset from the debugger followed by a watchdog reset!");
296 2 }
297 1
298 1 }
299
300 /*************
301 /
302 /串口显示程序调试信息
C51 COMPILER V9.00 MAIN 11/13/2010 14:45:14 PAGE 6
303 /
304 **************/
305 void programdebug(char * bugs)
306 {
307 1 nextline();
308 1 prints("Debug Information:");
309 1 prints((char *)bugs);
310 1
311 1 }
312
313 /*************
314 /
315 /定时器0中断服务函数
316 /
317 **************/
318 void timer0isr() interrupt TF0
319 {
320 1 static char times=0;
321 1 TR0=0;
322 1 TH0=(65536-50000)/256;
323 1 TL0=(65536-50000)%256;
324 1 times++;
325 1 if(20==times)
326 1 {
327 2 LED=!LED;
328 2 times=0;
329 2 seconds++;
330 2 nextline();
331 2 programdebug("Time Left:");
332 2 putch(((5-seconds)+'0')) ;
333 2 if(5==seconds)
334 2 {
335 3 delay(100);
336 3 programdebug("Sleeping..!");
337 3 powrdownmodeset(DeepSleep);
338 3 }
339 2 if(60==seconds)
340 2 {seconds=0;}
341 2 }
342 1 TR0=1;
343 1 }
344
345 /*************
346 /
347 /nRF24LE1的I/O口初始化配置函数
348 /
349 *************/
350 void chipiocfg(void)
351 {
352 1 P0DIR&=0X78;
353 1 P07=0;
354 1 }
355
356 /*************
357 /
358 /主函数部分
359 /
360 **************/
361 void main(void)
362 {
363 1 char flag=1;
364 1 Disableint() ;
C51 COMPILER V9.00 MAIN 11/13/2010 14:45:14 PAGE 7
365 1 workclkset() ; /*初始化工作时钟 */
366 1 baudrate(9600) ; /*波特率初始化9600 */
367 1 chipiocfg() ; /*nRF24LE1的I/O口配置函数 */
368 1 timer0init() ; /*定时器初始化函数 */
369 1 delay(100) ; /*延时函数 */
370 1 getlastresetinf() ; /*获取上一次系统复位的原因*/
371 1 nextline();
372 1 getlastpowerdownmode(); /*获取上一次低功耗模式 */
373 1 retentionpinset() ; /*设置唤醒引脚 */
374 1 delay(100) ;
375 1 Enableint() ;
376 1 while(1)
377 1 {
378 2 if(flag)
379 2 {
380 3 flag=0;
381 3 delay(100);
382 3 getlastpowerdownmode();
383 3 }
384 2 }
385 1
386 1 }
387
388
389
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 631 ----
CONSTANT SIZE = 323 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?