📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 09/17/2007 14:50:28 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 //2006-4-27 13:10
2 //更改为默认 manchester,RF/64,软件可读写EM4469,不能更改设置读卡器参数,可读参数2006-4-27 12:01
3 //不能使用默认读命令
4 //支持PCB端软件:1.EM4469 RFID Development Kit Application Software 2.EM4469 Read Only Application Softwa
-re
5 //支持卡片:EM4469,EM410X
6
7 #include "main.h"
8 #include "string.h"
9 #include "intrins.h"
10 #include "stdio.h"
11
12 ////EM4095控制线定义
13 sbit MOD = P1^1;
14 sbit SHD = P1^2;
15 sbit DEMOD_OUT = P3^3;
16 sbit RDY_CLK = P3^4;
17 sbit speak = P1^3;
18
19 union myunion
20 {
21 uint word;
22 struct
23 {
24 uchar high2;
25 uchar low2;
26 }bytes;
27 };
28
29
30 union myunion count_timer2;
31 uchar fwd_1st_pulse = 256 - 30; //18个RF周期
32 uchar field_stop; //next field stop in RF clocks
33 uchar fwd_01_zero = 256 - 24; //complement to fwd_01_stop,20个RF周期
34 uchar fwd_01_one = 256 - 56; //notmod full period '1',29个RF周期
35 uchar fwd_01_stop = 256 - 20; //9个RF周期
36 uchar edge=1; //for manchester usage
37
38
39 // 定时器0中断服务程序
40 // 写操作,控制MOD
41 void Timer0_int(void) interrupt 1 using 1
42 {
43 1 TF0=0; //clear interrupt flag
44 1 if (fwd_bit_phase == 4)
45 1 {
46 2 TR0= 0;
47 2 ET0=0; //disable T0 interrupt
48 2 TF0=0;
49 2 MOD=0;
50 2 return;
51 2 }
52 1
53 1 if (fwd_bit_phase == 1)
54 1 {
C51 COMPILER V7.50 MAIN 09/17/2007 14:50:28 PAGE 2
55 2 MOD=1;
56 2 TR0=0;
57 2 TH0=0xFF;
58 2 TL0 = 255-19;//field_stop;
59 2 TR0=1;
60 2 field_stop = fwd_01_stop;
61 2 //fwd_bit_phase = 2;
62 2 if(fwd_bit_sz-- > 0)
63 2 {
64 3 if(((*fwd_write_ptr++) & 1) == 1)
65 3 fwd_bit_phase = 2;
66 3 else
67 3 fwd_bit_phase = 3;
68 3 }
69 2 else
70 2 {
71 3 fwd_bit_phase = 4;
72 3 // TR0= 0;
73 3 // ET0=0; //disable T0 interrupt
74 3 // TF0=0;
75 3 // MOD=0;
76 3 }
77 2 return;
78 2 }
79 1
80 1 MOD=0;
81 1 TR0=0;
82 1 if (fwd_bit_phase == 2)
83 1 {
84 2 TH0=0xFF;
85 2 TL0=255-55;//fwd_01_zero;
86 2 fwd_bit_phase = 1;
87 2 }
88 1 else
89 1 {
90 2 TH0=0xFF;
91 2 TL0= 255-23;//fwd_01_one;
92 2 fwd_bit_phase = 1;
93 2 }
94 1 TR0=1;
95 1
96 1 }
97 //串口中断标志位
98 uchar Rxtemp;
99 bit rx_start;
100 bit rx_finish;
101 bit rx_lenflag;
102 uchar rx_i;
103 uchar rx_len;
104 bit MYTI;
105
106 //串口中断服务程序
107 void serial(void) interrupt 4 using 3
108 {
109 1 uint i;
110 1 if(RI)
111 1 {
112 2 rx_finish = 0;
113 2 RI = 0;
114 2 EA = 0;
115 2 //Rxtemp = SBUF;
116 2 rx_buff[0] = SBUF;
C51 COMPILER V7.50 MAIN 09/17/2007 14:50:28 PAGE 3
117 2 rx_i=1;
118 2 for(;;)
119 2 {
120 3 for(i=0;i<0xfff;i++)
121 3 {
122 4 if(RI)
123 4 {
124 5 RI = 0;
125 5 rx_buff[rx_i] = SBUF;
126 5 rx_i++;
127 5 break;
128 5 }
129 4 }
130 3 if(i>=0xfff)
131 3 {
132 4 rx_finish = 1;
133 4 EA = 1;
134 4 break;
135 4 }
136 3 }
137 2 }
138 1 if(TI)
139 1 {
140 2 TI = 0;
141 2 MYTI = 1;
142 2 }
143 1 }
144
145 // ==================================================================
146 void Timer2_int(void) interrupt 5 using 2
147 {
148 1 if (currentMaxTimeHi != 0xFF)
149 1 {
150 2 currentMaxTimeHi = 0xFF;
151 2 }
152 1 else
153 1 {
154 2 flag_wait=0;
155 2 ET2=0;
156 2 }
157 1 }
158
159 void main(void)
160 {
161 1 // uchar i;
162 1 // uchar checksum;
163 1 //使能winbond W78E365内部1K SRAM
164 1 CHPENR = 0x87;
165 1 CHPENR = 0x59;
166 1 CHPCON = (CHPCON|0x10);
167 1 CHPENR = 0x00;
168 1
169 1 //串口,定时器1,双倍速率,9600bps
170 1 SCON = 0x50;
171 1 TMOD = 0x21;
172 1 TH1 = 0xf4;TL1 = 0xf4;
173 1 PCON = PCON|0x80;
174 1 TR1 = 1;
175 1 ES = 1;
176 1 TI = 0;RI = 0;
177 1 EA = 1;
178 1 C_T2 = 1; //T2脚的负跳变计数,TH2,TL2自动重装
C51 COMPILER V7.50 MAIN 09/17/2007 14:50:28 PAGE 4
179 1 //EM4095 初始化
180 1 MOD = 0;
181 1 SHD = 0;
182 1 //串口接收初始化
183 1 rx_start = 0;
184 1 rx_finish = 0;
185 1 rx_lenflag = 0;
186 1 rx_len = 0; //还要接收的数据个数
187 1 rx_i = 0; //接收到个数
188 1 MYTI = 0;
189 1
190 1 //配置读卡器默认值,RF/64,Manchester解码
191 1 config_delayed = 0;
192 1 config_lwr = 8;
193 1 config_raw = 0;
194 1
195 1 halfDataRate = 16;//default values, RF/32
196 1 MaxCaptureHalfDateRate = halfDataRate + (halfDataRate >> 1); //=0x18
197 1 MaxCaptureDateRate = halfDataRate + halfDataRate + (halfDataRate >> 1); //0x28
198 1
199 1 lwr = config_lwr;
200 1 delayed = config_delayed;
201 1 raw = config_raw;
202 1 //forward_link_type = 0x01;
203 1 maxTLogin = 4 + (4 + 9) * 2 * (uint)halfDataRate; //0x0344
204 1 maxTWrite = 1144 + (4 + 8) * 2 * (uint)halfDataRate;
205 1 maxTWriteRaw = 1144 + (4 + 5 + 54) * 2 * (uint)halfDataRate;
206 1 maxTRead = (100) + 4 + (5 + 54) * 2 * (uint)halfDataRate; //3880
207 1 maxTDisable = maxTLogin;
208 1 maxTDefaultRead = 2*((lwr-4)*4*8)*2*((uint32)halfDataRate);
209 1 tpp_period = 4 + 2 * (uint)halfDataRate - 4; //64
210 1 twr_period = (68 + 64 + 896 + 116) + 2 * (uint)halfDataRate - 4;
211 1
212 1 while(1)
213 1 {
214 2 if(rx_finish == 1)//串口完成合法的接收
215 2 {
216 3 // rx_finish = 0;
217 3 // trace(rx_buff,rx_i);
218 3 // continue;
219 3 }
220 2 else continue;
221 2 rx_finish = 0;
222 2 forward_ptr = forwardLink_data;
223 2 // num_addr = rx_buff[3];
224 2 switch(rx_buff[0])
225 2 {
226 3 case 0x00 :
227 3 ResetT5557();
228 3 break;
229 3 case 0x10 :
230 3 WakeUpT5557();
231 3 break;
232 3 case 0x11 :
233 3 GeneralRead_T5557();
234 3 break;
235 3 case 0x12 :
236 3 ReadT5557();
237 3 break;
238 3 case 0x13 :
239 3 WriteT5557();
240 3 break;
C51 COMPILER V7.50 MAIN 09/17/2007 14:50:28 PAGE 5
241 3 case 0x14 :
242 3 ReadT5557_PWD();
243 3 break;
244 3 case 0x15 :
245 3 WriteT5557_PWD();
246 3 break;
247 3
248 3 default :
249 3 break;
250 3 }
251 2 }
252 1 }
253
254 uchar Prepare_Cmd(uchar cmd)
255 {
256 1 *forward_ptr++ = cmd; //start bit
257 1 cmd = cmd>>1;
258 1 *forward_ptr++ = cmd;
259 1 return 2;
260 1 }
261
262 uchar Prepare_Lock(void)
263 {
264 1 *forward_ptr++ = 0;
265 1 return 1;
266 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -