📄 c_hdlc.lst
字号:
C51 COMPILER V3.96, SN-83203013 C_HDLC 03/06/04 11:31:48 PAGE 1
DOS C51 COMPILER V3.96, COMPILATION OF MODULE C_HDLC
OBJECT MODULE PLACED IN C_HDLC.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE C_HDLC.C DB SYMBOLS LA
stmt level source
1 /************主要完成和后台的HDLC通信********/
2
3 #pragma CODE DEBUG SYMBOLS OBJECTEXTEND
4 #include <reg51.h>
5 #include <absacc.h>
6 #include "Const.h"
7 #include "Extern.h"
8
9 extern void receive();
10
11 void RR_frame()//准备好祯
12 {
13 1 send_frame[0] = send_frame[1] = 0x7e;
14 1 send_frame[2] = send_frame[3] = 1 + (vr << 5);
15 1 send_frame[4] = send_frame[5] = 0x77;
16 1 send_ctrl_byte = send_frame[2];
17 1 send_inf_flag = 0;
18 1 send_data_start = 0;
19 1 send_data_length = 6;
20 1 }
21
22 void REJ_frame()//拒绝祯
23 {
24 1 send_frame[0] = send_frame[1] = 0x7e;
25 1 send_frame[2] = send_frame[3] = 0x09 + (vr << 5);
26 1 send_frame[4] = send_frame[5] = 0x77;
27 1 send_ctrl_byte = send_frame[2];
28 1 send_inf_flag = 0;
29 1 send_data_start = 0;
30 1 send_data_length = 6;
31 1 }
32
33 void RIM_frame()//请求初始化
34 {
35 1 send_frame[0] = send_frame[1] = 0x7e;
36 1 send_frame[2] = send_frame[3] = 0x07;
37 1 send_frame[4] = send_frame[5] = 0x77;
38 1 send_ctrl_byte = send_frame[2];
39 1 ns = 0;
40 1 send_inf_flag = 0;
41 1 send_data_start = 0;
42 1 send_data_length = 6;
43 1 }
44
45 void UA_frame()//响应祯
46 {
47 1 send_frame[0] = send_frame[1] = 0x7e;
48 1 send_frame[2] = send_frame[3] = 0x03;
49 1 send_frame[4] = send_frame[5] = 0x77;
50 1 send_ctrl_byte = send_frame[2];
51 1 send_inf_flag = 0;
52 1 send_data_start = 0;
53 1 send_data_length = 6;
54 1 }
55
C51 COMPILER V3.96, SN-83203013 C_HDLC 03/06/04 11:31:48 PAGE 2
56 void INF_frame()//信息祯
57 {
58 1 unsigned char xdata INF_i,INF_k;
59 1 unsigned char xdata INF_check;
60 1 unsigned int xdata INF_j;
61 1 unsigned int xdata sdbh_send;
62 1 send_frame[0] = send_frame[1] = 0x7e;
63 1 send_frame[2] = (vs << 1) + (vr << 5);
64 1 INF_check = send_frame[2];
65 1 INF_j = 3;
66 1 send_77_count = 0;
67 1 INF_k = 0;
68 1 sdbh_send = sdbh;
69 1 while((sdbh != sdbt) && (INF_k < 8))
70 1 {
71 2 INF_i = 0;
72 2 while(INF_i < 8)
73 2 {
74 3 send_frame[INF_j] = sdbuf[(sdbh_send + INF_j - 3 - send_77_count) & 0x7ff];
75 3 INF_check += send_frame[INF_j];
76 3 INF_i++;
77 3 if(send_frame[INF_j] == 0x77)
78 3 {
79 4 send_77_count++;
80 4 INF_j++;
81 4 send_frame[INF_j] = 0;
82 4 }
83 3 INF_j++;
84 3 }
85 2 sdbh = sdbh + 8;
86 2 sdbh = sdbh & 0x7f8;
87 2 INF_k++;
88 2 }
89 1 send_frame[INF_j++] = INF_check;
90 1 if (INF_check == 0x77)
91 1 {
92 2 send_77_count++;
93 2 send_frame[INF_j++] = 0;
94 2 }
95 1 send_frame[INF_j++] = 0x77;
96 1 send_frame[INF_j++] = 0x77;
97 1 send_ctrl_byte = send_frame[2];
98 1 send_data_start = 0;
99 1 send_inf_flag = 1;
100 1 send_data_length = INF_j;
101 1 }
102
103 void decode_hdlc_frame()//解祯
104 {
105 1 unsigned char xdata i,k;
106 1 unsigned char xdata check;
107 1 unsigned int xdata uint_point;
108 1 if(rv_err)
109 1 {
110 2 if(send_inf_flag == 1)
111 2 {
112 3 sdbh = (sdbh - send_data_length + send_77_count + 6) % BUF_LEN;
113 3 }
114 2 REJ_frame();
115 2 rv_err = 0;
116 2 }
117 1 else if (!(rv_ctrl_byte & 1))
C51 COMPILER V3.96, SN-83203013 C_HDLC 03/06/04 11:31:48 PAGE 3
118 1 {
119 2 check = 0;
120 2 for(uint_point = rv_start;uint_point != rv_end;uint_point = (uint_point + 1) & 0x7ff)
121 2 {
122 3 check = check + rvbuf[uint_point];
123 3 }
124 2 ns = ((rv_ctrl_byte >> 1) & 0x07);
125 2 nr = ((rv_ctrl_byte >> 5) & 0x07);
126 2 check = check & IDLE;
127 2 if(check != rvbuf[rv_end])
128 2 {
129 3 REJ_frame();
130 3 }
131 2 else if((nr == ((vs + 1) & 7)) && (ns == vr))
132 2 {
133 3 vs = ((vs + 1) & 7);
134 3 vr = ((vr + 1) & 7);
135 3 k = 0;
136 3 rv_start++;
137 3 rv_start = rv_start & 0x7ff;
138 3 while(rv_start != rv_end)
139 3 {
140 4 i = 0;
141 4 while(i < 16)
142 4 {
143 5 p_data[i] = rvbuf[rv_start];
144 5 if((rvbuf[rv_start] == 0x77) && (rvbuf[(rv_start + 1) & 0x7ff] == 0))
145 5 {
146 6 rv_start++;
147 6 rv_start = rv_start & 0x7ff;
148 6 }
149 5 rv_start++;
150 5 rv_start = rv_start & 0x7ff;
151 5 i++;
152 5 }
153 4 receive();
154 4 }
155 3 if (sdbt != sdbh)
156 3 {
157 4 INF_frame();
158 4 }
159 3 else
160 3 {
161 4 RR_frame();
162 4 }
163 3 }
164 2 else if((nr == vs) && (ns == vr))
165 2 {
166 3 vr = ((vr + 1) & 7);
167 3 k = 0;
168 3 rv_start++;
169 3 rv_start = rv_start & 0x7ff;
170 3 while(rv_start != rv_end)
171 3 {
172 4 i = 0;
173 4 while(i < 16)
174 4 {
175 5 p_data[i] = rvbuf[rv_start];
176 5 if((rvbuf[rv_start] == 0x77) && (rvbuf[(rv_start + 1) & 0x7ff] == 0))
177 5 {
178 6 rv_start++;
179 6 rv_start = rv_start & 0x7ff;
C51 COMPILER V3.96, SN-83203013 C_HDLC 03/06/04 11:31:48 PAGE 4
180 6 }
181 5 rv_start++;
182 5 rv_start = rv_start & 0x7ff;
183 5 i++;
184 5 }
185 4 receive();
186 4 }
187 3 if(send_inf_flag)
188 3 {
189 4 send_data_start = 0;
190 4 }
191 3 else if(sdbt != sdbh)
192 3 {
193 4 INF_frame();
194 4 }
195 3 else
196 3 {
197 4 RR_frame();
198 4 }
199 3 }
200 2 else if((nr != vs) && (nr != ((vs + 1) & 7)) && (ns == vr))
201 2 {
202 3 vs = 0;
203 3 vr = ((vr + 1) & 7);
204 3 if(send_inf_flag ==1)
205 3 {
206 4 sdbh = (sdbh + send_77_count + 6 - send_data_length) % BUF_LEN;
207 4 }
208 3 RIM_frame();
209 3 }
210 2 else if((nr == ((vs + 1) & 7)) && (ns != vr))
211 2 {
212 3 vs = ((vs + 1) & 7);
213 3 REJ_frame();
214 3 }
215 2 else if((nr == vs) && ( ns!= vr))
216 2 {
217 3 if(send_inf_flag == 1)
218 3 {
219 4 sdbh = (sdbh + send_77_count + 6 - send_data_length) % BUF_LEN;
220 4 }
221 3 vr = 0;
222 3 RIM_frame();
223 3 }
224 2 else
225 2 {
226 3 if(send_inf_flag == 1)
227 3 {
228 4 sdbh = (sdbh + send_77_count + 6 - send_data_length) % BUF_LEN;
229 4 }
230 3 ns = 0;
231 3 nr = 0;
232 3 RIM_frame();
233 3 }
234 2 }
235 1 else
236 1 {
237 2 nr = (rv_ctrl_byte >> 5) & 0x07;
238 2 switch(rv_ctrl_byte & 0x0f)
239 2 {
240 3 case 0x07: //SIM Frame
241 3 {
C51 COMPILER V3.96, SN-83203013 C_HDLC 03/06/04 11:31:48 PAGE 5
242 4 ns = 0;
243 4 nr = 0;
244 4 vr = 0;
245 4 vs = 0;
246 4 UA_frame();
247 4 }
248 3 break;
249 3 case 0x01: //RR Frame
250 3 {
251 4 if(nr == ((vs + 1) & 7))
252 4 {
253 5 vs = ((vs + 1) & 7);
254 5 if(sdbh != sdbt)
255 5 {
256 6 INF_frame();
257 6 }
258 5 else
259 5 {
260 6 RR_frame();
261 6 }
262 5 }
263 4 else if(nr == vs)
264 4 {
265 5 if(send_inf_flag)
266 5 {
267 6 send_data_start == 0;
268 6 }
269 5 else
270 5 {
271 6 if (sdbh != sdbt)
272 6 {
273 7 INF_frame();
274 7 }
275 6 else
276 6 {
277 7 RR_frame();
278 7 }
279 6 }
280 5 }
281 4 else
282 4 {
283 5 RIM_frame();
284 5 }
285 4 }
286 3 break;
287 3 case 0x09: //REJ Frame
288 3 {
289 4 if ((send_ctrl_byte & 0xf) == 0x9)
290 4 {
291 5 RR_frame();
292 5 }
293 4 else
294 4 {
295 5 send_data_start = 0;
296 5 }
297 4 }
298 3 break;
299 3 default:
300 3 {
301 4 REJ_frame();
302 4 }
303 3 break;
C51 COMPILER V3.96, SN-83203013 C_HDLC 03/06/04 11:31:48 PAGE 6
304 3 }
305 2 }
306 1 }
307
C51 COMPILER V3.96, SN-83203013 C_HDLC 03/06/04 11:31:48 PAGE 7
ASSEMBLY LISTING OF GENERATED OBJECT CODE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -