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 + -
显示快捷键?