📄 emrfc.lst
字号:
C51 COMPILER V3.20, SN-50203013 EMRFC 03/14/07 15:02:59 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE EMRFC
OBJECT MODULE PLACED IN EMRFC.OBJ
COMPILER INVOKED BY: D:\COMP51\BIN\C51.EXE EMRFC.C DB OE SMALL ROM(LARGE)
stmt level source
1 #pragma RB(0)
2 #pragma OT(5,SIZE)
3 #include<reg52.h>
4 #include<intrins.h>
5 #include <pub2000.h>
6 /*************************************************/
7 /*功能:用来对EM4095的读卡信号进行解码,以键盘接口*/
8 /* 协议输出卡号 */
9 /*适用条件:卡格式为EM4001,码格式为曼彻斯特, */
10 /* BITRATE=RF/64 */
11 /*编写时间:2005.9.12 */
12 /*编写人:唯实公司-张建炜 */
13 /*************************************************/
14
15 #define uchar unsigned char
16 #define uint unsigned int
17 #define ulong unsigned long
18 /********** 11.0592MHz ************************/
19 #define TSMAX 320 /*最大有效半周期长度256us=235*/
20 #define TSMIN 140 /*最小有效半周期长度*/
21 #define TLMIN 330 /*最小一周期长度512us=471*/
22 #define TLMAX 650 /*最大一周期长度*/
23 /********** 11.0592MHz ************************/
24
25 extern uchar TT1;
26 unsigned char bdata DMbyte;
27 sbit DMbit0 = DMbyte^0;
28 sbit DMbit1 = DMbyte^1;
29 sbit DMbit2 = DMbyte^2;
30 sbit DMbit3 = DMbyte^3;
31 sbit DMbit4 = DMbyte^4;
32 sbit DMbit5 = DMbyte^5;
33 sbit DMbit6 = DMbyte^6;
34 sbit DMbit7 = DMbyte^7;
35
36 #define TH OO.AA[0]
37 #define TL OO.AA[1]
38
39 union
40 {
41 uchar AA[2];
42 uint HL;
43 } data WW,OO;
44 unsigned int data PTime;
45 bit TF;
46 unsigned char data BitNumb;
47 unsigned char data ByteNumb;
48 unsigned char data RFCardID[11];
49 unsigned char bdata BCDByte;
50 sbit CardS0=BCDByte^0;
51 unsigned char data Parity;
52 bit DataFlag=0;
53
54 void startTime()
55 {
C51 COMPILER V3.20, SN-50203013 EMRFC 03/14/07 15:02:59 PAGE 2
56 1 if ( TF0 ) PTime=0xffff; else;
57 1 TR0=0;
58 1 WW.AA[0]=TH0;
59 1 WW.AA[1]=TL0;
60 1 TR0=1;
61 1 PTime=WW.HL-OO.HL;
62 1 TH=WW.AA[0];TL=WW.AA[1];
63 1 }
64
65 bit searchHead()
66 {
67 1
68 1 bit flag;
69 1 while ( !TF0 )
70 1 {
71 2 flag=CARDIN;
72 2 while ( CARDIN==flag && (TH0-TH)<4 );startTime();
73 2 if ( (TH0-TH)>3 ) return 0; else;
74 2
75 2 if ( PTime<TLMAX && PTime>TLMIN )
76 2 {
77 3 if ( flag )
78 3 {
79 4 BitNumb=1;
80 4 return 1;
81 4 }
82 3 else;
83 3 }
84 2 else if ( PTime<TSMAX && PTime>TSMIN );
85 2 else return 0;
86 2 }
87 1 return 0; /*超时*/
88 1 }
89
90 uchar rdCard()
91 {
92 1 uchar AA;
93 1 bit flag;
94 1
95 1 Mod=0;
96 1
97 1 TT1=0;
98 1 TH0=0xab;TL0=0x00; TF0=0; // 25ms ;
99 1 TR0=1; ET0=1;
100 1 while ( TT1<1 ) PCON=1; // IDLE MODE
101 1 ET0=0;
102 1
103 1 TR0=0; TH0=0xf5;TL0=34;TR0=1; TF0=0; /*在3ms之内检测CARDIN是否有跳变*/
104 1 while( !CARDIN && !TF0 );
105 1 startTime();
106 1 if ( TF0 ) return 0; else;
107 1
108 1 /*第一个脉冲跳过去*/
109 1 TR0=0;TH0=0;TL0=0;TR0=1; TF0=0;
110 1 while ( CARDIN && TH0<3 ); startTime();
111 1 if ( TH>2 ) return 0; else;
112 1
113 1 if ( !searchHead() )
114 1 return 0;
115 1 else;
116 1
117 1 while ( BitNumb<9 )
C51 COMPILER V3.20, SN-50203013 EMRFC 03/14/07 15:02:59 PAGE 3
118 1 {
119 2 while ( !CARDIN && (TH0-TH)<4 ); startTime();
120 2 if ( PTime<TSMAX && PTime>TSMIN )
121 2 {
122 3 while ( CARDIN && (TH0-TH)<4 ); startTime();
123 3 if ( PTime<TSMAX && PTime>TSMIN )
124 3 {
125 4 if ( BitNumb>8 ) break;
126 4 else BitNumb++;
127 4 }
128 3 else
129 3 return 0;
130 3 }
131 2 else if ( PTime<TLMAX && PTime>TLMIN )
132 2 {
133 3 if ( !searchHead() )
134 3 return 0;
135 3 }
136 2 else return 0;
137 2
138 2 }
139 1 /*读数据*/
140 1 BitNumb=0; ByteNumb=0; BCDByte=0; Parity=0; flag=0;
141 1
142 1 while (1)
143 1 {
144 2 BCDByte<<=1;// DataFlag=~DataFlag;
145 2 while ( (CARDIN==flag) && (TH0-TH)<4 ); startTime();
146 2 flag=!flag;
147 2 if (PTime>TSMIN && PTime<TSMAX)
148 2 {
149 3 while ( (CARDIN==flag) && (TH0-TH)<4 ); startTime();
150 3 flag = !flag;
151 3 if (PTime>TSMIN && PTime<TSMAX)
152 3 {
153 4 if ( flag==0 )
154 4 {
155 5 BCDByte |=1;
156 5 }
157 4 else;
158 4 BitNumb++;
159 4 }
160 3 else return 0;
161 3 }
162 2 else if ( PTime>TLMIN && PTime<TLMAX )
163 2 {
164 3 if (!flag) BCDByte |= 1;
165 3 else;
166 3 BitNumb++;
167 3 }
168 2 else return 0;
169 2
170 2 if ( BitNumb>=5 )
171 2 {
172 3 BitNumb=0;
173 3 if ( ByteNumb<10 )
174 3 {
175 4 RFCardID[ByteNumb]=BCDByte;
176 4 ACC=BCDByte;
177 4 if (P==0){ ByteNumb++; Parity ^= BCDByte; }
178 4 else return 0;
179 4 BCDByte=0;
C51 COMPILER V3.20, SN-50203013 EMRFC 03/14/07 15:02:59 PAGE 4
180 4 }
181 3 else
182 3 {
183 4 RFCardID[10]=BCDByte;
184 4 if ( CardS0 != 0 )
185 4 return 0;
186 4 else;
187 4 Parity ^= BCDByte;
188 4 Parity=Parity>>1;
189 4 BCDByte=0;
190 4 if ( Parity!=0 )
191 4 return 0;
192 4 else return 1;
193 4 }
194 3 }
195 2 else;
196 2 }
197 1 }
198
199 void handleID()
200 {
201 1 unsigned char i;
202 1
203 1 for ( i=0;i<10;i=i+2 )
204 1 {
205 2 RFCardID[i/2] = ((RFCardID[i]<<3) & 0xf0) + (RFCardID[i+1]>>1);
206 2 }
207 1 }
208
209 bit rfEM() /*1:有卡;0:无卡*/
210 {
211 1 uchar i=0;
212 1 bit flag;
213 1
214 1 if ( rdCard()==1 )
215 1 {
216 2 handleID();
217 2 return 1;
218 2 }
219 1 else return 0;
220 1 }
221
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 663 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 22 2
IDATA SIZE = ---- ----
BIT SIZE = 2 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -