485.lst

来自「一个超全的仿真程序含C源码,包括1602LED显示,两位共阴数码管显示,ADC0」· LST 代码 · 共 299 行

LST
299
字号
C51 COMPILER V6.12  485                                                                    03/19/2008 09:25:24 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 485
OBJECT MODULE PLACED IN .\485.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\485.c DEBUG OBJECTEXTEND

stmt level    source

   1          #ifndef __485_C__
   2          #define __485_C__
   3          
   4          #include <AT89X51.H>
   5          #include <string.h>
   6           
   7          #define unsigned char uchar;
   8          #define unsigned int uint;
*** WARNING 317 IN LINE 8 OF .\485.c: redefinition of macro 'unsigned'
   9          
  10          /* 通信命令 */
  11          #define __ACTIVE_ 0x01  ;  // 主机询问从机是否存在
  12          #define __GETDATA_ 0x02;    // 主机发送读设备请求
  13          #define __OK_ 0x03 ;   // 从机应答
  14          #define __STATUS_ 0x04;    // 从机发送设备状态信息
  15          
  16          #define __MAXSIZE 0x08;    // 缓冲区长度
  17          
  18          
  19          #define __ERRLEN 12;    // 任何通信帧长度超过12则表示出错
  20          
  21          uchar; dev;    // 该字节用于保存本机设备号
  22          uchar; dbuf[__MAXSIZE];    // 该缓冲区用于保存设备状态信息
*** ERROR C141 IN LINE 22 OF .\485.C: syntax error near ';', expected ']'
  23          
  24          
  25          sbit M_DE = P1^0;    // 驱动器使能,1有效
  26          sbit M_RE = P1^1;    // 接收器使能,0有效
  27          
  28          void get_status();    // 调用该函数获得设备状态信息,函数代码未给出
  29          void send_data(uchar type, uchar len, uchar *buf);    // 发送数据帧
*** ERROR C141 IN LINE 29 OF .\485.C: syntax error near 'type', expected ')'
  30          bit recv_cmd(uchar *type);    // 接收主机命令,主机请求仅包含命令信息
*** ERROR C141 IN LINE 30 OF .\485.C: syntax error near '*', expected ')'
  31          void send_byte(uchar da);    // 该函数发送一帧数据中的一个字节,由send_data()函数调用
*** ERROR C141 IN LINE 31 OF .\485.C: syntax error near 'da', expected ')'
  32          
  33          void main()
  34          {
  35   1      	uchar type;
*** ERROR C141 IN LINE 35 OF .\485.C: syntax error near 'type'
*** ERROR C202 IN LINE 35 OF .\485.C: 'type': undefined identifier
  36   1      	uchar len;
*** ERROR C141 IN LINE 36 OF .\485.C: syntax error near 'len'
*** ERROR C202 IN LINE 36 OF .\485.C: 'len': undefined identifier
  37   1      	
  38   1      	/* 系统初始化 */
  39   1      	P1 = 0xff;    // 读取本机设备号
  40   1      	dev = (P1>>2);
  41   1      	TMOD = 0x20;	// 定时器T1使用工作方式2
  42   1      	TH1 = 250;    // 设置初值
  43   1      	TL1 = 250;
  44   1      	TR1 = 1;    // 开始计时
  45   1      	PCON = 0x80;    // SMOD = 1
  46   1      	SCON = 0x50;	// 工作方式1,波特率9600bps,允许接收
C51 COMPILER V6.12  485                                                                    03/19/2008 09:25:24 PAGE 2   

  47   1      	ES = 0;    // 关闭串口中断
  48   1      	IT0 = 0;    // 外部中断0使用电平触发模式
  49   1      	EX0 = 1;    // 开启外部中断0
  50   1      	EA = 1;    // 开启中断
  51   1      
  52   1      	/* 主程序流程 */
  53   1      	while(1)    // 主循环
  54   1      	{
  55   2      		if(recv_cmd(&type) == 0)    // 发生帧错误或帧地址与本机地址不符,丢弃当前帧后返回
*** ERROR C202 IN LINE 55 OF .\485.C: 'type': undefined identifier
  56   2      			continue;
  57   2      		switch(type)
*** ERROR C202 IN LINE 57 OF .\485.C: 'type': undefined identifier
  58   2      		{
  59   3      			case __ACTIVE_:    // 主机询问从机是否存在
*** ERROR C141 IN LINE 59 OF .\485.C: syntax error near ';'
*** ERROR C141 IN LINE 59 OF .\485.C: syntax error near ':'
  60   3      				send_data(__OK_, 0, dbuf);    // 发送应答信息,这里buf的内容并未用到
*** ERROR C141 IN LINE 60 OF .\485.C: syntax error near ';'
*** ERROR C141 IN LINE 60 OF .\485.C: syntax error near ','
*** ERROR C202 IN LINE 60 OF .\485.C: 'dbuf': undefined identifier
*** ERROR C141 IN LINE 60 OF .\485.C: syntax error near ')'
  61   3      				break;
  62   3      			case __GETDATA_:
*** ERROR C141 IN LINE 62 OF .\485.C: syntax error near ';'
*** ERROR C141 IN LINE 62 OF .\485.C: syntax error near ':'
  63   3      				len = strlen(dbuf);
  64   3      				send_data(__STATUS_, len, dbuf);    // 发送设备状态信息
*** ERROR C141 IN LINE 64 OF .\485.C: syntax error near ';'
*** ERROR C141 IN LINE 64 OF .\485.C: syntax error near ','
*** ERROR C202 IN LINE 64 OF .\485.C: 'len': undefined identifier
*** ERROR C141 IN LINE 64 OF .\485.C: syntax error near ')'
  65   3      				break;
  66   3      			default:
  67   3      				break;    // 命令类型错误,丢弃当前帧后返回
  68   3      		}
  69   2      	}
  70   1      }
  71          
  72          void READSTATUS() interrupt 0 using 1    // 产生外部中断0时表示设备状态发生改变,该函数使用寄存器组1
  73          {
  74   1      	get_status();    // 获得设备状态信息,并将其存入dbuf指向的存储区,数据最后一字节置0表示数据结束
  75   1      }
  76          
  77          /* 该函数接收一帧数据并进行检测,无论该帧是否错误,函数均会返回
  78           * 函数参数type保存接收到的命令字
  79           * 当接收到数据帧错误或其地址位不为0时(非主机发送帧),函数返回0,反之返回1
  80           */
  81          bit recv_cmd(uchar *type)
*** ERROR C141 IN LINE 81 OF .\485.C: syntax error near '*', expected ')'
  82          {
  83   1      	bit db = 0;    // 当接收到的上一个字节为0xdb时,该位置位
  84   1      	bit c0 = 0;    // 当接收到的上一个字节为0xc0时,该位置位
  85   1      	uchar data_buf[__ERRLEN];    // 保存接收到的帧
*** ERROR C141 IN LINE 85 OF .\485.C: syntax error near 'data_buf'
*** ERROR C141 IN LINE 85 OF .\485.C: syntax error near ';'
*** ERROR C141 IN LINE 85 OF .\485.C: syntax error near ']'
  86   1      	uchar tmp;
*** ERROR C141 IN LINE 86 OF .\485.C: syntax error near 'tmp'
*** ERROR C202 IN LINE 86 OF .\485.C: 'tmp': undefined identifier
  87   1      	uchar ecc = 0;
*** ERROR C141 IN LINE 87 OF .\485.C: syntax error near 'ecc'
C51 COMPILER V6.12  485                                                                    03/19/2008 09:25:24 PAGE 3   

*** ERROR C202 IN LINE 87 OF .\485.C: 'ecc': undefined identifier
  88   1      	uchar i;
*** ERROR C141 IN LINE 88 OF .\485.C: syntax error near 'i'
*** ERROR C202 IN LINE 88 OF .\485.C: 'i': undefined identifier
  89   1      	
  90   1      	M_DE = 0;    // 置发送禁止,接收允许
  91   1      	M_RE = 0;
  92   1      	
  93   1      	/* 接收一帧数据 */
  94   1      	i = 0;
*** ERROR C202 IN LINE 94 OF .\485.C: 'i': undefined identifier
  95   1      	while(!c0)    // 循环直至帧接收完毕
  96   1      	{
  97   2      		RI = 0;
  98   2      		while(!RI);
  99   2      		tmp = SBUF;
*** ERROR C202 IN LINE 99 OF .\485.C: 'tmp': undefined identifier
 100   2      		RI = 0;
 101   2      		if(db == 1)    // 接收到的上一个字节为0xdb
 102   2      		{
 103   3      			switch(tmp)
*** ERROR C202 IN LINE 103 OF .\485.C: 'tmp': undefined identifier
 104   3      			{
 105   4      				case 0xdd:
 106   4      					data_buf[i] = 0xdb;    // 0xdbdd表示0xdb
*** ERROR C202 IN LINE 106 OF .\485.C: 'i': undefined identifier
 107   4      					ecc = ecc^0xdb;
*** ERROR C202 IN LINE 107 OF .\485.C: 'ecc': undefined identifier
 108   4      					db = 0;
 109   4      					break;
 110   4      				case 0xdc
 111   4      					data_buf[i] = 0xc0;    // 0xdbdc表示0xc0
*** ERROR C141 IN LINE 111 OF .\485.C: syntax error near 'data_buf'
*** ERROR C202 IN LINE 111 OF .\485.C: 'i': undefined identifier
 112   4      					ecc = ecc^0xc0;
*** ERROR C202 IN LINE 112 OF .\485.C: 'ecc': undefined identifier
 113   4      					db = 0;
 114   4      					break;
 115   4      				default
 116   4      					return 0;    // 帧错误,返回
*** ERROR C141 IN LINE 116 OF .\485.C: syntax error near 'return', expected ':'
 117   4      			}
 118   3      			i++;
*** ERROR C202 IN LINE 118 OF .\485.C: 'i': undefined identifier
 119   3      		}
 120   2      		switch(tmp)    // 正常情况
*** ERROR C202 IN LINE 120 OF .\485.C: 'tmp': undefined identifier
 121   2      		{
 122   3      			case 0xc0:    // 帧结束
 123   3      				c0 = 1;
 124   3      				break;
 125   3      			case 0xdb:    // 检测到转义字符
 126   3      				db = 1;
 127   3      				break;
 128   3      			default:    // 普通数据
 129   3      				data_buf[i] = tmp;    // 保存数据
*** ERROR C202 IN LINE 129 OF .\485.C: 'i': undefined identifier
 130   3      				ecc = ecc^tmp;    // 计算校验字节
*** ERROR C202 IN LINE 130 OF .\485.C: 'ecc': undefined identifier
 131   3      				i++;
*** ERROR C202 IN LINE 131 OF .\485.C: 'i': undefined identifier
 132   3      		}
C51 COMPILER V6.12  485                                                                    03/19/2008 09:25:24 PAGE 4   

 133   2      		if(i == __ERRLEN)    // 帧超长,错误,返回
*** ERROR C202 IN LINE 133 OF .\485.C: 'i': undefined identifier
*** ERROR C141 IN LINE 133 OF .\485.C: syntax error near ';'
*** ERROR C141 IN LINE 133 OF .\485.C: syntax error near ')'
 134   2      			return 0;
 135   2      	}
 136   1      	/* 判断帧是否错误 */
 137   1      	if(i<4)    // 帧过短,错误,返回
*** ERROR C202 IN LINE 137 OF .\485.C: 'i': undefined identifier
 138   1      		return 0;
 139   1      	if(ecc != 0)    // 校验错误,返回
*** ERROR C202 IN LINE 139 OF .\485.C: 'ecc': undefined identifier
 140   1      		return 0;
 141   1      	if(data_buf[0] != dev)    // 非访问本机命令,错误,返回
*** ERROR C202 IN LINE 141 OF .\485.C: 'data_buf': undefined identifier
 142   1      		return 0;
 143   1      	*type = data_buf[1];    // 获得命令字
*** ERROR C202 IN LINE 143 OF .\485.C: 'type': undefined identifier
 144   1      	return 1;    // 函数成功返回
 145   1      }
 146          
 147          /* 该函数发送一帧数据帧,参数type为命令字、len为数据长度、buf为要发送的数据内容 */
 148          void send_data(uchar type, uchar len, uchar *buf)
*** ERROR C141 IN LINE 148 OF .\485.C: syntax error near 'type', expected ')'
 149          {
 150   1      	uchar i;
*** ERROR C141 IN LINE 150 OF .\485.C: syntax error near 'i'
*** ERROR C202 IN LINE 150 OF .\485.C: 'i': undefined identifier
 151   1      	uchar ecc = 0;    // 该字节用于保存校验字节
*** ERROR C141 IN LINE 151 OF .\485.C: syntax error near 'ecc'
*** ERROR C202 IN LINE 151 OF .\485.C: 'ecc': undefined identifier
 152   1      
 153   1      	M_DE = 1;    // 置发送允许,接收禁止
 154   1      	M_RE = 1;
 155   1      	
 156   1      	send_byte(dev);    // 发送本机地址
 157   1      	ecc = dev;
*** ERROR C202 IN LINE 157 OF .\485.C: 'ecc': undefined identifier
 158   1      	send_byte(type);    // 发送命令字
*** ERROR C202 IN LINE 158 OF .\485.C: 'type': undefined identifier
 159   1      	ecc = ecc^type;
*** ERROR C202 IN LINE 159 OF .\485.C: 'ecc': undefined identifier
 160   1      	send_byte(len);    // 发送长度
*** ERROR C202 IN LINE 160 OF .\485.C: 'len': undefined identifier
 161   1      	ecc = ecc^len;
*** ERROR C202 IN LINE 161 OF .\485.C: 'ecc': undefined identifier
 162   1      	for(i=0; i<len; i++)    // 发送数据
*** ERROR C202 IN LINE 162 OF .\485.C: 'i': undefined identifier
 163   1      	{
 164   2      		send_byte(*buf);
*** ERROR C202 IN LINE 164 OF .\485.C: 'buf': undefined identifier
 165   2      		ecc = ecc^(*buf);
*** ERROR C202 IN LINE 165 OF .\485.C: 'ecc': undefined identifier
 166   2      		buf++;
*** ERROR C202 IN LINE 166 OF .\485.C: 'buf': undefined identifier
 167   2      	}
 168   1      	send_byte(ecc);    // 发送校验字节
*** ERROR C202 IN LINE 168 OF .\485.C: 'ecc': undefined identifier
 169   1      	
 170   1      	TI = 0;    // 发送帧结束标志
 171   1      	SBUF = 0xc0;
 172   1      	while(!TI);
C51 COMPILER V6.12  485                                                                    03/19/2008 09:25:24 PAGE 5   

 173   1      	TI = 0;
 174   1      }
 175          
 176          /* 该函数发送一个数据字节,若该字节为0xdb,则发送0xdbdd,若该字节为0xc0则,发送0xdbdc */
 177          void send_byte(uchar da)
*** ERROR C141 IN LINE 177 OF .\485.C: syntax error near 'da', expected ')'
 178          {
 179   1      	switch(da)
*** ERROR C202 IN LINE 179 OF .\485.C: 'da': undefined identifier
 180   1      	{
 181   2      		case 0xdb:    // 字节为0xdb,发送0xdbdd
 182   2      			TI = 0;
 183   2      			SBUF = 0xdb;
 184   2      			while(!TI);
 185   2      			TI = 0;
 186   2      			SBUF = 0xdd;
 187   2      			while(!TI)
 188   2      			TI = 0;
 189   2      			break;
 190   2      		case 0xc0:    // 字节为0xc0,发送0xdbdc
 191   2      			TI = 0;
 192   2      			SBUF = 0xdb;
 193   2      			while(!TI);
 194   2      			TI = 0;
 195   2      			SBUF = 0xdc;
 196   2      			while(!TI)
 197   2      			TI = 0;
 198   2      			break;
 199   2      		default:    // 普通数据则直接发送
 200   2      			TI = 0;
 201   2      			SBUF = da;
*** ERROR C202 IN LINE 201 OF .\485.C: 'da': undefined identifier
 202   2      			while(!TI);
 203   2      			TI = 0;
 204   2      	}
 205   1      }
 206          
 207          #endif

C51 COMPILATION COMPLETE.  1 WARNING(S),  71 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?