?? 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; //把數組給指針賦值
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 + -