📄 shui_kong.lst
字号:
C51 COMPILER V7.06 SHUI_KONG 02/08/2007 15:19:46 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SHUI_KONG
OBJECT MODULE PLACED IN shui_kong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shui_kong.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "jyj07.h"
2 #include "shui_kong.h"
3
4 extern byte ram_8255a_c; //8255a_c输出字节
5
6 //税务初始化程序,返回初始化状态
7 //0:初始化正常,1:
8 byte shuiwu_init()
9 {
10 1 byte err_type;
11 1 wait_sk_ready();
12 1 if(err_type==0)
13 1 {
14 2 err_type=hand_to_sk();
15 2 }
16 1 else
17 1 {
18 2 return(err_type);
19 2 }
20 1 if(err_type==0)
21 1 {
22 2 check_display();
23 2 }
24 1 return(err_type);
25 1 }
26 //*********************HAND_TO_SK***************
27 //功能: 和税控芯片握手,初始化稅控芯片工作方式
28 byte hand_to_sk()
29 {
30 1 word delay1;
31 1 bit tempbit1;
32 1 byte error_kind=0;
33 1 byte idata sk_hand_data[7]={0x06,0xa0,0xa3,CHUAN_BING,0,0,0};
34 1 byte *pskdata;
35 1 pskdata=sk_hand_data; //把数组给指针赋值
36 1
37 1 set_high_skh(); //设置skh状态
38 1 tempbit1=0;
39 1 for(delay1=0;delay1<10000;delay1++)
40 1 {
41 2 tempbit1=read_skh(); //读skh状态
42 2 if(tempbit1==1)
43 2 {
44 3 delay1=10000; //skh为高提前结束
45 3 }
46 2 set_high_skh();
47 2 } //skh为低说明没准备好
48 1 while(tempbit1==0)
49 1 {
50 2 error_kind=1;
51 2 disp_sk_err(error_kind);
52 2 }
53 1 for(delay1=0;delay1<10000;delay1++)
54 1 {
55 2 tempbit1=read_skl(); //读skl状态
C51 COMPILER V7.06 SHUI_KONG 02/08/2007 15:19:46 PAGE 2
56 2 if(tempbit1==1)
57 2 {
58 3 delay1=10000; //skl为高提前结束
59 3 }
60 2 }
61 1 while(tempbit1==0)
62 1 {
63 2 error_kind=2;
64 2 disp_sk_err(error_kind);
65 2 }
66 1 calc_shuzu_crc(pskdata); //计算数组的crc值,并赋给最后一个值
67 1
68 1 data_to_sk4562(pskdata); //通过4562与sk芯片握手
69 1 error_kind=check_sk_com(); //检查税控的执行情况
70 1 return(error_kind);
71 1 }
72 //设置skh状态
73 void set_high_skh()
74 {
75 1 P_SKH_SK=1;
76 1 }
77 void set_low_skh()
78 {
79 1 P_SKH_SK=0;
80 1 }
81 //读skh状态
82 bit read_skh()
83 {
84 1 bit tempbit;
85 1 tempbit=P_SKH_SK;
86 1 return(tempbit);
87 1 }
88 //读skl值
89 bit read_skl()
90 {
91 1 bit tempbit;
92 1 tempbit=0x01&CS_8255B_C; //8255b c口的最低位
93 1 return(tempbit);
94 1 }
95 //显示税控错误信息
96 void disp_sk_err(byte error_kind)
97 {
98 1 }
*** WARNING C280 IN LINE 96 OF SHUI_KONG.C: 'error_kind': unreferenced local variable
99 //通过4562给税控芯片送数据
100 void data_to_sk4562(byte *pskdata)
101 {
102 1 byte len;
103 1 byte i,j,k,y;
104 1 len=*pskdata; //数组第一个值为数组的长度
105 1 ram_8255a_c=ram_8255a_c | 0x03; //0000 0011
106 1 CS_8255A_C=ram_8255a_c; //税控时钟数据线都置高
107 1 for(i=0;i<len;i++)
108 1 {
109 2 k=0x01; //0000 0001
110 2 for(j=0;j<8;j++)
111 2 {
112 3 y=k & *pskdata;
113 3 if(y==0)
114 3 {
115 4 ram_8255a_c=ram_8255a_c & 0xfe;
116 4 }
C51 COMPILER V7.06 SHUI_KONG 02/08/2007 15:19:46 PAGE 3
117 3 else
118 3 {
119 4 ram_8255a_c=ram_8255a_c | 0x01;
120 4 }
121 3 CS_8255A_C=ram_8255a_c; //送出一位
122 3 ram_8255a_c=ram_8255a_c & 0xfd; //1111 1101
123 3 CS_8255A_C=ram_8255a_c;
124 3 ram_8255a_c=ram_8255a_c | 0x02; //0000 0010
125 3 CS_8255A_C=ram_8255a_c; //一个上升沿
126 3 k=k<<1; //k左移一位
127 3 }
128 2 pskdata++;
129 2 }
130 1 set_low_skh(); //握手线置低
131 1 }
132 //计算数组的crc校验值,并赋值给最后一项
133 void calc_shuzu_crc(byte *pskdata)
134 {
135 1 byte i,temp0,len;
136 1 len=*pskdata-1; //数组的第一项为指令长度
137 1 pskdata++; //指向命令码
138 1 for(i=0;i<len;i++)
139 1 {
140 2 temp0=temp0^*pskdata;
141 2 pskdata++;
142 2 }
143 1 *pskdata=temp0; //校验和送到数组最后一项
144 1 }
145 //税务液晶显示自检
146 void check_display()
147 {
148 1 byte i,j,t_num=0; //显示的段码
149 1 byte g_num=0; //显示的枪号
150 1 byte *pcheck;
151 1 //byte idata check_lcd[13]; //直通显示的数组
152 1 byte idata check_lcd[13]={0x0c,0xa4,0,0,0,0,0,0,0,0,0,0,0};
153 1 pcheck=check_lcd;
154 1 for(i=0;i<16;i++)
155 1 {
156 2 check_lcd[2]=g_num;
157 2 for(j=3;j<11;j++)
158 2 {
159 3 check_lcd[j]=t_num;
160 3 }
161 2 calc_shuzu_crc(pcheck); //求出校验和
162 2 normal_to_sk(pcheck); //发送数组到税务芯片
163 2 g_num=1;
164 2 check_lcd[2]=g_num;
165 2 calc_shuzu_crc(pcheck); //求出校验和
166 2 normal_to_sk(pcheck); //发送数组到税务芯片
167 2 t_num++;
168 2 g_num=0;
169 2 }
170 1 }
171 //向税务芯片发送普通数据,并检查税控返回数据
172 byte normal_to_sk(byte *pdat)
173 {
174 1 word delay1;
175 1 bit tempbit1;
176 1 byte err_kind;
177 1 set_high_skh();
178 1 for(delay1=0;delay1<10000;delay1++)
C51 COMPILER V7.06 SHUI_KONG 02/08/2007 15:19:46 PAGE 4
179 1 {
180 2 tempbit1=read_skl(); //读skl状态
181 2 if(tempbit1==1)
182 2 {
183 3 delay1=10000; //skl为低提前结束
184 3 }
185 2 }
186 1 while(tempbit1==0) //skl为高错误
187 1 {
188 2 disp_sk_err(6);
189 2 }
190 1 data_to_sk4562(pdat);
191 1
192 1 err_kind=check_sk_com(); //检查指令执行情况
193 1 return(err_kind); //err_kind=0 为正确
194 1 }
195 //检查税控指令的执行情况
196 byte check_sk_com()
197 {
198 1 bit tempbit1;
199 1 byte error_kind;
200 1 word delay1;
201 1 set_low_skh();
202 1 //set_high_skh();
203 1 tempbit1=read_skh(); //读skh状态
204 1 while(tempbit1==1) //
205 1 {
206 2 tempbit1=read_skh();
207 2 }
208 1 for(delay1=0;delay1<10000;delay1++)
209 1 {
210 2 tempbit1=read_skl(); //读skl状态
211 2 if(tempbit1==0)
212 2 {
213 3 delay1=10000; //skl为低提前结束
214 3 }
215 2 }
216 1 while(tempbit1==1) //skl为高错误
217 1 {
218 2 error_kind=3;
219 2 disp_sk_err(error_kind);
220 2 }
221 1 set_high_skh();
222 1 for(delay1=0;delay1<10000;delay1++)
223 1 {
224 2 tempbit1=read_skh(); //读skh状态
225 2 if(tempbit1==1)
226 2 {
227 3 delay1=10000; //skh为高提前结束
228 3 }
229 2 set_high_skh();
230 2 } //skh为低说明没准备好
231 1 while(tempbit1==0)
232 1 {
233 2 error_kind=4;
234 2 disp_sk_err(error_kind);
235 2 }
236 1 for(delay1=0;delay1<10000;delay1++)
237 1 {
238 2 tempbit1=read_skl(); //读skl状态
239 2 if(tempbit1==1)
240 2 {
C51 COMPILER V7.06 SHUI_KONG 02/08/2007 15:19:46 PAGE 5
241 3 delay1=10000; //skl为低提前结束
242 3 }
243 2 }
244 1 while(tempbit1==0) //skl为高错误
245 1 {
246 2 error_kind=5;
247 2 disp_sk_err(error_kind);
248 2 }
249 1 return(error_kind);
250 1 }
251 //等待税控芯片准备好
252 void wait_sk_ready()
253 {
254 1 bit tempbit1;
255 1 set_high_skh();
256 1 tempbit1=read_skh(); //读skh状态
257 1 while(tempbit1!=1)
258 1 {
259 2 tempbit1=read_skh();
260 2 }
261 1 tempbit1=read_skl();
262 1 while(tempbit1!=1)
263 1 {
264 2 tempbit1=read_skl();
265 2 }
266 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 904 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 38 ----
IDATA SIZE = 20 ----
BIT SIZE = 6 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -