📄 jl2key.lst
字号:
C51 COMPILER V6.02 JL2KEY 07/15/2004 11:07:07 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE JL2KEY
OBJECT MODULE PLACED IN C:\COMM_D\JL2KEY.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE C:\COMM_D\JL2KEY.C DB SB OE
stmt level source
1 /* ---------------------------------------------------------- */
2 /* */
3 /* IC卡加油机通讯子模块 */
4 /* 负责键盘与计量主板通讯 */
5 /* 最后修改日期:2002年5月18日 */
6 /* */
7 /* ---------------------------------------------------------- */
8
9 #include "c:\comm_d\comm_pub.h"
10 #include "c:\comm_d\jl2key.h"
11 #include "reg52.h"
12 unsigned char data unit_2s;
13 extern unsigned char idata comm_status;
14 unsigned char send_jl(unsigned char gun_num,unsigned char command)
15 {
16 1 register unsigned char length,tem;
17 1 ES=0;
18 1 if(req_bus(gun_num))return(3); // 请求占用总线超时
19 1 SOURCE=4; // 置收发数据来源为加油机主板
20 1 switch(command)
21 1 {
22 2 case 0xa0: // 读单价
23 2 case 0xa1: // 读提前关阀量
24 2 case 0xa2: // 读密度
25 2 case 0xa3: // 读预置量
26 2 case 0xa4: // 读当次加油量
27 2 case 0xa5: // 读当次金额
28 2 case 0xa6: // 读加油量班累
29 2 case 0xa7: // 读金额班累
30 2 case 0xa8: // 读加油量总累
31 2 case 0xa9: // 读金额总累
32 2 case 0xaa: // 读状态标志位
33 2 case 0xab: // 读错误类型
34 2 case 0xb5: // 清班累
35 2 case 0xc1: // 停止加油
36 2 case 0xc2: // 清数
37 2 case 0xc3: // 查税控明细
38 2 case 0xc8: // 查税控时钟
39 2 case 0xca: // 关断电池
40 2 length=3; // 命令长度(不包括通讯头)
41 2 break;
42 2 case 0xc0: // 开始加油
43 2 length=3;
44 2 break;
45 2 case 0xb0: // 写单价
46 2 case 0xb2: // 写密度
47 2 length=5;
48 2 break;
49 2 case 0xb1: // 写提前关阀量
50 2 case 0xc7: // 税控检定确认
51 2 case 0xc9: // 查税控总累计
52 2 length=4;
53 2 break;
54 2 case 0xb3: // 写金额预置量
55 2 length=6;
C51 COMPILER V6.02 JL2KEY 07/15/2004 11:07:07 PAGE 2
56 2 break;
57 2 case 0xb4: // 写油量预置量
58 2 length=6;
59 2 break;
60 2 case 0xc5: // 查税控月累计
61 2 length=6;
62 2 break;
63 2 case 0xc4: // 查税控日志
64 2 length=7;
65 2 break;
66 2 case 0xc6: // 设置税控时钟
67 2 length=9;
68 2 break;
69 2 case 0xd0:
70 2 length=7;
71 2 break;
72 2 default:
73 2 HAND_WR=1; // 释放总线
74 2 return(5); // 无此命令
75 2 break;
76 2 }
77 1 for(tem=length-2;tem>1;tem--)send_buf[tem]=send_buf[tem-2];
78 1 send_buf[0]=0xd0|length; // 通讯头
79 1 send_buf[1]=gun_num; // 枪号
80 1 send_buf[length-1]=command; // 命令码
81 1 send_buf[length]=check_jl(length-1,send_buf+1); // 校验和
82 1 send(0,length+1);
83 1
84 1 switch(command)
85 1 {
86 2 case 0xaa:
87 2 case 0xab:
88 2 case 0xca:
89 2 length=5;
90 2 break;
91 2 case 0xa0:
92 2 case 0xa2:
93 2 length=7;
94 2 break;
95 2 case 0xa1:
96 2 length=6;
97 2 break;
98 2 case 0xa3:
99 2 case 0xa4:
100 2 case 0xa5:
101 2 length=8;
102 2 break;
103 2 case 0xa6:
104 2 case 0xa7:
105 2 case 0xa8:
106 2 case 0xa9:
107 2 length=10;
108 2 break;
109 2 case 0xc0:
110 2 case 0xc1:
111 2 case 0xc2:
112 2 case 0xc3:
113 2 case 0xc4:
114 2 case 0xc5:
115 2 case 0xc6:
116 2 case 0xc7:
117 2 case 0xc8:
C51 COMPILER V6.02 JL2KEY 07/15/2004 11:07:07 PAGE 3
118 2 case 0xc9:
119 2 case 0xb5:
120 2 case 0xb4:
121 2 case 0xb3:
122 2 case 0xb2:
123 2 case 0xb1:
124 2 case 0xb0:
125 2 case 0xd0:
126 2 length=5;
127 2 break;
128 2 }
129 1 tem=recv(0,length);
130 1 if(tem==2 || tem==1) // 超时/奇偶校验错
131 1 {
132 2 HAND_WR=1; //释放总线
133 2 return(tem);
134 2 }
135 1 tem=rekk[0];
136 1 if((tem&0xf0)!=0xd0) // 判断通讯头是否正确
137 1 {
138 2 BACK: HAND_WR=1;
139 2 return(4);
140 2 }
141 1 if((tem&0xf)!=(length-1))goto BACK; // 长度不对
142 1 if(rekk[1]!=gun_num)goto BACK; // 返回枪号与发出者不符
143 1 if(rekk[length-2]!=command)goto BACK; // 命令码与发出的不符
144 1 tem=check_jl(length-2,rekk+1);
145 1 if(rekk[length-1]!=tem)goto BACK; // 校验和错
146 1 for(tem=0;tem<length-4;tem++)rekk[tem]=rekk[tem+2]; // 没出错,把数据放在接收缓冲区头
147 1 HAND_WR=1;
148 1 comm_status=0;
149 1 ES=1;
150 1 return(0); // 成功返回
151 1 }
152
153 unsigned char check_jl(unsigned char length,unsigned char xdata *buf)
154 {
155 1 register unsigned char temp,i;
156 1
157 1 temp=buf[0];
158 1 for(i=1;i<length;i++)temp=temp^buf[i];
159 1 i=temp>>4;
160 1 temp=(temp&0xf)+0x50;
161 1 temp^=i;
162 1 return(temp);
163 1 }
164
165 bit req_bus(unsigned char gun_num)
166 {
167 1 register unsigned char i=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -