📄 iccard.lst
字号:
C51 COMPILER V7.09 ICCARD 08/22/2008 14:26:52 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE ICCARD
OBJECT MODULE PLACED IN .\output\iccard.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE extendUART\iccard.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash\;g
-ps\;inter\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\iccard.lst) OBJECT(.\output\iccard
-.obj)
line level source
1 #include "typedef.h"
2 #include "iccard.h"
3 ICCARD_STATUS_BUF gICcardStatus;
4 /*****BCC校验***
5 *返回值:BCC校验的值
6 *pSrcBuf:需要加校验的报文
7 *nSrcLen;pSrcBuf的长度
8 ******************/
9 /*Byte iccard_bcccode(Byte* pSrcBuf, Byte nSrcLen)
10 {
11 Byte nRet, i;
12 nRet = pSrcBuf[0];
13 for (i=1; i<nSrcLen; i++)
14 nRet ^= pSrcBuf[i];
15 return nRet;
16 }
17
18 /****BCC校验检查**************
19 *返回值:0表示校验未通过,否则校验通过
20 *pSrcBuf:进行校验的报文,其中最后一个字节为BCC校验和
21 *nSrcLen;pSrcBuf的长度
22 ******************************/
23 /*Byte iccard_bccdecode(Byte* pSrcBuf, Byte nSrcLen)
24 {
25 Byte nBcc, i;
26 if (nSrcLen >1)
27 {
28 nBcc = pSrcBuf[0];
29 for (i=1; i<(nSrcLen-1); i++)
30 nBcc ^= pSrcBuf[i];
31 if (nBcc == pSrcBuf[nSrcLen-1])
32 return nSrcLen;
33 else
34 return 0;
35 }
36 else
37 return 0;
38 }
39
40 /****解码函数***************
41 *作用:还原出原始报文,主要是针对报文中DLE
42 *返回值:0表示报文错误或者无有意义报文(BCC校验不正确),否则返回原始报文的长度
43 *pSrcBuf:包括DLE的报文,该报文包括STX和ETX
44 *pDestBuf:去除DLE的报文
45 *nSrcLen;pSrcBuf的长度
46 ****************************/
47 /*Byte iccard_dlepack(Byte* pSrcBuf, Byte* pDestBuf, Byte nSrcLen)
48 {
49 Byte i, j, bFound;
50 if ((ICCARD_STX == pSrcBuf[0]) && (ICCARD_ETX == pSrcBuf[nSrcLen-1]))
51 {
52 if (nSrcLen > 3)
53 {
C51 COMPILER V7.09 ICCARD 08/22/2008 14:26:52 PAGE 2
54 i = 1;
55 j = 0;
56 bFound = 0;
57 while (i < (nSrcLen-1))
58 {
59 if (1 == bFound)
60 {
61 bFound = 0;
62 pDestBuf[j] = pSrcBuf[i];
63 i++;
64 j++;
65 }
66 else
67 {
68 if (ICCARD_DLE == pSrcBuf[i])
69 {
70 bFound = 1;
71 i++;
72 }
73 else
74 {
75 pDestBuf[j] = pSrcBuf[i];
76 i++;
77 j++;
78 }
79 }
80 return iccard_bccdecode(pDestBuf, j);
81 }
82 }
83 return 0;
84 }
85 else if (2 == nSrcLen)
86 return nSrcLen;
87 else
88 return 0;
89 }
90
91 char gICcardSendBuf[256];//发送缓存
92 //发送通信ACK
93 void iccard_communicationACK(Byte nValue)
94 {
95 gICcardSendBuf[0] = 0x06;
96 gICcardSendBuf[1] = nValue;
97 sio_send(gICcardSendBuf, 2);
98 }
99
100 #define ICCARD_STATUSRELAY_TIMEOUT 1
101 //约定50ms执行一次
102 void iccard_process()
103 {
104 Byte nRecLen, nRecTrueLen;
105 Byte* ptr;
106 Byte recBuf[255];
107 nRecLen = ;
108 nRecTrueLen = iccard_dlepack(ptr. recBuf, nRecLen);
109 switch (gICcardStatus.curstatus)
110 {
111 case ICCARD_STATUS_IDLE:
112 if (nRecTrueLen > 2)
113 {
114 iccard_communicationACK(recBuf[1]);
115 if (recBuf[1] < 0x80)
C51 COMPILER V7.09 ICCARD 08/22/2008 14:26:52 PAGE 3
116 {
117 //命令报
118 gICcardStatus.curCommand = recBuf[2];
119 gICcardStatus.curstatus = ICCARD_STATUS_RELAY;
120 //对刷卡数据即克上传
121 if (ICCARD_CMD_CHECKWORK == recBuf[2])
122 {
123 if (22 == nRecTrueLen)
124 {
125 set_driver_id(recBuf+3);
126 make_assess_message(recBuf[22]+1);
127 gICcardStatus.curstatus = ICCARD_STATUS_WAIT_WORKRESPONSE;
128 gICcardStatus.curTimeout = ;
129 }
130
131 }
132 else if (ICCARD_CMD_CARDDATA == recBuf[2])
133 {
134 }
135 }
136 }
137 break;
138 case ICCARD_STATUS_WAITACK:
139 break;
140 case ICCARD_STATUS_WAITRESP:
141 break;
142 case ICCARD_STATUS_RELAY:
143 //针对不同的命令采用不同的方式回送应答
144 //对于上下班以及刷卡数据,只有在收到中心应答以后才回送数据报
145 //对于对时请求,即可发送
146 if ()
147 {
148 }
149 break;
150 case ICCARD_STATUS_WAITACK2:
151 break;
152 case ICCARD_STATUS_WAIT_WORKRESPONSE:
153 gICcardStatus.curTimeout--;
154 if (0 == gICcardStatus.curTimeout)
155 gICcardStatus.curstatus = ICCARD_STATUS_IDLE;
156 break;
157 }
158 }*/
159
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = ---- ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 3 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -