📄 125k.lst
字号:
C51 COMPILER V7.00 125K 10/11/2007 15:46:24 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE 125K
OBJECT MODULE PLACED IN 125k.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 125k.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <REG52.H>
2 sfr T2MOD = 0xc9;
3
4 sbit speak_port = P2^5;
5
6 #define time0 60 //90us
7 #define time1 200 //300us
8 #define time2 460 //690us
9
10 //读卡头内部变量
11 sbit rf_data1 = P1^5;
12 bit inbak = 1;
13 unsigned char byte_buffer[4];
14 unsigned char currency_temp[4];
15 unsigned int pulse_time;
16
17 unsigned char eerom_delay;
18
19 //MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 韦根解码 MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
20 /***等待电平跳变******************************************/
21 bit wait_change(void)
22 {
23 1 unsigned char long_time = 200; //22.1184------ 1次为4.3us
24 1 while(inbak == rf_data1) {if(--long_time == 0) return(0);}
25 1
26 1 pulse_time = TH1;
27 1 pulse_time = ((pulse_time << 8) & 0xff00) | TL1;
28 1 TH1 = 0; TL1 = 0;
29 1 inbak = rf_data1;
30 1 return(1);
31 1 }
32 //***返回:读卡成功标记,成功读卡数据放在 byte_buffer[4]中 ************************
33 bit read_IDka(void)
34 {
35 1 unsigned char i, j;
36 1 unsigned char five_bit, verify_row, bit_buffer[11];
37 1 bit verify_bit, compare_bit;
38 1
39 1 start_readid:
40 1 //CLEARWDT;
41 1 //确定起始标识
42 1 if(!wait_change()) return(0);
43 1 if((pulse_time < time1) || inbak) goto start_readid;
44 1
45 1 for(i=0;i<16;i++)
46 1 {
47 2 if(!wait_change()) return(0);
48 2 if(pulse_time>time1 || pulse_time<time0) goto start_readid;
49 2 }
50 1
51 1 //speak_port = !speak_port;
52 1
53 1 //保存位数据
54 1 for(i=0; i<11; i++)
55 1 {
C51 COMPILER V7.00 125K 10/11/2007 15:46:24 PAGE 2
56 2 five_bit = 0;
57 2 for(j=0; j<5; j++)
58 2 {
59 3 five_bit <<= 1; if(!wait_change()) return(0);
60 3 if(pulse_time <= time1)
61 3 {
62 4 if(pulse_time < time0) goto start_readid;
63 4 if(!wait_change()) return(0); //有空跳
64 4 if(pulse_time<time0 || pulse_time>time1) goto start_readid;
65 4 }
66 3
67 3 else if(pulse_time > time2) goto start_readid;
68 3 if(inbak == 0) five_bit |= 0x01;
69 3 }
70 2 bit_buffer[i] = five_bit;
71 2 }
72 1
73 1 //行校验
74 1 for(i=2;i<10;i++) //从第二行开始
75 1 {
76 2 verify_bit = 0; five_bit = bit_buffer[i];
77 2 for(j=0;j<5;j++)
78 2 {
79 3 if( five_bit & 0x01 ) verify_bit = !verify_bit;
80 3 five_bit >>= 1;
81 3 }
82 2 if( verify_bit ) goto start_readid;
83 2 }
84 1
85 1 //列校验
86 1 verify_row = 0x02; //从第一列开始
87 1 for(i=0;i<4;i++) //共4列
88 1 {
89 2 verify_bit = 0;
90 2 for(j=0;j<11;j++)
91 2 {
92 3 five_bit = bit_buffer[j];
93 3 if( five_bit & verify_row ) verify_bit = !verify_bit;
94 3 }
95 2 if( verify_bit ) return(0);
96 2 verify_row <<= 1; //准备校验下一列
97 2 }
98 1
99 1 //合并成4字节数据
100 1 for(i=0,j=2;i<4;i++)
101 1 {
102 2 bit_buffer[j] <<= 3; bit_buffer[j] &= 0xf0; //高字节
103 2 five_bit = bit_buffer[j]; j++;
104 2 bit_buffer[j] >>= 1; bit_buffer[j] &= 0x0f; //低字节
105 2 byte_buffer[i] = five_bit | bit_buffer[j]; j++;
106 2 }
107 1
108 1 //屏蔽全0卡号和全ff卡号
109 1 if(!byte_buffer[3] && !byte_buffer[2] && !byte_buffer[1] && !byte_buffer[0]) return(0);
110 1 if(byte_buffer[0] == 0xff && byte_buffer[1] == 0xff
111 1 && byte_buffer[2] == 0xff && byte_buffer[0] == 0xff) return(0);
112 1
113 1 //读2次卡号相同才认为成功
114 1 compare_bit = !compare_bit;
115 1 if(compare_bit)
116 1 {
117 2 currency_temp[0] = byte_buffer[0]; currency_temp[1] = byte_buffer[1];
C51 COMPILER V7.00 125K 10/11/2007 15:46:24 PAGE 3
118 2 currency_temp[2] = byte_buffer[2]; currency_temp[3] = byte_buffer[3];
119 2 goto start_readid;
120 2 }
121 1 else if(currency_temp[0] == byte_buffer[0] && currency_temp[1] == byte_buffer[1]
122 1 && currency_temp[2] == byte_buffer[2] && currency_temp[3] == byte_buffer[3]) return(1);
123 1 }
124
125
126 main()
127 {
128 1 T2CON = 0;
129 1 T2MOD = 0x02;
130 1 RCAP2H = 0xff;
131 1 RCAP2L = 0xf0;
132 1 TR2 = 1;
133 1
134 1 while(1)
135 1 {
136 2
137 2 if(read_IDka())
138 2 {
139 3 speak_port = !speak_port;
140 3 }
141 2 }
142 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 475 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 12
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -