📄 comm.lst
字号:
C51 COMPILER V8.00 COMM 04/23/2009 15:56:14 PAGE 1
C51 COMPILER V8.00, COMPILATION OF MODULE COMM
OBJECT MODULE PLACED IN .\out_sst89e564\comm.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\comm.c LARGE BROWSE ORDER NOAREGS DEBUG OBJECTEXTEND PRINT(.\comm.ls
-t) OBJECT(.\out_sst89e564\comm.obj)
line level source
1 /*pinpad.c*/
2 #include "includes.h"
3
4 /************************************
5 * 通讯解包 *
6 * cmdbuf: 输入,命令数据 *
7 * cmdtype: 输出,命令类别 *
8 * cardtype: 输出,卡类别 *
9 * cmddata: 输出,命令体 *
10 ************************************
11 int CommExpack( unsigned char *cmdbuf, // 输入的命令数据
12 unsigned char *cmdtype, // 命令类别(输出)
13 unsigned char *cardtype, // 卡类别(输出)
14 unsigned char *cmddata) // 命令体(输出)
15 {
16
17 }
18 */
19
20 static bit UseDebug = 0;
21
22 /*********************************************/
23 bit CommSend(unsigned char *buf, int len)
24 {
25 1 unsigned char data lrc;
26 1 unsigned char data exbuf[3];
27 1 unsigned char data tmp;
28 1 int i;
29 1
30 1 exbuf[0] = 0x02;
31 1 hex2bcd(len, exbuf+1);
32 1 lrc = exbuf[1] ^ exbuf[2] ^ 0x03;
33 1
34 1 for(i=0; i<len; i++)
35 1 {
36 2 if(InvPack)
37 2 buf[i] ^= 0xff;
38 2
39 2 lrc ^= buf[i];
40 2 }
41 1
42 1 for(i=0; i<3; i++)
43 1 {
44 2 if(!UseDebug)
45 2 ComClear(IBufOnly); //ComClear(AllBuf); // 050511
46 2
47 2 ComWrite(exbuf, 3);
48 2 ComWrite(buf, len);
49 2 ComWrite("\x03", 1);
50 2 ComWrite(&lrc, 1);
51 2
52 2 if( ComRead(&tmp, 1) < 1 )
53 2 continue;
54 2 else if(tmp == ACK)
C51 COMPILER V8.00 COMM 04/23/2009 15:56:14 PAGE 2
55 2 return 1;
56 2 }
57 1
58 1 return 0;
59 1 }
60
61 void CommSendNotWaitAck(unsigned char *buf, int len)
62 {
63 1 unsigned char data lrc;
64 1 unsigned char data exbuf[3];
65 1 int i;
66 1
67 1 exbuf[0] = 0x02;
68 1 hex2bcd(len, exbuf+1);
69 1 lrc = exbuf[1] ^ exbuf[2] ^ 0x03;
70 1
71 1 for(i=0; i<len; i++)
72 1 {
73 2 if(InvPack)
74 2 buf[i] ^= 0xff;
75 2
76 2 lrc ^= buf[i];
77 2 }
78 1
79 1 ComWrite(exbuf, 3);
80 1 ComWrite(buf, len);
81 1 ComWrite("\x03", 1);
82 1 ComWrite(&lrc, 1);
83 1 }
84
85 unsigned int CommRead(unsigned char *buf, int maxlen)
86 {
87 1 unsigned char ctrl;
88 1 unsigned int len, i;
89 1 unsigned char packlen[2];
90 1
91 1 if(ComIBufBytesTell() == 0)
92 1 return 0;
93 1 //////////////////////////////////////////////////////
94 1 // 通讯层的解包,不需要更改 //
95 1 if(ComRead(&ctrl, 1) < 1) //
96 1 return 0; //stx //
97 1 if(ctrl != STX) //
98 1 return 0; //
99 1 if(ComRead(packlen, 2) < 2) //
100 1 return 0; //len1, len2 //
101 1 len = bcd2hex(packlen); //
102 1 if(len > maxlen) //
103 1 return 0; // too max len //
104 1 if(ComRead(buf, len) < len) //
105 1 return 0; //package + etx + lrc //
106 1 if(ComRead(&ctrl, 1) < 1)
107 1 return 0;
108 1 if(ctrl != ETX)
109 1 return 0;
110 1 if(ComRead(&ctrl, 1) < 1) // read lrc
111 1 return 0;
112 1 ctrl ^= packlen[0] ^ packlen[1] ^ ETX;
113 1 for(i=0; i<len; i++)
114 1 ctrl ^= buf[i];
115 1 if(ctrl != 0)
116 1 { //
C51 COMPILER V8.00 COMM 04/23/2009 15:56:14 PAGE 3
117 2 ComWrite("\x15", 1); // nak //
118 2 return 0; //
119 2 } //
120 1 ComWrite("\x06", 1); // ack //
121 1 // 通讯解包完成 //
122 1 //////////////////////////////////////////////////////
123 1
124 1 if(InvPack)
125 1 {
126 2 for(i=0; i<len; i++)
127 2 buf[i] ^= 0xff;
128 2 }
129 1
130 1 return len;
131 1 }
132
133 void CommUseDbg(bit fusedbg)
134 {
135 1 UseDebug = fusedbg;
136 1 }
137
138
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 882 ----
CONSTANT SIZE = 6 ----
XDATA SIZE = ---- 24
PDATA SIZE = ---- ----
DATA SIZE = ---- 9
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -