📄 m500auc.lst
字号:
C51 COMPILER V7.03 M500AUC 05/22/2004 19:41:43 PAGE 1
C51 COMPILER V7.03, COMPILATION OF MODULE M500AUC
OBJECT MODULE PLACED IN D:\ICCARD~1\C语言~1\测试_~3\M500AUC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\ICCARD~1\C语言~1\测试_~3\M500AUC.C DB SB OE
stmt level source
1 #define M500_GLOBALS
2
3 //PICC=卡,PCD=阅读器
4
5 //以下位要包含的头文件
6 #include <string.h> /*字符串函数及存储器函数头文件*/
7 #include <stdio.h> /*标准I/O头文件*/
8 #include <absacc.h> /*存储器绝对地址访问定义,与指令MOVX相关*/
9 #include <intrins.h> /*内部函数定义,与循环指令(例如RR),位判断指令(例如JB),以及空操作指令(NOP
-)等相关*/
10
11 #include "Mfreg500.h" /* MF-RC500内部寄存器定义头文件*/
12 #include "MfErrNo.h" /* MF-RC500内部寄存器错误标志头文件*/
13 #include "reg52.h" /* 8052内部寄存器定义头文件*/
14 #include "M500AuC.h" /* MF-RC500用户自定义相关变量和数据结构头文件*/
15
16 #define GetRegPage(addr) (0x80 | (addr>>3)) /* 将addr右移3位再与80h取或 */
17 #define nocard 0 /*能量场中没有卡*/
18 #define mifare1 1 /*场中有mifare1卡 */
19 #define mifarepro 2 /*场中有mifarepro卡 */
20 #define mifarelight 3 /*场中有mifarelight卡 */
21 #define unknowncard 4 /*场中有未知卡 */
22 #define NO_TIMER2 1 /*? */
23
24 #define uchar unsigned char
25 bdata uchar AA; //A,可位寻址单字节数据类型
26 sbit high_bit=AA^7; //ACC.7
27 sbit low_bit=AA^0; //ACC.0
28
29
30 //uchar sebuf; //RECBUF,SENBUF
31 uchar idata disp_buf[4];
32
33 void del_8us()
34 {
35 1 uchar i;
36 1 for(i=0;i<1;i++)
37 1 {;}
38 1 }
39
40 void del_50us() //延时子程序
41 {
42 1 uchar i;
43 1 for(i=0;i<6;i++)
44 1 {;}
45 1 }
46
47 void del_50ms()
48 {
49 1 uchar i,j;
50 1 for(i=0;i<255;i++)
51 1 for(j=0;j<255;j++)
52 1 {;}
53 1 }
54
C51 COMPILER V7.03 M500AUC 05/22/2004 19:41:43 PAGE 2
55 void send(uchar sebuf) //发送子程序
56 {
57 1 uchar i;
58 1 AA=sebuf;
59 1 CLK=0;
60 1 CS=0;
61 1 del_50us();
62 1 for(i=0;i<8;i++)
63 1 {
64 2 del_8us();
65 2 DIO=high_bit;
66 2 CLK=1;
67 2 del_8us();
68 2 AA=AA<<1; //循环移位
69 2 CLK=0;
70 2 }
71 1 DIO=0;
72 1 }
73
74 void reset_light() //复位子程序
75 {
76 1 KEY=1;
77 1 DIO=1;
78 1 del_8us();
79 1 send(0xa4);
80 1 CS=1;
81 1 del_8us();
82 1 }
83
84 void reset_7289()
85 {
86 1 reset_light(); //上电初检
87 1 send(0xbf);
88 1 CS=1; //测试所有的led灯
89 1 del_50ms();
90 1 reset_light(); //恢复熄灭状态
91 1 }
92
93 void display()
94 {
95 1 uchar i;
96 1 for(i=0;i<4;i++)
97 1 {send(0xa1);CS=1;del_8us(); //逻辑左移指令
98 2 send(0xc8);
99 2 send((disp_buf[i]>>4)&0x0f);CS=1;del_8us();
100 2 send(0xa1);CS=1;del_8us(); //逻辑左移指令
101 2 send(0xc8);
102 2 send(disp_buf[i]&0x0f);CS=1;del_8us();
103 2 }
104 1 }
105
106
107 ///////////////////////////////////////////////////////////////////////
108 /* 往一个寄存器写一个数据 */
109 ///////////////////////////////////////////////////////////////////////
110 void WriteRawIO(unsigned char Address,unsigned char value)
111 {
112 1 XBYTE[Address]=value; /* 调用XBYTE函数? */
113 1 }
114
115 ///////////////////////////////////////////////////////////////////////
116 /* 从一个寄存器读出一个数据 */
C51 COMPILER V7.03 M500AUC 05/22/2004 19:41:43 PAGE 3
117 ///////////////////////////////////////////////////////////////////////
118 unsigned char ReadRawIO(unsigned char Address)
119 {
120 1 return XBYTE[Address]; /* 调用XBYTE函数 */
121 1 }
122
123 ///////////////////////////////////////////////////////////////////////
124 /* 用页选方式访问寄存器(写入)*/
125 ///////////////////////////////////////////////////////////////////////
126 void WriteIO(unsigned char Address, unsigned char value)
127 {
128 1 WriteRawIO(0x00,GetRegPage(Address)); /* 调用writerawio()函数,页选(80h-87h) */
129 1 WriteRawIO(Address,value); /* 调用writerawio()函数,选择一个寄存器(0-7h) */
130 1 }
131
132 ///////////////////////////////////////////////////////////////////////
133 /* 用页选方式访问寄存器(读出)*/
134 ///////////////////////////////////////////////////////////////////////
135 unsigned char ReadIO(unsigned char Address)
136 {
137 1 WriteRawIO(0x00,GetRegPage(Address)); /* 调用writerawio()函数,页选 */
138 1 return ReadRawIO(Address); /* 调用readrawio()函数 */
139 1 }
140
141 ///////////////////////////////////////////////////////////////////////
142 /* 设置定时时间 */
143 ///////////////////////////////////////////////////////////////////////
144 void M500PcdSetTmo(unsigned char tmoLength)
145 {
146 1 switch(tmoLength)
147 1 {
148 2 case 1:
149 2 WriteIO(RegTimerClock,0x07); /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
-128--2^7 */
150 2 WriteIO(RegTimerReload,0x6a); /* 调用WRITEIO()函数,从单片机写计时器的初始值(6AH) */
151 2 break;
152 2 case 2:
153 2 WriteIO(RegTimerClock,0x07); /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
-128--2^7 */
154 2 WriteIO(RegTimerReload,0xa0); /* 调用WRITEIO()函数,从单片机写计时器的初始值(A0H) */
155 2 break;
156 2 case 3:
157 2 WriteIO(RegTimerClock,0x09); /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
-512--2^9 */
158 2 WriteIO(RegTimerReload,0xa0); /* 调用WRITEIO()函数,从单片机写计时器的初始值(A0H) */
159 2 break;
160 2 case 4:
161 2 WriteIO(RegTimerClock,0x09); /* 调用WRITEIO()函数,从单片机写计时器得分频比(09H)=13.56MHZ/
-512--2^9 */
162 2 WriteIO(RegTimerReload,0xff); /* 调用WRITEIO()函数,从单片机写计时器的初始值(FF) */
163 2 break;
164 2 case 5:
165 2 WriteIO(RegTimerClock,0x0b); /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
-128--2^7 */
166 2 WriteIO(RegTimerReload,0xff); /* 调用WRITEIO()函数,从单片机写计时器的初始值(FFH) */
167 2 break;
168 2 case 6:
169 2 WriteIO(RegTimerClock,0x0d); /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
-128--2^7 */
170 2 WriteIO(RegTimerReload,0xff); /* 调用WRITEIO()函数,从单片机写计时器的初始值(FFH) */
171 2 break;
172 2 case 7:
C51 COMPILER V7.03 M500AUC 05/22/2004 19:41:43 PAGE 4
173 2 WriteIO(RegTimerClock,0x0f); /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
-128--2^7 */
174 2 WriteIO(RegTimerReload,0xff); /* 调用WRITEIO()函数,从单片机写计时器的初始值(FFH) */
175 2 break;
176 2 default: /* 其它情况 */
177 2 WriteIO(RegTimerClock,0x07); /* 调用WRITEIO()函数,从单片机写计时器得分频比(07H)=13.56MHZ/
-128--2^7 */
178 2 WriteIO(RegTimerReload,tmoLength); /* 调用WRITEIO()函数,从单片机写计时器的初始值(TMOLENTH) */
179 2 break;
180 2 }
181 1 }
182
183 ///////////////////////////////////////////////////////////////////////
184 // Request Command defined in ISO14443(Mifare)
185 /* 命令判别程序 */
186 ///////////////////////////////////////////////////////////////////////
187 char M500PcdCmd(unsigned char cmd,
188 volatile unsigned char data *rcv,
189 MfCmdInfo idata *info)
190 {
191 1 char idata status = MI_OK;
192 1 char idata tmpStatus ; /* 中间状态寄存器 */
193 1 unsigned char idata lastBits; /* 中间状态寄存器 */
194 1 unsigned int idata timecnt = 0;
195 1 unsigned char idata irqEn = 0x00;
196 1 unsigned char idata waitFor = 0x00;
197 1 unsigned char idata timerCtl = 0x00;
198 1
199 1 WriteIO(RegInterruptEn,0x7F); /*(06H)SETEN,0,TIMER,TX,RX,IDLE,HI,LO=0111,1111:禁中断
-使能 */
200 1 WriteIO(RegInterruptRq,0x7F); /* (07H) SETIRQ,0,TIMER,TX,RX,IDLE,HI,LO=0111,1111:禁中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -