📄 uart.lst
字号:
146 4 case CMD_DATA_FLAG:
147 4 COMMInIndex++;
148 4 COMMInBuff[COMMInIndex] = ch;
149 4 if(COMMInIndex == CMD_DATA_NUM)
150 4 COMMFlag = CMD_END_FLAG;
151 4 //Uart_SendChar(COMMInIndex);
152 4 break;
153 4 case CMD_RESET_FLAG:
154 4 COMMInIndex++;
155 4 COMMInBuff[COMMInIndex] = ch;
156 4 if(COMMInIndex == CMD_RESET_NUM)
157 4 COMMFlag = CMD_END_FLAG;
158 4 //Uart_SendChar(COMMInIndex);
159 4 break;
160 4 case CMD_END_FLAG:
161 4 //Uart_SendChar(0xf);
162 4 break;
163 4 default:
164 4 COMMFlag = CMD_NO_FLAG;
165 4 COMMInLenght = 0;
166 4 COMMInIndex = 0;
167 4 COMMInBuff[COMMInIndex] = 0x0;
168 4 bFrameSt = 0;
169 4 //Uart_SendChar(',');
170 4 break;
171 4 }
172 3 }
173 2 ES = 1;
174 2 }//end of RI
175 1 }
176
177 //串口处理程序
178 void Uart_Do(void)
C51 COMPILER V8.02 UART 10/01/2007 00:33:27 PAGE 4
179 {
180 1 unsigned char i;
181 1
182 1 unsigned char COMMOutLenght; //
183 1 unsigned char COMMOutBuff[5]; //返回buffer
184 1
185 1 if(COMMFlag == CMD_END_FLAG)
186 1 {
187 2 //sum
188 2 COMMInSum = 0;
189 2 for(i=0;i<(COMMInIndex-1);i++)
190 2 COMMInSum += COMMInBuff[i];
191 2
192 2 if(COMMInSum == COMMInBuff[(COMMInLenght-1)])
193 2 {
194 3 //addr
195 3 if(COMMInBuff[0] == MY485ADDR)//data
196 3 {
197 4 if(COMMInBuff[1] == DATA_SEND_CMD)//send acq data 0x53
198 4 {
199 5 RUNflag = RUN_ACQ_FLAG;
200 5
201 5 COMMOutLenght = 5;//5 data len
202 5 COMMOutBuff[0] = Val_Mytime>>8;//time
203 5 COMMOutBuff[1] = Val_Mytime;
204 5 COMMOutBuff[2] = Val_ad>>8;//AD
205 5 COMMOutBuff[3] = Val_ad;
206 5 COMMOutBuff[4] = Val_Mystatus;//故障码
207 5 Uart_SendFrame(MY485ADDR, COMMOutBuff, COMMOutLenght);
208 5 }
209 4 else if(COMMInBuff[1] == DATA_RECV_CMD)//接收后的回应 0x52
210 4 {
211 5 RUNflag = RUN_ACT_FLAG;
212 5
213 5 Val_Actdata = COMMInBuff[2];//执行 data
214 5 Val_Actdata = (Val_Actdata << 8) + COMMInBuff[3];
215 5 Val_Actdir = COMMInBuff[4];//方向,R和L
216 5
217 5
218 5 //执行程序(电机)
219 5 if(Val_Actdata <= 0){
220 6 PWM_stop();
221 6 DAMP_R = 1; //1 off //0 on
222 6 DAMP_L = 1;
223 6 }
224 5 else{
225 6 PWM_stop();
226 6 PWM_changfreq(Val_Actdata);
227 6 if(Val_Actdir == 'L'){//左转 0x4C
228 7 PWM_DIR = 1;
229 7 DAMP_R = 1;
230 7 DAMP_L = 0;
231 7 }
232 6 else{ //右转'R'和默认 0x52
233 7 PWM_DIR = 0;
234 7 DAMP_L = 1;
235 7 DAMP_R = 0;
236 7 }
237 6 PWM_run();
238 6 }
239 5
240 5 COMMOutLenght = 5;//5 data len
C51 COMPILER V8.02 UART 10/01/2007 00:33:27 PAGE 5
241 5 COMMOutBuff[0] = Val_Mytime>>8;//time
242 5 COMMOutBuff[1] = Val_Mytime;
243 5 COMMOutBuff[2] = Val_Actdata>>8;//AD
244 5 COMMOutBuff[3] = Val_Actdata;
245 5 COMMOutBuff[4] = Val_Mystatus;//故障码
246 5 Uart_SendFrame(MY485ADDR, COMMOutBuff, COMMOutLenght);
247 5 }
248 4 }
249 3 else if(COMMInBuff[0] == BG485ADDR)//广播地址
250 3 {
251 4 Val_Uptime = COMMInBuff[2];//time
252 4 Val_Uptime = (Val_Uptime << 8) + COMMInBuff[3];
253 4
254 4 Val_Mytime = Val_Uptime;
255 4 RUNflag = RUN_RESET_FLAG;
256 4 //Uart_SendChar('1');
257 4 }
258 3 else{//addr不对,丢弃,重新来
259 4
260 4 //if(RUNflag == RUN_NO_FLAG)
261 4 // RUNflag = RUN_NO_FLAG;
262 4 //LED_ERR = 1;
263 4 //Uart_SendChar(0xfc);
264 4 }
265 3 }
266 2 else{//sum不对,丢弃,重新来
267 3
268 3 ///RUNflag = RUN_NO_FLAG;
269 3 LED_ERR = 1;
270 3 //Uart_SendChar(0xfe);
271 3 }
272 2
273 2 COMMFlag = CMD_NO_FLAG;
274 2 COMMInLenght = 0;
275 2 COMMInIndex = 0;
276 2 COMMInSum = 0;
277 2 COMMInBuff[COMMInIndex] = 0x0;
278 2 bFrameSt = 0;
279 2
280 2 }//end of CMD_END_FLAG
281 1
282 1
283 1 }
284
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 566 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 12
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -