📄 comtest1.lst
字号:
C51 COMPILER V7.50 COMTEST1 05/05/2009 13:09:15 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE COMTEST1
OBJECT MODULE PLACED IN comtest1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE comtest1.c BROWSE INCDIR(C:\Keil\C51\INC\) DEBUG OBJECTEXTEND
line level source
1 //PC读MCU指令结构:(中断方式,ASCII码表示)
2 //帧: 帧头标志|帧类型|器件地址|启始地址|长度n|效验和|帧尾标志
3 //值: 'n' 'y'| 'r' | 0x01 | x | x | x |0x13 0x10
4 //字节数: 2 | 1 | 1 | 1 | 1 | 1 | 2
5 //求和:
6
7
8 /////////////////////////////////////////////////////////////////////
9 //公司名称:***
10 //模 块 名:protocol.c
11 //创 建 者:牛毅
12 //修 改 者:
13 //功能描述:中断方式:本程序为mcu的串口通讯提供(贞结构)函数接口,包括具体协议部分
14 //其他说明:只提供对AT89c51具体硬件的可靠访问接口
15 //版 本:1.0
16 //信 息:QQ 75011221 C51BBS匿名:niuyi
17 /////////////////////////////////////////////////////////////////////
18 #include <comtest1.h>
19 //public 变量
20 unsigned char databuf[FIELD_MAXBUF],errframe_cnt;
21
22 //函数
23
24 /////////////////////////////////////////////////////////////////////
25 //函 数 名:send()
26 //功能描述:向串口发送一个字符
27 //函数说明:
28 //调用函数:
29 //全局变量:
30 //输 入:ch-要发送的ASCII字符
31 //返 回:无
32 //设 计 者:牛毅
33 //修 改 者:
34 //版 本:
35 /////////////////////////////////////////////////////////////////////
36 void send(unsigned char ch)
37 {
38 1 SBUF=ch;
39 1 while(TI==0);
40 1 TI=0;
41 1 }
42
43 /////////////////////////////////////////////////////////////////////
44 //函 数 名:receive()
45 //功能描述:从串口接收一个字符
46 //函数说明:
47 //调用函数:
48 //全局变量:
49 //输 入:无
50 //返 回:一个ASCII字符
51 //设 计 者:牛毅
52 //修 改 者:
53 //版 本:
54 /////////////////////////////////////////////////////////////////////
55 unsigned char receive(void)
C51 COMPILER V7.50 COMTEST1 05/05/2009 13:09:15 PAGE 2
56 {
57 1 while(RI==0);
58 1 RI=0;
59 1 return SBUF;
60 1 }
61
62 /////////////////////////////////////////////////////////////////////
63 //函 数 名:CharToHex()
64 //功能描述:把ASCII字符转换为16进制
65 //函数说明:
66 //调用函数:
67 //全局变量:
68 //输 入:ASCII字符
69 //返 回:16进制
70 //设 计 者:牛毅
71 //修 改 者:
72 //版 本:
73 /////////////////////////////////////////////////////////////////////
74 /*
75 unsigned char CharToHex(unsigned char bChar)
76 {
77 if((bChar>=0x30)&&(bChar<=0x39))
78 bChar -= 0x30;
79 else if((bChar>=0x41)&&(bChar<=0x46))//大写字母
80 bChar -= 0x37;
81 else if((bChar>=0x61)&&(bChar<=0x66))//小写字母
82 bChar -= 0x57;
83 else bChar = 0xff;
84 return bChar;
85 }
86
87 /////////////////////////////////////////////////////////////////////
88 //函 数 名:HexToChar()
89 //功能描述:把16进制转换为ASCII字符
90 //函数说明:
91 //调用函数:
92 //全局变量:
93 //输 入:16进制
94 //返 回:ASCII字符
95 //设 计 者:牛毅
96 //修 改 者:
97 //版 本:
98 /////////////////////////////////////////////////////////////////////
99 unsigned char HexToChar(unsigned char bHex)
100 {
101 if((bHex>=0)&&(bHex<=9))
102 bHex += 0x30;
103 else if((bHex>=10)&&(bHex<=15))//大写字母
104 bHex += 0x37;
105 else bHex = 0xff;
106 return bHex;
107 }
108 */
109 /////////////////////////////////////////////////////////////////////
110 //函 数 名:com_int()
111 //功能描述:初始化串口
112 //函数说明:默认其他参数为[baud_rate],n,8,1
113 //调用函数:
114 //全局变量:
115 //输 入:baud_rate 波特率
116 //返 回:无
117 //设 计 者:牛毅
C51 COMPILER V7.50 COMTEST1 05/05/2009 13:09:15 PAGE 3
118 //修 改 者:
119 //版 本:
120 /////////////////////////////////////////////////////////////////////
121 void com_init(unsigned int baud_rate)
122 {
123 1
124 1 EA=1;
125 1 ES=1;//ET1=1;
126 1 SCON = 0x50; /* 0x52;//SCON */
127 1 TMOD = 0x20; /*0x20;// TMOD */
128 1 TCON = 0x60; /*0x60;// TCON */
129 1 PCON=PCON&0x7f;
130 1
131 1
132 1 switch(baud_rate)
133 1 { //波特率设置
134 2 case 1200:
135 2 TL1=0xe8;
136 2 TH1=0Xe8;
137 2 break;//1200
138 2 case 2400:
139 2 TL1=0xf4;
140 2 TH1=0Xf4;
141 2 break;//2400
142 2 case 4800:
143 2 TL1=0xfa;
144 2 TH1=0Xfa;
145 2 break;//4800
146 2 case 9600:
147 2 TL1=0xfd;
148 2 TH1=0Xfd;
149 2 break;//9600
150 2 case 19200:
151 2 PCON=PCON|0x80;
152 2 TL1=0xfd;
153 2 TH1=0Xfd;
154 2 break;//19200
155 2 case 38400:
156 2 PCON=PCON|0x80;
157 2 TL1=0xfe;
158 2 TH1=0Xfe;
159 2 break;//38400
160 2 default:
161 2 TL1=0xfd;
162 2 TH1=0Xfd;
163 2 break;//9600
164 2 }
165 1 }
166 /////////////////////////////////////////////////////////////////////
167 //函 数 名:resend_frame()
168 //功能描述:发送重发帧
169 //函数说明:通知PC重发
170 //调用函数:
171 //全局变量:
172 //输 入:无
173 //返 回:无
174 //设 计 者:牛毅
175 //修 改 者:
176 //版 本:
177 /////////////////////////////////////////////////////////////////////
178
179 /////////////////////////////////////////////////////////////////////
C51 COMPILER V7.50 COMTEST1 05/05/2009 13:09:15 PAGE 4
180 //函 数 名:quit_frame()
181 //功能描述:发送放弃帧
182 //函数说明:通知PC放弃通讯
183 //调用函数:
184 //全局变量:
185 //输 入:无
186 //返 回:无
187 //设 计 者:牛毅
188 //修 改 者:
189 //版 本:
190 /////////////////////////////////////////////////////////////////////
191
192 /////////////////////////////////////////////////////////////////////
193 //函 数 名:com_int()
194 //功能描述:串口中断
195 //函数说明:
196 //调用函数:
197 //全局变量:
198 //输 入:无
199 //返 回:无
200 //设 计 者:牛毅
201 //修 改 者:
202 //版 本:
203 /////////////////////////////////////////////////////////////////////
204 void com_int()interrupt 4
205 {
206 1 unsigned char i,clen;
207 1 clen=3;
208 1 databuf[0]=receive();
209 1 if(databuf[0]==0x7)
210 1 {
211 2 for(i=1;i<clen;i++)
212 2 {
213 3 databuf[i]=receive();
214 3
215 3 }
216 2
217 2 }
218 1 }
219
220 /////////////////////////////////////////////////////////////////
221
222 //主函数
223
224 /////////////////////////////////////////////////////////////////
225
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 170 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 49 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -