-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuart.lst
271 lines (259 loc) · 11.8 KB
/
uart.lst
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
C51 COMPILER V9.00 UART 05/25/2015 23:46:14 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.obj
COMPILER INVOKED BY: g:\Keil\C51\BIN\C51.EXE Source\uart.c INCDIR(..\电机控制) PRINT(.\uart.lst) OBJECT(uart.obj)
line level source
1 /*
2 版权声明:
3 WIFI机器人网·机器人创意工作室版权所有 www.wifi-robots.com
4 您可以任意修改本程序,并应用于自行研发的智能小车机器人及其他电子产品上,但是禁止用于商业牟利。
5 By WIFI机器人网·机器人创意工作室
6 */
7
8 #include "uart.h"
9 #include <stdio.h>
10 #include <string.h>
11 #include "motor.h"
12 #include "steer.h"
13 #include "mem.h"
14 #include "IR.h"
15 #include "timer.h"
16 #include "Soft_uart.h"
17
18 extern uint16 se_timer[8];
19 uint8 xdata buffer[3];
20 uint8 rec_flag=0; //等于0等待接受 等于1正在接受
21 extern uchar IR_Type;
22 extern uchar IR_Num;
23 extern uchar Cruising_Flag;
24
25 bit IS_CON;
26
27 void UART_init(void)
28 {
29 1 PCON |= 0x80; //使能波特率倍速位SMOD
30 1 SCON = 0x50; //8位数据,可变波特率
31 1 BRT = RELOAD_COUNT; //设定独立波特率发生器重装值
32 1 AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
33 1 AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
34 1 AUXR |= 0x10; //启动独立波特率发生器
35 1 ES = 1; //允许串口中断
36 1 EA = 1; //开总中断
37 1 TI = 1;
38 1 EX0=0;
39 1 EX1=0;
40 1 }
41
42 void UART_send_byte(uint8 byte)
43 {
44 1 ES = 0; //关串口中断
45 1 TI = 0; //清零串口发送完成中断请求标志
46 1 SBUF = byte;
47 1 while(TI ==0); //等待发送完成
48 1 TI = 1; //清零串口发送完成中断请求标志
49 1 ES = 1; //允许串口中断
50 1 }
51
52 void UART_send(uint8 * Buffer, uint16 Length)
53 {
54 1 while(Length != 0)
55 1 {
C51 COMPILER V9.00 UART 05/25/2015 23:46:14 PAGE 2
56 2 UART_send_byte(*Buffer);
57 2 Buffer++;
58 2 Length--;
59 2 }
60 1
61 1 }
62
63 void Communication_Decode(void)
64 {
65 1 if(buffer[0]==0x00)
66 1 {
67 2 switch(buffer[1])
68 2 {
69 3 case 0x01:
70 3 MOTOR_GO_FORWARD;
71 3 UART_send("FF000100FF",strlen("FF000100FF"));
72 3 return;
73 3 case 0x02:
74 3 MOTOR_GO_BACK;
75 3 UART_send("FF000200FF",strlen("FF000200FF"));
76 3 return;
77 3 case 0x03:
78 3 MOTOR_GO_LEFT;
79 3 UART_send("FF000300FF",strlen("FF000300FF"));
80 3 return;
81 3 case 0x04:
82 3 MOTOR_GO_RIGHT;
83 3 UART_send("FF000400FF",strlen("FF000400FF"));
84 3 return;
85 3 case 0x00:
86 3 MOTOR_GO_STOP;
87 3 UART_send("FF000000FF",strlen("FF000000FF"));
88 3 return;
89 3 default: return;
90 3 }
91 2 }
92 1 else if(buffer[0]==0x01)
93 1 {
94 2 if(buffer[2]>180)
95 2 return;
96 2 switch(buffer[1])
97 2 {
98 3 case 0x01:se_timer[0]=buffer[2]; return;
99 3 case 0x02:se_timer[1]=buffer[2]; return;
100 3 case 0x03:se_timer[2]=buffer[2]; return;
101 3 case 0x04:se_timer[3]=buffer[2]; return;
102 3 case 0x05:se_timer[4]=buffer[2]; return;
103 3 case 0x06:se_timer[5]=buffer[2]; return;
104 3 case 0x07:se_timer[6]=buffer[2]; return;
105 3 case 0x08:se_timer[7]=buffer[2]; return;
106 3 default : return;
107 3 }
108 2 }
109 1 else if(buffer[0] == 0x40) //机械臂动作组控制(向软串口发送指令)
110 1 {
111 2 INT8U Byte[5] = "";
112 2 switch(buffer[1])
113 2 {
114 3 case 0x01:
115 3 // sprintf(Tbuf1, "F410F");
116 3 // rs_send_byte('f');
117 3 //UART_send(Tbuf1, strlen(Tbuf1));
C51 COMPILER V9.00 UART 05/25/2015 23:46:14 PAGE 3
118 3
119 3 rs_UART_send("F410F");
120 3 UART_send("ss_F410F", strlen("ss_F410F"));
121 3 return;
122 3 case 0x02:
123 3 rs_UART_send("F420F");
124 3 UART_send("ss_F420F", strlen("ss_F410F"));
125 3 return;
126 3 case 0x00:
127 3 rs_UART_send("F400F");
128 3 UART_send("ss_F400F", strlen("ss_F410F"));
129 3 return;
130 3 default:
131 3 return;
132 3 }
133 2
134 2 }
135 1 else if(buffer[0] == 0x50) //遥控器红外接收(学习
136 1 {
137 2 if((buffer[1]<5)&&(buffer[2]<10))
138 2 {
139 3 IR_Type = buffer[1];
140 3 IR_Num = buffer[2];
141 3 IR_Rec();
142 3 }
143 2 return;
144 2 }
145 1 else if(buffer[0]==0x51) //遥控器红外发射(控制)
146 1 {
147 2 if((buffer[1]<5)&&(buffer[2]<10))
148 2 {
149 3 IR_Type = buffer[1];
150 3 IR_Num = buffer[2];
151 3 IR_Tra();
152 3 }
153 2 return;
154 2 }
155 1 else if(buffer[0]==0x13)//模式切换开关
156 1 {
157 2 switch(buffer[1])
158 2 {
159 3 case 0x01: Cruising_Flag = 0x01; break;//跟随
160 3 case 0x02: Cruising_Flag = 0x02; break;//巡线
161 3 case 0x03: Cruising_Flag = 0x03; break;//避障
162 3 case 0x04: Cruising_Flag = 0x04; break;//雷达避障
163 3 case 0x00:
164 3 {
165 4
166 4 if(buffer[2] == 0x00) //云台控制
167 4 {
168 5 IS_CON = 1;
169 5 UART_send("IS_CON1", strlen("IS_CON1"));
170 5 break; //正常模式
171 5 }
172 4 else if(buffer[2] == 0x01) //软串口初始 gokit控制
173 4 {
174 5 IS_CON = 0;
175 5 UART_send("IS_CON0", strlen("IS_CON0"));
176 5
177 5 TMOD &= 0x00;
178 5 AUXR &= 0X00;
179 5 IP &= 0x00; //定时器0中断优先级最高
C51 COMPILER V9.00 UART 05/25/2015 23:46:14 PAGE 4
180 5 TR0 = 0;
181 5 ET0 = 0;
182 5 initiate_soft_uart();
183 5 break; //正常模式
184 5 }
185 4 else
186 4 ;
187 4
188 4 Cruising_Flag = 0x00;
189 4
190 4 break;
191 4 }
192 3 default:Cruising_Flag = 0x00; break;//正常模式
193 3 }
194 2 }
195 1 else
196 1 {
197 2 return;
198 2 }
199 1 }
200
201 void UART_Interrupt_Receive(void) interrupt 4
202 {
203 1 static uint8 i;
204 1
205 1 if(RI==1)
206 1 {
207 2 RI = 0;
208 2 if(rec_flag==0)
209 2 {
210 3 if(SBUF==0xff)
211 3 {
212 4 rec_flag=1;
213 4 i=0;
214 4 }
215 3 }
216 2 else
217 2 {
218 3 if(SBUF==0xff)
219 3 {
220 4 rec_flag=0;
221 4 if(i==3)
222 4 {
223 5 Communication_Decode();
224 5 UART_init(); // 解决串口死机问题
225 5 }
226 4 i=0;
227 4 }
228 3 else
229 3 {
230 4 buffer[i]=SBUF;
231 4 i++;
232 4 }
233 3 }
234 2 }
235 1 else
236 1 {
237 2 TI = 0;
238 2 }
239 1
240 1 }
C51 COMPILER V9.00 UART 05/25/2015 23:46:14 PAGE 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 896 ----
CONSTANT SIZE = 121 ----
XDATA SIZE = 3 ----
PDATA SIZE = ---- ----
DATA SIZE = 2 5
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)