📄 main.lst
字号:
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 1
C51 COMPILER V8.16, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c LARGE BROWSE INTVECTOR(0X1000) DEBUG OBJECTEXTEND
line level source
1 /******************************************************************************
2 ** copyright(c) skee ltd,.co. 1996-2009
3 ** c8051f310 256+1024 bytes ram osc:24.5M
4 ** RFchip si4421(433M) Anti-collision
5 ** Last Modify 2009-12-9
6 ** by jerkoh
7 ** V2.0
8 ******************************************************************************/
9
10 #include "global.h"
11
12 unsigned char code system_date[]="\r\n[msg:]Compiler_date:" __DATE__;
13 unsigned char code system_time[]="\r\n[msg:]Compiler_date:" __TIME__;
14 /******************************************************************************
15 ** MAIN Routine
16 ******************************************************************************/
17
18 void main (void)
19 {
20 1
21 1 unsigned char nr;
22 1 unsigned int event_word_copy;
23 1
24 1 // Disable Watchdog timer
25 1 PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer
26 1 // enable)
27 1 PORT_Init(); // Initialize Port I/O
28 1 SYSCLK_Init ();
29 1 // Initialize Oscillator
30 1
31 1 event_word=0;
32 1
33 1 delayms(200);
34 1 Timer0_Init();
35 1 Timer2_Init(SYSCLK/TIMER2_RATE); // Init Timer 2
36 1
37 1 PCA_Init ();
38 1 InitSysTimer(); // 初始化计数器
39 1
40 1 Beef(2,RED); // 上电2闪2滴
41 1 delayms(500);
42 1 BeefL(1,RED);
43 1 delayms(500);
44 1
45 1 LEDR_ON;
46 1 LEDG_OFF;
47 1 flash_boot(); //AT25参数启动检验提取
48 1
49 1
50 1
51 1 UART0_Init();
52 1 EA=1;
53 1 ES0=1;
54 1 delay(400);
55 1 nres=0;
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 2
56 1 delayms(100);
57 1 nres=1;
58 1 ia442xinit();
59 1 spirevtwobyte();
60 1 spisendcommand(0x8288); //电源管理 whole receive crystal on
61 1 spisendcommand(0xca83); //FIFO COMMAND
62 1
63 1
64 1
65 1 if(DEBUG) Printf_String("\r\n[msg:]Copyright(c) SKEE LTD,.CO. 1996-2009");
66 1 if(DEBUG) Printf_String("\r\n[msg:]EZradio SI4421(433Mhz) Running on C8051F310");
67 1
68 1
69 1 for(nr=0;nr<sizeof(system_date);nr++)
70 1 {
71 2 if(DEBUG) Printf_Char(system_date[nr]);
72 2 }
73 1 delayms(300);
74 1 for(nr=0;nr<sizeof(system_time);nr++)
75 1 {
76 2 if(DEBUG) Printf_Char(system_time[nr]);
77 2 }
78 1
79 1 delayms(100);
80 1
81 1 memset(tagnr, 0, sizeof(tagnr)); //清空登记标签结构体
82 1 memset(wiebuf_cout, 0, sizeof(wiebuf_cout));
83 1
84 1 Init_AT25XXX(0x00); //初始化AT25xxx SPI eeprom
85 1
86 1 PCA0L = 0x00;
87 1 PCA0CPL4 = 255; //32.1ms
88 1 PCA0MD |= 0x40; //开启看门狗
89 1
90 1
91 1
92 1 while(1)
93 1 {
94 2
95 2
96 2 /**********@task00@**********/
97 2 /**倒计时数组片管理LED+BELL**/
98 2
99 2 if(GetSysTimer(0)) //0=LEDR
100 2 {
101 3 LEDR^=1;
102 3 SetSysTimer(0,500); //500MS LEDR闪
103 3 }
104 2
105 2 if(GetSysTimer(1)) //1=LEDG
106 2 { //关闭闪过的绿灯
107 3 LEDG_OFF;
108 3 }
109 2
110 2 if(GetSysTimer(2)) //2=BELL
111 2 {
112 3 BELL_OFF; //关闭响过的蜂鸣器
113 3 }
114 2
115 2
116 2
117 2
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 3
118 2 /**********@task01@**********/
119 2 /*****处理无线接收的信息*****/
120 2
121 2 if(receive())
122 2 {
123 3 Process_Frame();
124 3 }
125 2
126 2
127 2 /**********@task02@**********/
128 2 /********串口数据处理********/
129 2
130 2 event_word_copy=event_word; //搜集时间片
131 2
132 2 if(event_word_copy&event_uart_arrived)
133 2 {
134 3 EA=0;
135 3 event_word&= ~(event_uart_arrived);//消毁完成任务标记
136 3 EA=1;
137 3 process_uart();
138 3 }
139 2
140 2
141 2
142 2
143 2 /**********@task03@**********/
144 2 /****每100ms轮询无线标签*****/
145 2 if(event_word_copy&event_time_100ms)
146 2 {
147 3 EA=0;
148 3 event_word&= ~(event_time_100ms);
149 3 EA=1;
150 3
151 3 if(((TRIG==0)&&(TRIG_STATE==1)) ||(TRIG==1))
152 3 { //触发状态加触发或者非触发才询卡
153 4
154 4 SeekFrame(WCMD_NOR); //普通寻卡
155 4 txregframe(FRAME_LEN);
156 4 }
157 3 }
158 2
159 2 /**********@task04@**********/
160 2 /*****1s基准处理时间事件*****/
161 2 if(event_word_copy&event_time_1000ms)
162 2 {
163 3 EA=0;
164 3 event_word&= ~(event_time_1000ms);
165 3 EA=1;
166 3
167 3 for(nr=0;nr<10;nr++) //查询登记是否需要老化
168 3 {
169 4 if((tagnr[nr].save_inactivity)&&(tagnr[nr].save_state!=0))
170 4 {
171 5 tagnr[nr].save_inactivity--;
172 5 if(tagnr[nr].save_inactivity==0)
173 5 {
174 6 tagnr[nr].save_state=0;
175 6 }
176 5 }
177 4
178 4 if(tagnr[nr].save_inactivity==0)
179 4 {
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 4
180 5 tagnr[nr].save_state=0;
181 5 }
182 4 }
183 3
184 3 if(event_relay!=0)
185 3 {
186 4 event_relay--;
187 4 if(event_relay==0)
188 4 {
189 5 if(ONLY_READER)
190 5 {
191 6 RELAY_IN =ON_1; //继电器
192 6 RELAY_OUT=ON_1;
193 6 }
194 5 else
195 5 {
196 6 RELAY_IN =OFF_0;
197 6 RELAY_OUT=OFF_0;
198 6 }
199 5
200 5 }
201 4 }
202 3 }
203 2
204 2
205 2
206 2 /**********@task05@**********/
207 2 /**处理接收的wiegand数据包***/
208 2
209 2 if(event_word_copy&event_wie_arrived)
210 2 {
211 3 EA=0;
212 3 event_word&= ~(event_wie_arrived);
213 3 EA=1;
214 3
215 3 wie_str=0; //清wiegand脉冲标记
216 3 //注意wie_cout半字节当一次处理
217 3 if(wie_cout==0)
218 3 {wie_cout++;}
219 3 for(nr=0;nr<wie_cout;nr++)
220 3 {
221 4 Printf_Char(wiebuf_cout[nr]);
222 4 }
223 3 CLR_WIEBUF_COUT;
224 3 }
225 2
226 2 /**********@task06@**********/
227 2 /****处理进出2路触发信号*****/
228 2 if(TRIG_IN==0)
229 2 {
230 3 RELAY_TRIG_STATE=1; //当前进门
231 3 TRIG_STATE=1;
232 3 flg_io=0x01;
233 3 }
234 2 else if(TRIG_OUT==0)
235 2 {
236 3 RELAY_TRIG_STATE=0; //当前出门
237 3 TRIG_STATE=1;
238 3 flg_io=0x00;
239 3 }
240 2 else
241 2 {
C51 COMPILER V8.16 MAIN 12/10/2009 11:19:17 PAGE 5
242 3 ;
243 3 }
244 2 /**********@task07@**********/
245 2 /**********@task08@**********/
246 2 /**********@task09@**********/
247 2 /**********@task0A@**********/
248 2 /**********@task0B@**********/
249 2 /**********@task0C@**********/
250 2 /**********@task0D@**********/
251 2 /**********@task0E@**********/
252 2 /**********@task0F@**********/
253 2 }
254 1 }
255
256
257
258 /******************************************************************************
259 ** 函数: PORT_Init ()
260 ** 入参:
261 ** 返回:
262 ** 说明:
263 ** PORT_Init
264 ** Configure the Crossbar and GPIO ports.
265 ** P0.4 - UART TX
266 ** P0.5 - UART RX
267 ** P3.3 - LED
268 ******************************************************************************/
269 void PORT_Init (void)
270 {
271 1
272 1 P0SKIP = 0xcf; //注意SPI没有配置成硬件,只是脚放在对应位置
273 1 P1SKIP = 0x03; //配置P1.2 P1.3 两端块脉冲捕获
274 1 XBR0 = 0x01; //使能 UART on P0.4(TX) and P0.5
275 1 XBR1 = 0x42;
276 1 P0MDOUT = 0x1C; //使能 UTX 为推挽输出 p0.2 p0.3
277 1
278 1 P3MDOUT |= 0x06; //P3.1 P3.2 继电器
279 1
280 1
281 1 if(ONLY_READER) //只做读卡器时jdq不动作
282 1 {
283 2 RELAY_IN =1;
284 2 RELAY_OUT =1;
285 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -