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

📄 c_hdlc.lst

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