⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_main.lst

📁 这是电信语音聊天设备的源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -