📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 10/18/2008 19:47:34 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <AT89X52.H>
2 #include <string.h>
3
4 sbit sousel = P1^7;
5 sbit ch0 = P1^6;
6 sbit ch1 = P1^5;
7 sbit ch2 = P1^4;
8 sbit ch3 = P1^3;
9 sbit ch4 = P1^2;
10 sbit ch5 = P1^1;
11 sbit ch6 = P1^0;
12 sbit ch7 = P0^0;
13 sbit ch8 = P0^1;
14 sbit ch9 = P0^2;
15 sbit ch10 = P0^3;
16 sbit jt = P0^4;
17 sbit rl0 = P0^5;
18 sbit rl1 = P0^6;
19 sbit rl2 = P0^7;
20 sbit rl3 = P2^0;
21 sbit rl4 = P2^1;
22 sbit rl10 = P2^2;
23 sbit rl9 = P2^3;
24 sbit rl8 = P2^4;
25 sbit rl7 = P2^5;
26 sbit rl6 = P2^6;
27 sbit rl5 = P2^7;
28 sbit sou = P3^6;
29 sbit s42 = P3^7;
30
31
32 #define INBUF_LEN 9 //数据长度
33
34 unsigned char rec[INBUF_LEN], swstr[6];
35
36 //unsigned char checksum;
37 unsigned char strleng, count;
38 bit rightflag, same = 0;
39 unsigned char ss[] = "GuoChao Soft co, V1.1!";
40 code unsigned mac[6] = {0x00, 0x03, 0x0d, 0x3f, 0x60, 0x28};
41 code unsigned char pos[6] = {3, 1, 5, 2, 4, 0};
42 code unsigned char swap[6] = {0x24, 0x15, 0x02, 0x13, 0x06, 0x21};
43 bit read_flag= 0 ;
44 bit incept = 0;
45 void init_serialcomm( void )
46 {
47 1 SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
48 1 TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
49 1 PCON |= 0x80 ; //SMOD=1;
50 1 TH1 = 0xFA ; //Baud:9600 fosc=11.0592MHz
51 1 IE |= 0x90 ; //Enable Serial Interrupt
52 1 TR1 = 1 ; // timer 1 run
53 1 // TI=1;
54 1 }
55
C51 COMPILER V8.08 MAIN 10/18/2008 19:47:34 PAGE 2
56 //向串口发送一个字符
57 void send_char_com( unsigned char ch)
58 {
59 1 SBUF=ch;
60 1 while (TI== 0 );
61 1 TI= 0 ;
62 1 }
63
64 /*/向串口输出一个字符串(非中断方式)
65 void ComOutStr(unsigned char *Str)
66 {
67 while(*Str != 0x00) //判断是否到了字符串的尾部
68 {
69 SBUF = *Str; //输出字符
70 while(!TI); //空语句判断字符是否发完
71 TI = 0; //清TI
72 Str++; //字符串指针加一
73 }
74 }*/
75
76 //向串口发送一个字符串,strlen为该字符串长度
77 void send_string_com( unsigned char *str, unsigned int strlen)
78 {
79 1 unsigned char k = 0 ;
80 1 do
81 1 {
82 2 send_char_com(*(str + k));
83 2 k++;
84 2 } while (k < strlen);
85 1 }
86
87 //串口接收中断函数
88 void serial () interrupt 4 using 3
89 {
90 1 unsigned char i;
91 1 if (RI)
92 1 {
93 2 unsigned char ch;
94 2 RI = 0 ;
95 2 ch=SBUF;
96 2 if (ch == 0x55)
97 2 {
98 3 incept = 1;
99 3 count = 0;
100 3 for(i = 0; i < 9; i ++)
101 3 rec[i] = 0;
102 3 }
103 2 if(incept)
104 2 {
105 3 rec[count]=ch;
106 3 count++;
107 3 if (count == 2)
108 3 {
109 4 if ((rec[1] == 0x01) | (rec[1] == 0x02))
110 4 {
111 5 if (rec[1] == 0x01) //验证串
112 5 strleng = 9;
113 5 if (rec[1] == 0x02) //命令字
114 5 strleng = 5;
115 5 }
116 4 else
117 4 {
C51 COMPILER V8.08 MAIN 10/18/2008 19:47:34 PAGE 3
118 5 incept = 0; //第二字节无效,恢复接收状态
119 5 count = 0;
120 5 }
121 4 }
122 3 if (count >= strleng) //收齐规定长度
123 3 {
124 4 incept = 0;
125 4 rightflag = 1;
126 4 }
127 3 }
128 2 }
129 1 }
130
131 void delay(unsigned char x)
132 {
133 1 while(x --);
134 1 }
135
136 //解析收到有效串
137 void decode(void)
138 {
139 1 unsigned char i, tem, chansel = 0xff;
140 1
141 1 same = 0;
142 1 if(rightflag & (rec[1] & 0x03 == rec[1]) & (rec[2] & 0x03 == rec[2])) //第2第3字节是否合法(整条数据是
-否合法)
143 1 {
144 2 if (strleng == 9) //验证串,做编码
145 2 {
146 3 for(i = 0; i < 6; i ++)
147 3 {
148 4 swstr[i] = rec[pos[i] + 3];
149 4 }
150 3 swstr[0] = ~swstr[0]; //第0位取反
151 3 tem = swstr[1] & 0x1f; //第1右5
152 3 swstr[1] >>= 5;
153 3 swstr[1] |= tem << 3;
154 3 tem = swstr[2] & 0xb0; //第2位左2
155 3 swstr[2] <<= 2;
156 3 swstr[2] |= tem >> 4;
157 3 tem = swstr[3] & 0x07; //第3位右3
158 3 swstr[3] >>= 3;
159 3 swstr[3] |= tem << 5;
160 3 tem = swstr[4] & 0x3f; //第4位右6
161 3 swstr[4] >>= 6;
162 3 swstr[4] |= tem << 2;
163 3 swstr[5] = ~swstr[5];
164 3 send_string_com(swstr, 6);
165 3 }
166 2 if (strleng == 4) //命令串,解析
167 2 {
168 3 for (i = 0; i < 5; i ++)
169 3 {
170 4 if (swstr[i] != rec[i])
171 4 {same = 1;}
172 4 swstr[i] = rec[i];
173 4 }
174 3 if (same)
175 3 {
176 4 //通道0
177 4 if ((rec[3] & 0x80) == rec[3])
178 4 {
C51 COMPILER V8.08 MAIN 10/18/2008 19:47:34 PAGE 4
179 5 ch0 = 0;
180 5 rl0 = 0;
181 5 }
182 4 else
183 4 {
184 5 ch0 = 1;
185 5 rl0 = 1;
186 5 }
187 4 //通道1
188 4 if ((rec[3] & 0x40) == rec[3])
189 4 {
190 5 ch1 = 0;
191 5 rl1 = 0;
192 5 }
193 4 else
194 4 {
195 5 ch1 = 1;
196 5 rl1 = 1;
197 5 }
198 4 //通道2
199 4 if ((rec[3] & 0x20) == rec[3])
200 4 {
201 5 ch2 = 0;
202 5 rl2 = 0;
203 5 }
204 4 else
205 4 {
206 5 ch2 = 1;
207 5 rl2 = 1;
208 5 }
209 4 //通道3
210 4 if ((rec[3] & 0x10) == rec[3])
211 4 {
212 5 ch3 = 0;
213 5 rl3 = 0;
214 5 }
215 4 else
216 4 {
217 5 ch3 = 1;
218 5 rl3 = 1;
219 5 }
220 4 //通道4
221 4 if ((rec[3] & 0x08) == rec[3])
222 4 {
223 5 ch5 = 0;
224 5 rl5 = 0;
225 5 }
226 4 else
227 4 {
228 5 ch0 = 5;
229 5 rl0 = 5;
230 5 }
231 4 //通道6
232 4 if ((rec[3] & 0x04) == rec[3])
233 4 {
234 5 ch6 = 0;
235 5 rl6 = 0;
236 5 }
237 4 else
238 4 {
239 5 ch6 = 1;
240 5 rl6 = 1;
C51 COMPILER V8.08 MAIN 10/18/2008 19:47:34 PAGE 5
241 5 }
242 4 //通道7
243 4 if ((rec[3] & 0x02) == rec[3])
244 4 {
245 5 ch7 = 0;
246 5 rl7 = 0;
247 5 }
248 4 else
249 4 {
250 5 ch7 = 1;
251 5 rl7 = 1;
252 5 }
253 4 //通道8
254 4 if ((rec[4] & 0x80) == rec[4])
255 4 {
256 5 ch8 = 0;
257 5 rl8 = 0;
258 5 }
259 4 else
260 4 {
261 5 ch8 = 1;
262 5 rl8 = 1;
263 5 }
264 4 //通道9
265 4 if ((rec[4] & 0x40) == rec[4])
266 4 {
267 5 ch9 = 0;
268 5 rl9 = 0;
269 5 }
270 4 else
271 4 {
272 5 ch9 = 1;
273 5 rl9 = 1;
274 5 }
275 4 //通道10
276 4 if ((rec[4] & 0x20) == rec[4])
277 4 {
278 5 ch10 = 0;
279 5 rl10 = 0;
280 5 }
281 4 else
282 4 {
283 5 ch10 = 1;
284 5 rl10 = 1;
285 5 }
286 4 //监听通道
287 4 if ((rec[4] & 0x10) == rec[4])
288 4 {
289 5 jt = 0;
290 5 // rl0 = 0;
291 5 }
292 4 else
293 4 {
294 5 jt = 1;
295 5 // rl0 = 1;
296 5 }
297 4 //音源选择通道1音频
298 4 if ((rec[2] & 0x02) == rec[2])
299 4 {
300 5 sousel = 0;
301 5 sou = 0;
302 5 }
C51 COMPILER V8.08 MAIN 10/18/2008 19:47:34 PAGE 6
303 4 else
304 4 {
305 5 sou = 1;
306 5 }
307 4 //音源选择通道1TTS
308 4 if ((rec[2] & 0x01) == rec[2])
309 4 {
310 5 sousel = 1;
311 5 s42 = 0;
312 5 }
313 4 else
314 4 {
315 5 s42 = 1;
316 5 }
317 4 }
318 3
319 3 }
320 2 rightflag = 0;
321 2 }
322 1 }
323
324
325 void main(void)
326 {
327 1 unsigned char i, tem;
328 1 for(i = 0; i < 22; i ++)
329 1 {
330 2 rec[i] = i;
331 2 }
332 1 for(i = 0; i < 22; i ++)
333 1 {
334 2 swstr[i] = rec[pos[i]];
335 2 }
336 1 init_serialcomm(); //初始化串口
337 1 send_string_com(ss, 22);
338 1 while ( 1 )
339 1 {
340 2 decode();
341 2 }
342 1 }
*** WARNING C280 IN LINE 327 OF MAIN.C: 'tem': unreferenced local variable
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 696 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 40 9
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -