📄 ridcard.lst
字号:
C51 COMPILER V6.02 RIDCARD 03/10/2006 14:34:52 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE RIDCARD
OBJECT MODULE PLACED IN Ridcard.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE Ridcard.c DB OE SMALL ROM(LARGE)
stmt level source
1
2 /*读卡程序:卡号有三个数据存IDCARDDATA[]数组里,读到数据返回YES,否则NO
3 */
4
5 #include "defineh.h"
6 #include "ridcard.h"
7
8
9 sbit mIdCard0 = P1^6;
10 sbit mIdCard1 = P1^7;
11 sbit mBell = P1^4;
12
13 bit readcard(void)
14 {
15 1 uchar xdata even=0; //偶效验1的和
16 1 uchar xdata odd=0; //奇效验1的和
17 1 bit even_bit;
18 1 bit odd_bit;
19 1 uchar xdata i;
20 1 uchar xdata j;
21 1 uint xdata delatime=0;
22 1 uchar xdata readdata;
23 1
24 1 if(!mIdCard1)
25 1 even_bit=1; //开始偶效验
26 1 else if(!mIdCard0)
27 1 even_bit=0;
28 1 else
29 1 return NO;
30 1 i=0;
31 1 for(;;)
32 1 {
33 2 //if((!mIdCard0)||(!mIdCard1))
34 2 if(mIdCard0&&mIdCard1)
35 2 break;
36 2 else
37 2 i++;
38 2 nop();
39 2 if(i==100)
40 2 return NO;
41 2 }
42 1 for(i=0;i<3;i++)
43 1 {
44 2 for(j=0;j<=7;j++)
45 2 {
46 3 for(;;)
47 3 {
48 4 if(!mIdCard0)
49 4 {
50 5 readdata<<=1; break; //数据0
51 5 }
52 4 else if(!mIdCard1)
53 4 {
54 5 readdata<<=1; //数据1
55 5 readdata|=0x01;
C51 COMPILER V6.02 RIDCARD 03/10/2006 14:34:52 PAGE 2
56 5 break;
57 5 }
58 4 else
59 4 delatime++;
60 4 if(delatime>300) //超时无数据退出
61 4 return NO;
62 4 }
63 3 delatime=0;
64 3 for(;;)
65 3 {
66 4 if(mIdCard0&&mIdCard1)
67 4 break;
68 4 else
69 4 delatime++;
70 4 if(delatime>=100) //为低电平超时退出
71 4 return NO;
72 4 }
73 3 delatime=0;
74 3 }
75 2 idcarddata[i]=readdata; //保存数据
76 2 }
77 1 i=0;
78 1 for(;;) //等待奇效验
79 1 {
80 2 if(!mIdCard1)
81 2 {
82 3 odd_bit=1;
83 3 break;
84 3 }
85 2 else if(!mIdCard0)
86 2 {
87 3 odd_bit=0;
88 3 break;
89 3 }
90 2 else
91 2 i++;
92 2 nop();
93 2 if(i==100)
94 2 return NO;
95 2 }
96 1
97 1 j=idcarddata[0];
98 1 for(i=0;i<8;i++)
99 1 {
100 2 if((j&0x80)==0x80)
101 2 even++;
102 2 j<<=1;
103 2 }
104 1 j=idcarddata[1];
105 1 for(i=0;i<4;i++)
106 1 {
107 2 if((j&0x80)==0x80)
108 2 even++;
109 2 j<<=1;
110 2 }
111 1 for(i=0;i<4;i++)
112 1 {
113 2 if((j&0x80)==0x80)
114 2 odd++;
115 2 j<<=1;
116 2 }
117 1 j=idcarddata[2];
C51 COMPILER V6.02 RIDCARD 03/10/2006 14:34:52 PAGE 3
118 1 for(i=0;i<8;i++)
119 1 {
120 2 if((j&0x80)==0x80)
121 2 odd++;
122 2 j<<=1;
123 2 }
124 1 if(even_bit)
125 1 even++;
126 1 if(odd_bit)
127 1 odd++;
128 1 if((!(even%=2))&&(odd%=2))
129 1 {
130 2 mBell=0;
131 2 keysoundtime=0;
132 2 keysoundtime_bit=1;
133 2 return YES;
134 2 }
135 1 else
136 1 return NO;
137 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 462 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 7
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -