📄 c_main.lst
字号:
C51 COMPILER V3.96, SN-83203013 C_MAIN 03/06/04 11:31:46 PAGE 1
DOS C51 COMPILER V3.96, COMPILATION OF MODULE C_MAIN
OBJECT MODULE PLACED IN C_MAIN.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE C_MAIN.C DB SYMBOLS LA
stmt level source
1 /************系统主程序********/
2
3 #pragma CODE DEBUG SYMBOLS OBJECTEXTEND
4 #include <reg51.h>
5 #include <absacc.h>
6 #include "Const.h"
7 #include "chat.h"
8
9 extern mfc_read();//MFC读
10 extern mfc_test100();//100毫秒MFC测试
11 extern i_mfc();//MFC初始化
12 extern mfc_init();//MFC变量初始化
13
14 extern dtmf_test100();//100毫秒DTMF测试
15 extern dtmf_init();//DTMF变量初始化
16
17 extern audio_scan_50ms();//定时检测放音是否结束
18 extern audio_manage_100ms();//定时检测是否应该放音
19
20 extern trk_out_ctrl();//数字中继线路信令处理
21 extern trk_in_ctrl();//数字中继用户呼入处理程序
22
23 extern user_e1_init();//数字中继用户初始化
24 extern chat_common_init();//公共聊天室初始化
25 extern chat_private_init();//私聊初始化
26
27 extern clear_DS21554();//DS21554寄存器清零
28 extern init_DS21554();//初始化DS21554
29
30 extern i_net();//初始化为无音
31 extern connect(unsigned char in_slot,unsigned char o_slot);//用于连接两个时隙
32 extern no_sound(unsigned char o_slot);//无音处理
33
34 extern command(unsigned char x,unsigned char y,unsigned char z,unsigned char i,unsigned char j,unsigned ch
-ar k,unsigned char l,unsigned char m,
35 unsigned char n,unsigned char o,unsigned char p,unsigned char q,unsigned char r,unsigned char s,unsi
-gned char t,unsigned char u);
36
37 extern void init_back();
38 extern void yukong_init();
39
40 extern decode_hdlc_frame();//解祯子程序
41
42 void interface_init()//专线成员接口初始化
43 {
44 1 unsigned char xdata buf;
45 1 unsigned char xdata i,j;
46 1 audio_dtmf_count = 0;
47 1 yukong_count = 0;
48 1 for(i = 0;i < 12;i++)
49 1 {
50 2 buf = XBYTE[0xd000 + (i << 8) + BOARD_INFO] & 0x0f;
51 2 if(buf == 8)//语控板
52 2 {
53 3 command(3,BOARD_YUKONG,i,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
C51 COMPILER V3.96, SN-83203013 C_MAIN 03/06/04 11:31:46 PAGE 2
54 3 for(j = 0;j < 8;j++)
55 3 {
56 4 yukong_count++;
57 4 yukong_resource[i * 8 + j].addr = 0xd001 + (i << 8);//语控单元地址
58 4 yukong_resource[i * 8 + j].flag = LEISURE;
59 4 if(i < 8)
60 4 {
61 5 yukong_resource[i * 8 + j].slot = (0x80 + i * 8 + j) & 0xbf;//提示音单元时隙(Hw4、Hw5)
62 5 }
63 4 else if(i < 12)
64 4 {
65 5 yukong_resource[i * 8 + j].slot = (0x60 + ((i - 8) & 3) * 8 + j) & 0x7f;//提示音单元时隙(Hw3)
66 5 }
67 4 }
68 3 command(8,2,yukong_count,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
69 3 }
70 2 else if(buf == 7)//语音和收号器板
71 2 {
72 3 command(3,BOARD_AUDIO,i,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
73 3 for(j = 0;j < 8;j++)
74 3 {
75 4 audio_dtmf_count++;
76 4 audio_dtmf_resource[i * 8 + j].addr = 0xd000 + (i << 8);//提示音单元地址
77 4 audio_dtmf_resource[i * 8 + j].flag = LEISURE;
78 4 if(i < 8)
79 4 {
80 5 audio_dtmf_resource[i * 8 + j].slot = (0x80 + i * 8 + j) & 0xbf;//提示音单元时隙(Hw4、Hw5)
81 5 }
82 4 else if(i < 12)
83 4 {
84 5 audio_dtmf_resource[i * 8 + j].slot = (0x60 + ((i - 8) & 3) * 8 + j) & 0x7f;//提示音单元时隙(Hw3)
85 5 }
86 4 }
87 3 command(8,1,audio_dtmf_count,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
88 3 }
89 2 else//没有接任何板子
90 2 {
91 3 command(3,BOARD_NONE,i,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
92 3 }
93 2 }
94 1 command(8,0,mfc_count,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
95 1 }
96
97 void i_comm()//通信初始化
98 {
99 1 for(sdbt = 0;sdbt < BUF_LEN;sdbt++)
100 1 {
101 2 sdbuf[sdbt] = IDLE;//发送缓冲区
102 2 rvbuf[sdbt] = IDLE;//接收缓冲区
103 2 }
104 1 sdbh = 0;//发送头指针
105 1 sdbt = 0;//发送尾指针
106 1 rvbt = 0;//接收头指针
107 1 rvbh = 0;//接收尾指针
108 1 }
109
110 void hdlc_init()//HDLC初始化
111 {
112 1 unsigned char xdata i;
113 1 for(i = 0;i < 150;i++)//发送缓冲区
114 1 {
115 2 send_frame[i] = IDLE;
C51 COMPILER V3.96, SN-83203013 C_MAIN 03/06/04 11:31:46 PAGE 3
116 2 }
117 1 nr = 0;
118 1 ns = 0;
119 1 vs = 0;
120 1 vr = 0;
121 1 send_data_start = 0;
122 1 send_data_length = 0;
123 1 send_inf_flag = 0;
124 1 send_ctrl_byte = 0;
125 1 send_77_count = 0;
126 1 rv_start = 0;
127 1 rv_end = 0;
128 1 rv_ctrl_byte = 0;
129 1 rv_state = 0;
130 1 rv_err = 0;
131 1 decode_flag = 0;
132 1 }
133
134 void sig_req(unsigned char sig_type,unsigned char d_port)//插入信令处理
135 {
136 1 if((d_port & 0x0f) == 0)
137 1 {
138 2 return;
139 2 }
140 1 if(d_port < 64)
141 1 {
142 2 if(d_port < 32)
143 2 {
144 3 if(d_port < 16)
145 3 {
146 4 d_port &= 0x0f;
147 4 user_e1[d_port].forward_signal = (sig_type << 4) | (user_e1[d_port].forward_signal & 0x0f);
148 4 XBYTE[DS21554_ADDR[0] + TS1 + d_port] = user_e1[d_port].forward_signal;
149 4 }
150 3 else
151 3 {
152 4 d_port &= 0x0f;
153 4 user_e1[d_port + 16].forward_signal = (sig_type & 0x0f) | (user_e1[d_port + 16].forward_signal & 0xf0)
-;
154 4 XBYTE[DS21554_ADDR[0] + TS1 + d_port] = user_e1[d_port + 16].forward_signal;
155 4 }
156 3 }
157 2 else
158 2 {
159 3 if((d_port & 0x1f) < 16)
160 3 {
161 4 d_port &= 0x0f;
162 4 user_e1[d_port + 32].forward_signal = (sig_type << 4) | (user_e1[d_port + 32].forward_signal & 0x0f);
163 4 XBYTE[DS21554_ADDR[1] + TS1 + d_port] = user_e1[d_port + 32].forward_signal;
164 4 }
165 3 else
166 3 {
167 4 d_port &= 0x0f;
168 4 user_e1[d_port + 48].forward_signal = (sig_type & 0x0f) | (user_e1[d_port + 48].forward_signal & 0xf0)
-;
169 4 XBYTE[DS21554_ADDR[1] + TS1 + d_port] = user_e1[d_port + 48].forward_signal;
170 4 }
171 3 }
172 2 }
173 1 else
174 1 {
175 2 if(d_port < 96)
C51 COMPILER V3.96, SN-83203013 C_MAIN 03/06/04 11:31:46 PAGE 4
176 2 {
177 3 if((d_port & 0x1f) < 16)
178 3 {
179 4 d_port &= 0x0f;
180 4 user_e1[d_port + 64].forward_signal = (sig_type << 4) | (user_e1[d_port + 64].forward_signal & 0x0f);
181 4 XBYTE[DS21554_ADDR[2] + TS1 + d_port] = user_e1[d_port + 64].forward_signal;
182 4 }
183 3 else
184 3 {
185 4 d_port &= 0x0f;
186 4 user_e1[d_port + 80].forward_signal = (sig_type & 0x0f) | (user_e1[d_port + 80].forward_signal & 0xf0)
-;
187 4 XBYTE[DS21554_ADDR[2] + TS1 + d_port] = user_e1[d_port + 80].forward_signal;
188 4 }
189 3 }
190 2 else
191 2 {
192 3 if((d_port & 0x1f) < 16)
193 3 {
194 4 d_port &= 0x0f;
195 4 user_e1[d_port + 96].forward_signal = (sig_type << 4) | (user_e1[d_port + 96].forward_signal & 0x0f);
196 4 XBYTE[DS21554_ADDR[3] + TS1 + d_port] = user_e1[d_port + 96].forward_signal;
197 4 }
198 3 else
199 3 {
200 4 d_port &= 0x0f;
201 4 user_e1[d_port + 112].forward_signal = (sig_type & 0x0f) | (user_e1[d_port + 112].forward_signal & 0xf
-0);
202 4 XBYTE[DS21554_ADDR[3] + TS1 + d_port] = user_e1[d_port + 112].forward_signal;
203 4 }
204 3 }
205 2 }
206 1 }
207
208 void read_signalling()//读取线路信令
209 {
210 1 unsigned char xdata l,buf;
211 1 for(l = 1;l < 16;l++)
212 1 {
213 2 buf = XBYTE[DS21554_ADDR[0] + RS1 + l];
214 2 //第一片DS21554的线路信号
215 2 user_e1[l + 16].backward_signal = buf & 0x0f;
216 2 //对应TS17,18,。。。。
217 2 user_e1[l].backward_signal = buf >> 4;
218 2 //对应TS1,2,。。。。
219 2 buf = XBYTE[DS21554_ADDR[1] + RS1 + l];
220 2 //第二片DS21554的线路信号
221 2 user_e1[l + 48].backward_signal = buf & 0x0f;
222 2 //对应TS17,18,。。。。
223 2 user_e1[l + 32].backward_signal = buf >> 4;
224 2 //对应TS1,2,。。。。
225 2 buf = XBYTE[DS21554_ADDR[2] + RS1 + l];
226 2 //第三片DS21554的线路信号
227 2 user_e1[l + 80].backward_signal = buf & 0x0f;
228 2 //对应TS17,18,。。。。
229 2 user_e1[l + 64].backward_signal = buf >> 4;
230 2 //对应TS1,2,。。。。
231 2 buf = XBYTE[DS21554_ADDR[3] + RS1 + l];
232 2 //第四片DS21554的线路信号
233 2 user_e1[l + 112].backward_signal = buf & 0x0f;
234 2 //对应TS17,18,。。。。
235 2 user_e1[l + 96].backward_signal = buf >> 4;
C51 COMPILER V3.96, SN-83203013 C_MAIN 03/06/04 11:31:46 PAGE 5
236 2 //对应TS1,2,。。。。
237 2 }
238 1 }
239
240 void read_warn()//读取告警信息
241 {
242 1 unsigned char xdata buf,i;
243 1 for(i = 0;i < 4;i++)
244 1 {
245 2 buf = XBYTE[DS21554_ADDR[i] + SSR];
246 2 if((buf & 0x04) == 0x04)//帧失步
247 2 {
248 3 command(2,0,2,i,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
249 3 trk_e1_led = trk_e1_led | (1 << (4 + i));
250 3 if((time_route == i) && time_flag)
251 3 {
252 4 MS_MT9041 = 1;
253 4 REF_LED = 1;
254 4 }
255 3 }
256 2 else if((buf & 0x02) == 0x02) //复帧失步
257 2 {
258 3 command(2,0,3,i,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
259 3 trk_e1_led = trk_e1_led | (1 << (4 + i));
260 3 if((time_route == i) && time_flag)
261 3 {
262 4 MS_MT9041 = 1;
263 4 REF_LED = 1;
264 4 }
265 3 }
266 2 else
267 2 {
268 3 command(2,0,0,i,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
269 3 trk_e1_led = trk_e1_led & (~(1 << (4 + i)));
270 3 if((time_route == i) && time_flag)
271 3 {
272 4 MS_MT9041 = 0;
273 4 REF_LED = 0;
274 4 }
275 3 }
276 2 }
277 1 XBYTE[LED_E1_ADDR] = trk_e1_led;
278 1 }
279
280 void read_warn_1s()//读取告警信息
281 {
282 1 unsigned char xdata buf,i;
283 1 for(i = 0;i < 4;i++)
284 1 {
285 2 buf = XBYTE[DS21554_ADDR[i] + SSR];
286 2 if((buf & 0x04) == 0x04) //帧失步
287 2 {
288 3 trk_e1_led = trk_e1_led | (1 << (4 + i));
289 3 if((time_route == i) && time_flag)
290 3 {
291 4 MS_MT9041 = 1;
292 4 REF_LED = 1;
293 4 }
294 3 }
295 2 else if((buf & 0x02) == 0x02) //复帧失步
296 2 {
297 3 trk_e1_led = trk_e1_led | (1 << (4 + i));
C51 COMPILER V3.96, SN-83203013 C_MAIN 03/06/04 11:31:46 PAGE 6
298 3 if((time_route == i) && time_flag)
299 3 {
300 4 MS_MT9041 = 1;
301 4 REF_LED = 1;
302 4 }
303 3 }
304 2 else
305 2 {
306 3 trk_e1_led = trk_e1_led & (~(1 << (4 + i)));
307 3 if((time_route == i) && time_flag)
308 3 {
309 4 MS_MT9041 = 0;
310 4 REF_LED = 0;
311 4 }
312 3 }
313 2 }
314 1 XBYTE[LED_E1_ADDR] = trk_e1_led;
315 1 }
316
317 void noise_ctrl()//MT8924时隙音处理
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -