📄 main.lst
字号:
C51 COMPILER V6.23a MAIN 04/14/2008 15:21:34 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe main.c DB OE
stmt level source
1 ////////////////// RF522 读卡器程序 ///////////////////
2 // MCU型号: C8051F330 //
3 // 读卡芯片型号: RF522
4 ////////////////////////////////////////////////////////////////////
5 #include "main.h"
6 #include "Uart0.h"
7 #include "MFRC522.h"
8 #include "Timer2.h"
9 #include "Adc.h"
10 //#include "F330_FlashP.h"
11 //***************************************************************
12 //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令
13 unsigned char code data1[16] = {0x12,0x34,0x56,0x78, //4字节金额(低字节在前)
14 0xED,0xCB,0xA9,0x87, //4字节金额取反
15 0x12,0x34,0x56,0x78, //4字节金额
16 0x01,0xFE,0x01,0xFE}; //块地址1B+地址反1B+块地址1B+块地址1B
17 //
18 UCHAR code data2[4] = {0x12,0,0,0};
19 UCHAR code DefaultKey[6] = {0x4A, 0x59, 0x30, 0x31, 0x30, 0x35}; //密钥
20 UCHAR xdata g_ucTempbuf[20];
21 //jd buad 格式
22 UCHAR code DefaulSet[4] = {0x0, 0x00, 0x6C, 0x7D}; //读卡器默认设置信息
23 UCHAR data SetxxBuf [4] = {0x00, 0x00, 0x0, 0x0};
24
25
26 extern UCHAR xdata ComTBuf[];
27 extern UCHAR data Sio_Lth; //
28 extern UCHAR idata ComTBufHead;
29 extern UCHAR data CardId; //节点ID号
30 extern UCHAR data SioBurd;
31 extern UCHAR bdata DataFormat; //读卡器数据输出格式
32 extern UCHAR data CardCs1; //读卡器参数1
33 extern UCHAR code Set_xx[4]; //读卡器默认设置信息
34 //------------------------------------------
35 UINT volatile event_word;
36 //------------------------------------------
37 void main()
38 {
39 1 EA =0;
40 1 F330_Init(); //F330系统初始化
41 1 Setxx_Ini();
42 1 EA=1;
43 1 //
44 1 VDM0CN = 0x80; //使能VDD监视器
45 1 PcdReset(); //复位RC522
46 1 RSTSRC = 0x02; //使能VDD监视器作为复位源
47 1 //
48 1 PcdAntennaOff(); //关闭天线
49 1 BEEP = 1; //蜂鸣
50 1 Delay1ms(200);
51 1 BEEP = 0; //关蜂鸣器
52 1 PcdAntennaOn(); //开启天线
53 1 //
54 1 EIE1 |= 0X80; //ET3=1
55 1
C51 COMPILER V6.23a MAIN 04/14/2008 15:21:34 PAGE 2
56 1 while(1)
57 1
58 1 {
59 2 do_event(); //状态事件处理
60 2 }
61 1
62 1 }
63
64 //***********************************************
65 //事件处理程序
66 //------------------------------------------------
67 void do_event (void)
68
69 {
70 1 UCHAR event_word_copy;
71 1
72 1 event_word_copy = event_word; //
73 1
74 1 if (event_word_copy&EVENT_CARD) //200毫秒定时寻卡
75 1 {
76 2 EA = 0;
77 2 event_word &= ~EVENT_CARD;
78 2 EA = 1;
79 2 Card_request (); //寻卡
80 2 }
81 1
82 1 }
83 //***********************************************
84 //F330初始化
85 //------------------------------------------------
86 void F330_Init (void)
87 {
88 1 //时钟初始化
89 1 OSCXCN = 0x00; //关闭外时钟
90 1 OSCICL += 0; //校正值=0,24.5MHZ
91 1 //内部振荡使能,12MHZ
92 1 OSCICN = 0XC2; //IOSCEN,IFRDY,/,/,/,/,IFCN1,IFCN2
93 1
94 1 //看门狗初始化 //CIDL,WDTE,WDCK, ,CPS2,CPS1,CPS0,ECF
95 1 PCA0MD &=0xb1 ; //禁止看门狗,CPS2-0=000,PCA时钟=SYSCLK/12
96 1
97 1 PCA0CPL2 =0xff; //超时间隔=256×PCA0CPL2+(256-PCA0L)
98 1 //SYSCLK=24.5M/2时约隔约64MS
99 1 PCA0MD &=0xE0; //使能看门狗,CIDL=1,CPU等待时PCA停止工作
100 1
101 1 //IO口初始化
102 1
103 1 P0MDIN |= 0xff; //P0.n全部数字输入
104 1 // -, NSS,RX,TX, ,MOSI,MISO,SCK
105 1 P0MDOUT |= 0x55; // 0 1 0 1 0 1 0 1
106 1 //
107 1 P1MDIN = 0xff; //P1.1模拟输入,余全部数字输入
108 1 //--,--, --, --, RST, --, BEEP, RW
109 1 P1MDOUT = 0x0b; // 0 0 0 0 1 0 1 1
110 1 //SPIO和串口使能
111 1 XBR0 = 0X01; //-,-,CP0AE,CP0E,SYSCKE,SMB0E,SPIOE,UART0E
112 1 //弱上拉,交叉开关使能,CEX0,CEX1
113 1 XBR1 = 0x40; //WEAK,XBARE,T1E,T0E,ECIE,,PCA0ME1,0
114 1
115 1 BP = 0; //关蜂鸣器
116 1 RW485 = 0; //读卡器接收模式
117 1
C51 COMPILER V6.23a MAIN 04/14/2008 15:21:34 PAGE 3
118 1
119 1 //初始初始化中断源,优先级
120 1
121 1 IT01CF = 01; //INT0,INT1
122 1 IT0 = 1;
123 1 EIE1 = 0x0; //ET3, ,ECP0,EPCA0,EADC0,EWADC0, , ESMB
124 1 EIP1 = 0X0;
125 1 IP = 0x10; //-,PSPIO,PT2,PS0,PT1,PX1,PT0,PX0
126 1 //串口最高级
127 1 //
128 1 Init_Com0(); //串口初始化,波特率=57600
129 1 Timer0_Init(); //定时器0初始化
130 1 Timer3_Init(); //定时器3初始化 用做与读卡器通讯的时钟控制
131 1 // Adc0_Init();
132 1 }
133 //***********************************************
134 //RF522 寻卡程序
135 //------------------------------------------------
136 void Card_request (void)
137 {
138 1 if(!BEEP) //BEEP=0,1次有效读卡结束
139 1
140 1 Read_Card ();
141 1
142 1 }
143 //***********************************************
144 //RF522 读卡程序
145 //------------------------------------------------
146 void Read_Card (void)
147 {
148 1 unsigned char status;
149 1 //寻天线区内未进入休眠状态
150 1 status = PcdRequest(PICC_REQIDL, g_ucTempbuf);
151 1
152 1 if (status != MI_OK) return;
153 1
154 1 // BEEP = 1; //蜂鸣
155 1
156 1 status = PcdAnticoll(g_ucTempbuf); //防冲突
157 1
158 1 if (status != MI_OK) return;
159 1
160 1 status = PcdSelect(g_ucTempbuf); //选卡
161 1
162 1 if (status != MI_OK) return;
163 1 //验证密钥
164 1 status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);
165 1
166 1 if (status != MI_OK) return;
167 1
168 1 status = PcdRead(1, g_ucTempbuf); //读块2数据
169 1 //块2数据={00,34,56,78,ff,CB,A9,87,00,34,56,78,01,FE,01,FE}
170 1 if (status != MI_OK) return;
171 1
172 1 PcdHalt();
173 1 BEEP = 1; //蜂鸣
174 1 Delay1ms(200);
175 1
176 1 Card_Data_Send();
177 1
178 1 }
179
C51 COMPILER V6.23a MAIN 04/14/2008 15:21:34 PAGE 4
180 //===============================================
181 //卡数据填串口缓冲区并启动发送
182 //===============================================
183 void Card_Data_Send(void)
184 {
185 1 UCHAR i,j = 16;
186 1
187 1 ComTBuf[0] = 0xAA; //包头
188 1 ComTBuf[1] = 0x08; //读卡器设备号
189 1 ComTBuf[2] = 0x11; //数据长度
190 1 ComTBuf[3] = 0x00; //读卡器返回状态:00=OK
191 1 //16字节卡块数据送发送缓冲区
192 1 for (i=0;i<j;i++)
193 1
194 1 { ComTBuf[i+4] = g_ucTempbuf[i];}
195 1
196 1 ComTBuf[0x14] = 0x55; //包校验和
197 1 ComTBuf[0x15] = 0XBB; //包尾
198 1 //
199 1 RW485 = 1;
200 1 ComTBufHead=1;
201 1 Sio_Lth = 22;
202 1 SBUF0 = ComTBuf[0]; //启动串口发送
203 1 }
204 //===============================================
205 //读卡器设置参数初始化
206 //===============================================
207 void Setxx_Ini(void)
208 {
209 1 UCHAR kjdh;
210 1 //从FLASH读设置信息
211 1 FLASH_Read (SetxxBuf, FLASH_TEMP, 4);
212 1
213 1 kjdh = SetxxBuf[0];
214 1
215 1 if (kjdh != 0xff)
216 1
217 1 { //FLASH设置信息有效
218 2 CardId = SetxxBuf[0];
219 2 SioBurd = SetxxBuf[1];
220 2 DataFormat = SetxxBuf[2];
221 2 CardCs1 = SetxxBuf[3];
222 2 }
223 1 else
224 1 { //FLASH设置信息为空(ff)
225 2 CardId = DefaulSet[0];
226 2 SioBurd = DefaulSet[1];
227 2 DataFormat = DefaulSet[2];
228 2 CardCs1 = DefaulSet[3];
229 2 //
230 2 SetxxBuf[0] = DefaulSet[0];
231 2 SetxxBuf[1] = DefaulSet[1];
232 2 SetxxBuf[2] = DefaulSet[2];
233 2 SetxxBuf[3] = DefaulSet[3];
234 2 //默认设置写FLASH
235 2 FLASH_Write (FLASH_TEMP, SetxxBuf, 4);
236 2
237 2 }
238 1
239 1 }
240
241 //*****************************************************
C51 COMPILER V6.23a MAIN 04/14/2008 15:21:34 PAGE 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 377 ----
CONSTANT SIZE = 30 ----
XDATA SIZE = 20 ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
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 + -