📄 duxiexitongrc500.lst
字号:
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DUXIEXITONGRC500
OBJECT MODULE PLACED IN DUXIExitongRC500.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DUXIExitongRC500.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /****************************************************************/
2 /* main程序头文件 */
3 /* 主要功能:常量定义 */
4 /* 修改:liguozhen*/
5 /* 时间:2008年2月
6 /****************************************************************/
7
8 #include <reg51.h>
9 #include <intrins.h>
10 #include <string.h>
11 #include <absacc.h>
12 //数据类型定义
13 #define ulong unsigned long
14 #define uchar unsigned char
15 #define uint unsigned int
16 ////////page00//////////////////////////////////////////////////////////////////////
17 #define Page_Sel XBYTE[0x7000]//选择寄存器页
18 #define Command XBYTE[0x7001] //启动和停止命令的执行
19 #define FIFO XBYTE[0x7002] //64 字节FIFO 缓冲区输入和输出
20 #define PrimaryStatus XBYTE[0x7003] //接收器和发送器以及FIFO 缓冲区状态标志
21 #define FIFO_Length XBYTE[0x7004]//FIFO 中缓冲的字节数
22 #define SecondaryStatus XBYTE[0x7005]//不同的状态标志
23 #define InterruptEn XBYTE[0x7006]//使能和禁止中断请求通过的控制位
24 #define Int_Req XBYTE[0x7007] //中断请求标志
25 ////////page08//////////////////////////////////////////////////////////////////////
26 #define Control XBYTE[0x7009] //不同的控制标志例如定时器节电
27 #define ErrorFlag XBYTE[0x700a] //显示上次命令执行错误状态的错误标志
28 #define CollPos XBYTE[0x700b] //RF 接口检测到的第一个冲突位的位置
29 #define TimerValue XBYTE[0x700c] //定时器的实际值
30 #define CRCResultLSB XBYTE[0x700d]// CRC 协处理器寄存器的最低位
31 #define CRCResultMSB XBYTE[0x700e]//CRC 协处理器寄存器的最高位
32 #define Bit_Frame XBYTE[0x700f]//位方式帧的调节
33 ////////page10////////////////////////////////////////////////////////////////////////
34 #define TxControl XBYTE[0x7011] //天线驱动脚TX1 和TX2 的逻辑状态控制
35 #define CWConductance XBYTE[0x7012]//选择天线驱动脚TX1 和TX2 的电导率
36 #define PreSet13 XBYTE[0x7013]//ModeConductance 该值不会改变
37 #define PreSet14 XBYTE[0x7014]// CoderControl该值不会改变
38 #define ModWidth XBYTE[0x7015]// 选择调整脉冲的宽度
39 #define PreSet17 XBYTE[0x7017]//该值不会改变TypeBFraming
40 /////////page18///////////////////////////////////////////////////////////////////////
41 #define RxControl1 XBYTE[0x7019]//控制接收器状态
42 #define DecodeControl XBYTE[0x701a]//控制解码器状态
43 #define BitPhase XBYTE[0x701b]//选择发送器和接收器时钟之间的位相位
44 #define RxThreshold XBYTE[0x701c]//选择位解码器的阀值
45 #define PreSet1D XBYTE[0x701d]//该值不会改变
46 #define Rxcontrol2 XBYTE[0x701e]//控制解码器状态和定义接收器的输入源
47 #define ClockQControl XBYTE[0x701f]//控制时钟产生用于90o相移的Q 信道时钟
48 ////////page20////////////////////////////////////////////////////////////////////////
49 #define RxWait XBYTE[0x7021] //选择发送后接收器启动前的时间间隔
50 #define ChannelRedundancy XBYTE[0x7022]//选择RF 信道上数据完整性检测的类型和模式
51 #define CRCPresetLSB XBYTE[0x7023]//CRC 寄存器预设值的低字节
52 #define CRCPresetMSB XBYTE[0x7024]//CRC 寄存器预设值的gao字节
53 #define PreSet25 XBYTE[0x7025]//该值不会改变
54 #define MFOUTSelect XBYTE[0x7026]//选择输出到管脚MFOUT 的内部信号//PreSet27
55 ///////prge28////////////////////////////////////////////////////////////////////
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 2
56 #define FIFOLevel XBYTE[0x7029] //定义FIFO 上溢和下溢警告界限
57 #define TimerClock XBYTE[0x702a] //选择定时器时钟的分频器
58 #define TimerControl XBYTE[0x702b]//选择定时器的起始和停止条件
59 #define TimerReload XBYTE[0x702c]//定义定时器的预装值
60 #define IRQPinConfig XBYTE[0x702d]//配置IRQ 脚的输出状态//PreSet2E//PreSet2f不变
61 #define TestAnaSelect XBYTE[0x703a] //选择模拟测试模式
62 #define TestDigiSelect XBYTE[0x703d] //选择数字测试模式
63 /////////////////////////////////////////////////////////////////////////////////
64 #define RF_CMD_REQUEST_STD 0x26
65 #define RF_CMD_REQUEST_ALL 0x52
66 #define RF_CMD_ANTICOL 0x93
67 #define RF_CMD_SELECT 0x93
68 #define RF_CMD_AUTH_LA 0x60
69 #define RF_CMD_AUTH_LB 0x61
70 #define RF_CMD_READ 0x30
71 #define RF_CMD_WRITE 0xa0
72 #define RF_CMD_INC 0xC1
73 #define RF_CMD_DEC 0xC0
74 #define RF_CMD_RESTORE 0xC2
75 #define RF_CMD_TRANSFER 0xB0
76 #define RF_CMD_HALT 0x50
77 #define RF_CMD_REQUEST_ALL 0x52
78 #define RC500_AUTHERR 4 //验证不成功
79 #define RC500_FRAMINGERR 20
80 #define RC500_SELERR 9
81 #define KEYA 0x00
82 #define KEYB 0x04
83 #define ReadE2 0x03 //读FM1715 EEPROM命令
84 #define WriteE2 0x01 //写FM1715 EEPROM命令
85 #define Authent1 0x0c //验证命令认证过程第1步
86 #define Authent2 0x14 //验证命令认证过程第2步
87 #define LoadKeyE2 0x0b //将密钥从EEPROM复制到KEY缓存
88 #define LoadKey 0x19 //将密钥从FIFO缓存复制到KEY缓存
89 #define RF_TimeOut 0xfff //发送命令延时时间
90 #define RC500_PARITYERR 5 //卡片奇偶校验错误
91 #define RC500_CRCERR 2 //卡片CRC校验错误
92 #define RC500_BYTECOUNTERR 12 //从卡片接收到的字节数错误
93 #define MI_OK 1
94 #define RF_TimeOUT 0xfff
95 #define RC500_NOTAUTHERR 10
96 #define TYPEA_MODE 0 //TypeA模式
97 #define RC500_NOTAGERR 1
98 #define RC500_EMPTY 3 //数值溢出错误
99 #define RC500_WRITEERR 15 //调用write函数出错
100 #define RC500_OK 0
101 #define RC500_REQERR 21 //调用req函数出错
102 #define RC500_ANTICOLLERR 23
103 #define RC500_SERNRERR 8 //卡片序列号错误(anti-collision 错误)
104 #define RC500_INCRERR 16 //调用increment函数出错
105 #define RC500_DECRERR 17 //调用decrement函数出错
106 #define RC500_RESTERR 13 //调用restore函数出错
107 #define RC500_TRANSERR 14 //调用transfer函数出错
108 #define Transceive 0x1E //发送接收命令
109 #define Transmit 0x1a //发送命令
110 #define Req 0x01
111 #define Sel 0x02
112 #define TRUE 1
113 #define FALSE 0
114 #define STD 0x00
115 #define ALL 0x01
116
117 ////////////////////////////////////////////////////////////////////////////////
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 3
118 sbit MFRST= P1^5;//33
119 sbit NCS=P3^5;//27
120 sbit IRQ=P3^4;
121 //sbit deng=P3^1;
122 //sbit LED= P3^5;
123 //sbit MI=P3^4;
124 sbit P12=P1^2;
125 sbit P13=P1^3;
126 sbit P14=P1^4;//mi
127 sbit UART_RX_BIT=P3^3;
128 sbit UART_TX_BIT=P3^2;
129 sbit ss=P1^0;
130 sbit sclk=P1^1;
131 sbit mosi=P1^2;
132 sbit miso=P1^3;
133
134 //时钟硬件设置
135 #define ad P2 //地址数据总线
136 sbit cs = P1^6; //片选
137 sbit as = P1^7; //地址选通输入
138 sbit rw = P3^3; //读允许输入脚
139 sbit ds = P3^2; //写允许输入
140
141 uchar idata readdata[16] _at_ 0x0040;//读写数据缓冲区
142 uchar idata tagtype[2] _at_ 0x0050;//卡片标识字符
143 uchar idata sendata[24] _at_ 0x0096; //增减的数值//gai08 4 24
144 uchar idata buffer[24] _at_ 0x0060; //FM1715命令发送接收缓冲区
145 uchar idata UID[5] _at_ 0x007a; //序列号
146 uchar idata Secnr _at_ 0x0090; //扇区号
147 uchar CardStatus;
148 //uchar idata Block_Adr[63] _at_ 0x00a0;
149 uchar code tongxunceshixinxi[]={0x3c,0x01,0x01,0x3c,0x0d}; //5
150 uchar code gonggongxinxi[] ={0x3c,0x02,0x00,0x00,0x3e,0x0d}; //6
151 uchar code xunkaxinxi[] ={0x3c,0x05,0x7c,0x7a,0x5d,0x16,0x00,0x74,0x0d}; //9
152 uchar code dukaxinxi[] ={0x3c,0x12,0x00,0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-,0x00,0x00,0x00,0x00,0x84,0x0d}; //9
153 uchar code dukaxinxi2[] ={0x3c,0x12,0x00,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x2e,0x0d}; //9
154 uchar code cuowufanhui[]= {0x3c,0x01,0xff,0x3e,0x0d};
155 /////////////////////////////////////////
156 void sen(unsigned char dd)
157 {
158 1 TI=0;
159 1 SBUF=dd;
160 1 while(!TI)
161 1 {};
162 1 TI=0;
163 1 }
164 ////////////////////////////////////////////
165 /*void send(unsigned char i)
166 {
167 unsigned char j,k;
168 ss=0;
169 sclk=0;
170 j=i;
171 for(k=0;k<8;k++)
172 { if(j&0x01)
173 mosi=1;
174 else
175 mosi=0;
176 sclk=1;
177 j=j>>1;
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 4
178 sclk=0;
179 }
180 }
181 void pu()
182 {
183 send(0x01);
184 send(0x00);
185 ss=1;
186 }
187
188 void pd()
189 {
190 send(0x07);
191 send(0x00);
192 ss=1;
193 }
194 void playone()
195 {
196 unsigned int delay;
197 pu();
198 for(delay=0;delay<100;delay++);
199 send(0x45);
200 send(0x80);
201 send(0x04);
202 ss=1;
203 delay=100;
204 while(delay--);
205 send(0x80);
206 send(0x00);
207 send(0x10);
208 send(0x00);
209 send(0x25);
210 send(0x00);
211 ss=1;
212 delay=100;
213 while(delay--);
214 pd();
215 }
216 void playtwo()
217 {
218 unsigned int delay;
219 pu();
220 for(delay=0;delay<100;delay++);
221 send(0x45);
222 send(0x80);
223 send(0x04);
224 ss=1;
225 delay=100;
226 while(delay--);
227 send(0x80);
228 send(0x00);
229 send(0x26);
230 send(0x00);
231 send(0x45);
232 send(0x00);
233 ss=1;
234 delay=100;
235 while(delay--);
236 pd();
237 }
238 */
239
C51 COMPILER V7.06 DUXIEXITONGRC500 06/29/2008 08:54:14 PAGE 5
240 uchar Clear_FIFO(void) //清除FIFO数据
241 {
242 1 uchar temp;
243 1 uint i;
244 1 temp=Control;
245 1 temp=(temp|0x01);
246 1 Control=temp;
247 1 for(i=0;i<RF_TimeOUT;i++)
248 1 { temp=FIFO_Length;
249 2 if(temp==0)
250 2 {
251 3 return TRUE;
252 3 }
253 2
254 2 }return FALSE;
255 1
256 1 }
257 /////////////////////////////////////////////////////////
258 void Write_FIFO(uchar count,uchar idata*buff) //写数据FIFO
259 {
260 1 uchar i;
261 1 for(i=0;i<count;i++)
262 1 {
263 2 FIFO=*(buff+i);
264 2 }
265 1
266 1 }
267 //////////////////////////////////////////////////////////////
268 uchar judge_Req(uchar idata*buff) //卡片复位应答信号的判断
269 {
270 1 uchar temp1,temp2;
271 1 temp1=*buff;
272 1 temp2=*(buff+1);
273 1 if(((temp1==0x03)||(temp1==0x04)||(temp1==0x05))&&(temp2==0x00))
274 1 {
275 2 //sen(temp1);//04MIFARE标准8K卡
276 2 return TRUE;
277 2 }
278 1 return FALSE;
279 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -