C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 1 C51 COMPILER V9.59.0.0, COMPILATION OF MODULE UART1 OBJECT MODULE PLACED IN ..\Output\Uart1.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\Apps\Uart1.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE INCDIR(..\F -WLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\Uart1.lst) OBJECT(..\Output\U -art1.obj) line level source 1 /********************************Copyright (c)**********************************\ 2 ** 3 ** (c) Copyright 2019, China, JS. 4 ** All Rights Reserved 5 ** 6 ** 7 **----------------------------------文件信息------------------------------------ 8 ** 文件名称: ttl_usart.c 9 ** 创建日期: 2022-05-11 10 ** 文档描述: ttl_usart 11 ** 12 **----------------------------------版本信息------------------------------------ 13 ** 版本代号: V0.1 14 ** 版本说明: 初始版本 15 ** 16 ********************************End of Head************************************/ 17 18 /* Includes ------------------------------------------------------------------*/ 19 20 /** 21 * @file uart.c 22 * @author Nations 23 * @version v1.0.0 24 * 25 * @copyright Copyright (c) 2022, Nations Technologies Inc. All rights reserved. 26 */ 27 28 #include 29 30 31 #include "SC_Init.h" //MCU Init header,Include all IC resource headers 32 #include "SC_it.h" 33 #include "..\Drivers\SCDriver_list.h" 34 #include "HeadFiles\SysFunVarDefine.h" 35 36 #include "Uart1.h" 37 #include "Motor.h" 38 39 //微秒延时 40 void DelayUs(unsigned int delay) 41 { 42 1 unsigned int i = 0, j = 0; 43 1 for(i = 0; i < delay; i++) 44 1 { 45 2 for(j = 0; j < 125; j++); 46 2 } 47 1 } 48 49 //毫秒延时 50 void DelayMs(unsigned int delay) 51 { 52 1 unsigned int i = 0; 53 1 for(i = 0; i < delay; i++) C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 2 54 1 { 55 2 DelayUs(1000); 56 2 } 57 1 } 58 59 #define HD_VER 0001 //硬件版本 60 #define SW_VER 0001 //软件版本 61 62 #define TTL_SEND_BUFF_LEN 60 //发送数据长度 63 #define TTL_RECEIVE_BUFF_LEN 60 //接收数据长度 64 65 //---------------------------------------------------------------- 66 //uart1用于接收usb转ttl的串口 67 //---------------------------------------------------------------- 68 69 //存放发送的数据内容 70 uint8_t xdata motor_data[10]; 71 72 //发送buff 73 uint8_t xdata ttl_send_len = 0; 74 uint8_t xdata ttl_send_buff[TTL_SEND_BUFF_LEN] = {0}; 75 76 //接收buff 77 uint8_t xdata ttl_receive_len = 0; 78 uint8_t xdata ttl_receive_buff[TTL_RECEIVE_BUFF_LEN] = {0}; 79 80 //接收超时 81 uint8_t xdata ttl_receive_flag = 0; 82 uint8_t xdata ttl_receive_cnt = 0; 83 uint8_t xdata ttl_receive_interval = 0; 84 85 #define DATA_LEN TTL_RECEIVE_BUFF_LEN //一般数据长度 86 #define UART_ORDER_SOF 0x05 //起始字 87 #define UART_ORDER_END 0x1B //结束字 88 #define FIXED_LEN 0x0B //固定长度 //取消RW 89 90 uint16_t xdata SUR_DEVICE_ADDR = 0x00A1; //PC //0x00A1; //设备 91 uint16_t xdata OBJ_DEVICE_ADDR = 0x00B1; //主板 //0x00B1; //PC群发 FFFF 0000 92 93 uint8_t xdata order_flag = 0; 94 unsigned int xdata checksum = 0, re_status = 0, rec_len = 0, data_len = 0, shouldaccept = 0; 95 96 //单独发送 97 void UART1_SendData(uint8_t dat) 98 { 99 1 SSI_UART1_SendData8(dat); 100 1 } 101 102 //发送数据 103 void UART1_Send_Char(uint8_t dat) 104 { 105 1 SSI_UART1_SendData8(dat); 106 1 } 107 108 //初始化 109 void InitUart_Data(void) 110 { 111 1 order_flag = 0; 112 1 rec_len = 0; 113 1 re_status = 0; 114 1 shouldaccept = 0; 115 1 C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 3 116 1 ttl_receive_flag = 0; 117 1 ttl_receive_cnt = 0; 118 1 119 1 checksum = 0; 120 1 121 1 for(data_len = 0; data_len < DATA_LEN; data_len++) 122 1 { 123 2 ttl_receive_buff[data_len] = 0; 124 2 } 125 1 126 1 data_len = 0; 127 1 128 1 // UART_Send_Char(0xdd); 129 1 } 130 131 132 133 /* Private function prototypes -----------------------------------------------*/ 134 /* Private functions ---------------------------------------------------------*/ 135 //---------------------------------------------------------------- 136 //接收串口1 137 //---------------------------------------------------------------- 138 /**************************************************************************************************** 139 * @brief Download a file via serial port 140 * @param None 141 * @retval None 142 **************************************************************************************************/ 143 void start_ttl_receive_timer(uint32_t ms) 144 { 145 1 if(ms == 0) 146 1 { 147 2 return; 148 2 } 149 1 150 1 ttl_receive_flag = 1; 151 1 ttl_receive_cnt = 0; 152 1 ttl_receive_interval = ms; 153 1 } 154 155 /**************************************************************************************************** 156 * @brief Upload a file via serial port. 157 * @param None 158 * @retval None 159 **************************************************************************************************/ 160 void over_ttl_receive_timer(void) 161 { 162 1 ttl_receive_flag = 0; 163 1 ttl_receive_cnt = 0; 164 1 ttl_receive_interval = 0; 165 1 166 1 InitUart_Data(); 167 1 168 1 // UART2_Send_Char(0xed); 169 1 } 170 171 /**************************************************************************************************** 172 * @brief Display the Main Menu on HyperTerminal 173 * @param None 174 * @retval None 175 **************************************************************************************************/ 176 void clear_ttl_receive_timer(void) 177 { C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 4 178 1 uint16_t i = 0; 179 1 ttl_receive_len = 0; 180 1 ttl_receive_flag = 0; 181 1 ttl_receive_cnt = 0; 182 1 ttl_receive_interval = 0; 183 1 184 1 for(i = 0; i < TTL_RECEIVE_BUFF_LEN; i++) 185 1 { 186 2 ttl_receive_buff[i] = 0; 187 2 } 188 1 } 189 190 //返回串口屏应答是否接收完成的结果 191 //0:没超时 1:超时 192 uint8_t judge_ttl_receive_timer(void) 193 { 194 1 if(ttl_receive_flag == 2) 195 1 { 196 2 return 1; 197 2 } 198 1 else 199 1 { 200 2 return 0; 201 2 } 202 1 } 203 204 /**************************************************************************************************** 205 * @brief Display the Main Menu on HyperTerminal 206 * @param None 207 * @retval None 208 **************************************************************************************************/ 209 //放在大循环中的计时器里 210 void process_ttl_receive_timer(void) 211 { 212 1 if(ttl_receive_flag == 1) 213 1 { 214 2 ttl_receive_cnt++; 215 2 } 216 1 217 1 if((ttl_receive_interval > 0) && (ttl_receive_cnt >= ttl_receive_interval)) 218 1 { 219 2 over_ttl_receive_timer(); 220 2 } 221 1 } 222 223 #define TTL_OVER_TIME 10 224 /**************************************************************************************************** 225 * @brief Display the Main Menu on HyperTerminal 226 * @param None 227 * @retval None 228 **************************************************************************************************/ 229 //放串口中断内,接收数据 230 void receive_ttl_data(uint8_t rx_data) 231 { 232 1 //不能超过数组的最大长度 233 1 if(ttl_receive_len < TTL_RECEIVE_BUFF_LEN) 234 1 { 235 2 //开始计时 236 2 start_ttl_receive_timer(TTL_OVER_TIME); 237 2 238 2 //串口接收数据分析 239 2 Do_Receive_Uart_For_Module(rx_data); C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 5 240 2 } 241 1 else //超过上限则抛弃后面的数据 242 1 { 243 2 //超时处理 244 2 over_ttl_receive_timer(); 245 2 246 2 InitUart_Data(); 247 2 248 2 //UART_Send_Char(0xcc); 249 2 } 250 1 } 251 252 #define CRC_PRESET 0xFFFF 253 #define CRC_POLYNOM 0x4204 254 /*--------------------------------------------------------------------------- 255 调用方式:unsigned int ModbusCRC16(unsigned char *data_value, unsigned char length) 256 函数说明:CRC校验 257 ---------------------------------------------------------------------------*/ 258 unsigned int ModbusCRC16(unsigned char *data_value, unsigned char length) 259 { 260 1 unsigned int crc_value = CRC_PRESET; 261 1 unsigned char i; 262 1 data_value++; 263 1 while(length-- != 0) 264 1 {//ModbusCRC16(PData, Num + FIXED_LEN - 3); 265 2 for(i = 0x01; i != 0; i <<= 1) 266 2 { 267 3 if((crc_value & 0x0001) != 0) 268 3 { 269 4 crc_value >>= 1; 270 4 crc_value ^= CRC_POLYNOM; 271 4 } 272 3 else 273 3 { 274 4 crc_value >>= 1; 275 4 } 276 3 277 3 if((*data_value & i) != 0) 278 3 { 279 4 crc_value ^= CRC_POLYNOM; 280 4 } 281 3 } 282 2 data_value++; 283 2 } 284 1 return(crc_value); 285 1 } 286 287 /*--------------------------------------------------------------------------- 288 调用方式:unsigned int VerfiyRC(unsigned char *data_value, unsigned char length) 289 函数说明:异或校验 290 除了头尾固定,不校验外,其他的校验 291 -----------------------------------------------------------------------------*/ 292 unsigned char VerfiyRC(unsigned char data_value[], unsigned char length) //不用异或校验,用crc校验 293 { 294 1 unsigned char i; 295 1 unsigned char V_b = data_value[1]; 296 1 297 1 for(i = 0x00; i < length; i++) 298 1 { 299 2 //异或校验 300 2 V_b ^= data_value[i]; 301 2 } C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 6 302 1 303 1 return(V_b); 304 1 } 305 306 //发送延时 307 void Uart_Send_Delay(unsigned int delay) 308 { 309 1 unsigned int i = 0, j = 0; 310 1 311 1 for(i = 0; i < delay; i++) 312 1 { 313 2 for(j = 0; j < 125; j++); 314 2 } 315 1 } 316 317 //校验 + 0X1B 318 #define VERFIY_TYPE 0 319 320 /* 321 SOF: 1个字节 0x05 起始字节 322 Len: 2个字节 长度 323 Fou_adr: 2个字节 源地址 324 Com_adr: 2个字节 目标地址,0ff为广播地址 325 Cmd16: 2个字节 命令字 326 Request-data: N字节 数据 327 XOR: 2个字节 校验 328 END: 0x1B 结束字节 329 */ 330 331 //发送数据 332 void send_set_resp(unsigned int OrderNum, unsigned int addr, unsigned char Num, unsigned char sData[]) 333 { 334 1 unsigned int xdata xor_data = 0; 335 1 unsigned char xdata PData[TTL_SEND_BUFF_LEN]; 336 1 unsigned char xdata i = 0; 337 1 338 1 PData[0] = UART_ORDER_SOF; //第一个字节 339 1 PData[1] = (Num + FIXED_LEN) / 0x100; //长度 高8位 340 1 PData[2] = (Num + FIXED_LEN) % 0x100; //长度 低8位 341 1 PData[3] = (addr >> 8) & 0xff; //源地址 342 1 PData[4] = addr & 0xff; //源地址 343 1 PData[5] = (SUR_DEVICE_ADDR >> 8) & 0xff; //目标地址 344 1 PData[6] = SUR_DEVICE_ADDR & 0xff; //目标地址 345 1 PData[7] = (OrderNum >> 8) & 0xff; //命令字 -1 346 1 PData[8] = OrderNum & 0xff; //命令字 -2 347 1 348 1 // PData[6] = RW_Flag; //读写标志 349 1 350 1 for(i = 0; i < Num; i++) //发送数据 351 1 { 352 2 PData[FIXED_LEN - 2 + i] = sData[i]; //数据 353 2 } 354 1 355 1 //校验 356 1 if(VERFIY_TYPE) //异或校验 + 末尾字节 2字节 357 1 { 358 2 xor_data = VerfiyRC(PData, Num + FIXED_LEN - 2); 359 2 PData[FIXED_LEN + Num - 2] = xor_data; 360 2 PData[FIXED_LEN + Num - 1] = 00; 361 2 } 362 1 else //CRC校验 2字节 363 1 { C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 7 364 2 xor_data = ModbusCRC16(PData, Num + FIXED_LEN - 3); 365 2 PData[FIXED_LEN + Num - 2] = (xor_data) & 0xff; 366 2 PData[FIXED_LEN + Num - 1] = (xor_data >> 8) & 0xff; 367 2 } 368 1 369 1 PData[FIXED_LEN + Num] = UART_ORDER_END; // 末尾字节 370 1 371 1 //全部发送 372 1 for(i = 0; i < (Num + FIXED_LEN + 1); i++) //一次性发送所有数据 373 1 { 374 2 UART1_Send_Char(PData[i]); 375 2 //增加延时 376 2 Uart_Send_Delay(50); 377 2 } 378 1 } 379 380 381 382 //分析地址是否为本地址 383 uint8_t Check_Resive_Addr(uint16_t addr) 384 { 385 1 //确定是否为接收地址 386 1 if((OBJ_DEVICE_ADDR == addr) || (0xFFFF == addr) || (0x0000 == addr) || (0x00B1 == addr)) 387 1 { 388 2 return 1; 389 2 } 390 1 else 391 1 { 392 2 InitUart_Data(); //2清数据 393 2 return 0; 394 2 } 395 1 } 396 397 398 //接收数据判断(放置串口接收数据内) 399 void Do_Receive_Uart_For_Module(unsigned char ch) 400 { 401 1 switch(re_status) 402 1 { 403 2 case 0 : //0x05 1字节 起始字 404 2 { 405 3 if(ch == UART_ORDER_SOF) 406 3 { 407 4 rec_len = 0; 408 4 ttl_receive_buff[rec_len] = ch; 409 4 re_status = 1; 410 4 shouldaccept = 0; 411 4 // UART2_Send_Char(0xaa); 412 4 } 413 3 } 414 2 break; 415 2 case 1: //长度 2字节 416 2 { 417 3 rec_len++; 418 3 ttl_receive_buff[rec_len] = ch; 419 3 420 3 if(rec_len >= 2) 421 3 { 422 4 re_status = 2; 423 4 shouldaccept = ttl_receive_buff[1] * 0x100 + ttl_receive_buff[2]; 424 4 425 4 if(shouldaccept >= TTL_RECEIVE_BUFF_LEN - 1) C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 8 426 4 { 427 5 InitUart_Data(); 428 5 return; 429 5 } 430 4 } 431 3 } 432 2 break; 433 2 case 2: //命令字 2个字节 05 00 0B 00 C1 00 A1 F0 01 87 1B 434 2 { 435 3 rec_len++; 436 3 437 3 if(rec_len >= TTL_RECEIVE_BUFF_LEN - 1) 438 3 { 439 4 InitUart_Data(); 440 4 return; 441 4 } 442 3 443 3 ttl_receive_buff[rec_len] = ch; //接收 444 3 445 3 if(rec_len >= shouldaccept) //判断是否接收完成 446 3 { 447 4 // uint8_t i = 0; 448 4 // UART2_Send_Char(0x30); 449 4 // UART2_Send_Char(rec_len); 450 4 // UART2_Send_Char(shouldaccept); 451 4 // UART2_Send_Char(FIXED_LEN - 1); 452 4 453 4 // UART2_Send_Char(rec_len); 454 4 // for( i = 0;i < shouldaccept;i++) UART2_Send_Char(ttl_receive_buff[i]); 455 4 456 4 //等待处理分析,至少要大于固定长度 457 4 // if(rec_len >= FIXED_LEN - 1) 458 4 // { 459 4 //判断接收目标地址是否是自己 460 4 // int adr = ttl_receive_buff[3]; 461 4 // adr = adr << 8; 462 4 // adr |= ttl_receive_buff[4]; 463 4 int adr = ttl_receive_buff[5]; 464 4 adr = adr << 8; 465 4 adr |= ttl_receive_buff[6]; 466 4 467 4 //UART2_TxByte(0xAA); 468 4 //UART2_TxByte(ttl_receive_buff[3]); 469 4 //UART2_TxByte(ttl_receive_buff[4]); 470 4 // 471 4 if(Check_Resive_Addr(adr)) 472 4 { 473 5 //命令字 474 5 unsigned int order = 0; 475 5 order = ttl_receive_buff[7]; 476 5 order = order << 8; 477 5 order += ttl_receive_buff[8]; 478 5 479 5 // //目标地址 480 5 // OBJ_DEVICE_ADDR = ttl_receive_buff[3]; 481 5 // OBJ_DEVICE_ADDR <<= 8; 482 5 // OBJ_DEVICE_ADDR += ttl_receive_buff[4]; 483 5 484 5 //UART2_Send_Char(order / 0x100); 485 5 //UART2_Send_Char(order % 0x100); 486 5 //UART2_TxByte(0xBB); 487 5 //UART2_TxByte(ttl_receive_buff[7]); C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 9 488 5 //UART2_TxByte(ttl_receive_buff[8]); 489 5 490 5 switch(order) 491 5 { 492 6 //=================== =================================================== 493 6 //设备接收数据 494 6 //====================================================================== 495 6 case 0xF001 : //解析数据 496 6 { 497 7 order_flag = 1; 498 7 } 499 6 break; 500 6 501 6 case 0xF0C1 : //设置设备加密信息 502 6 { 503 7 order_flag = 2; 504 7 } 505 6 break; 506 6 507 6 //====================================================================== 508 6 //设备信息 509 6 //====================================================================== 510 6 case 0xF111 : //控制参数 511 6 { 512 7 order_flag = 3; 513 7 // UART2_Send_Char(0x33); 514 7 } 515 6 break; 516 6 517 6 //====================================================================== 518 6 //设备信息 519 6 //====================================================================== 520 6 case 0xF112 : //读 状态与温度 521 6 { 522 7 order_flag = 4; 523 7 } 524 6 break; 525 6 case 0xF102 : //读 状态与温度 526 6 { 527 7 order_flag = 4; 528 7 } 529 6 break; 530 6 531 6 //====================================================================== 532 6 // 533 6 //====================================================================== 534 6 default : 535 6 { 536 7 InitUart_Data(); 537 7 } 538 6 break; 539 6 } 540 5 } 541 4 else 542 4 { 543 5 InitUart_Data(); 544 5 return; 545 5 } 546 4 } 547 3 // } 548 3 } 549 2 break; C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 10 550 2 551 2 default : 552 2 InitUart_Data(); 553 2 break; 554 2 } 555 1 } 556 557 //数据长度 558 uint8_t Get_Data_Len(void) 559 { 560 1 uint16_t Re_Len = 0; 561 1 Re_Len = (ttl_receive_buff[1] * 0x100 + ttl_receive_buff[2]) - FIXED_LEN; 562 1 return Re_Len; 563 1 } 564 565 //检查校验 566 unsigned char Check_VerfiyData(void) 567 { 568 1 return 1; //调试期间,不用验证 569 1 570 1 if(VERFIY_TYPE) //异或校验 + 末尾字节 571 1 { 572 2 unsigned char v_A = 0; 573 2 unsigned char v_B = 0; 574 2 v_A = ttl_receive_buff[shouldaccept]; 575 2 v_B = VerfiyRC(ttl_receive_buff, shouldaccept - 2); 576 2 577 2 if(v_A == v_B) //数据的完整性 578 2 { 579 3 //结尾数据相同 580 3 if(ttl_receive_buff[shouldaccept + 1] == UART_ORDER_END) 581 3 { 582 4 583 4 } 584 3 else 585 3 { 586 4 return 0; 587 4 } 588 3 } 589 2 else 590 2 { 591 3 return 0; 592 3 } 593 2 } 594 1 else //判断CRC校验 595 1 { 596 2 unsigned int CRC16 = 0; 597 2 unsigned int Get_CRC16 = 0; 598 2 CRC16 = ttl_receive_buff[shouldaccept]; 599 2 CRC16 = CRC16 << 8; 600 2 CRC16 += ttl_receive_buff[shouldaccept - 1]; 601 2 602 2 Get_CRC16 = ModbusCRC16(ttl_receive_buff, shouldaccept - 2); 603 2 604 2 if(CRC16 == Get_CRC16) //数据的完整性 605 2 { 606 3 607 3 } 608 2 else 609 2 { 610 3 InitUart_Data(); 611 3 return 0; C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 11 612 3 } 613 2 } 614 1 615 1 return 1; 616 1 } 617 618 619 //数据接收分析(放置大循环内) 620 void Deal_Uart_Data_For_Module(void) 621 { 622 1 if(order_flag) //有接收的指令 623 1 { 624 2 //校验 625 2 if(Check_VerfiyData() == 1) //测试 626 2 { 627 3 switch(order_flag) 628 3 { 629 4 //-------------------------------------------------------------------- 630 4 // 631 4 //-------------------------------------------------------------------- 632 4 case 1 : //数据解析 633 4 { 634 5 uint8_t xdata i = 0; //临时变量 635 5 uint8_t xdata len = 0; //长度 636 5 uint8_t xdata temp[DATA_LEN]; 637 5 638 5 //发送标志 639 5 send_flag = 0; 640 5 641 5 //数据长度 642 5 len = Get_Data_Len(); 643 5 644 5 //解析数据 645 5 for(i = 0; i < len; i++) 646 5 { 647 6 temp[i] = ttl_receive_buff[i + FIXED_LEN - 2]; 648 6 } 649 5 650 5 //角行程 、直行程 651 5 Travle_Flag = temp[0]; //0 直 1 角 652 5 Motor_Run = temp[1]; //0 停止 1 运行 2 运行到起始点 3 运行到结束点 653 5 Run_Mode = temp[2]; //0 点动 1 方案一 2 方案二 654 5 655 5 Run_Step = temp[3]; //电机运行多少圈为一个步长 656 5 Run_Step <<= 8; 657 5 Run_Step += temp[4]; 658 5 659 5 Run_Inter = temp[5]; //电机运行间隔时长 660 5 Run_Inter <<= 8; 661 5 Run_Inter += temp[6]; 662 5 663 5 Run_Stop = temp[7]; //到“结束点”后,停止时间 664 5 Run_Stop <<= 8; 665 5 Run_Stop += temp[8]; 666 5 667 5 ClrRunmotorStep();//清除电机标记 668 5 669 5 } 670 4 break; 671 4 672 4 case 2 : // 673 4 { C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 12 674 5 uint8_t i = 0; 675 5 uint8_t len = 0; 676 5 uint8_t temp[DATA_LEN]; 677 5 678 5 send_set_resp(0xF0C1, OBJ_DEVICE_ADDR, len, temp); 679 5 680 5 } 681 4 break; 682 4 683 4 //-------------------------------------------------------------------- 684 4 //LED 控制 685 4 //-------------------------------------------------------------------- 686 4 case 3 : //F111 05 00 0C 00 A1 00 C1 F1 01 05 03 50 87 1B 687 4 { 688 5 u8 addr = 0; 689 5 addr = ttl_receive_buff[FIXED_LEN - 2]; 690 5 if(addr == ((SUR_DEVICE_ADDR & 0xf0) == 0xC0)) 691 5 { 692 6 693 6 } 694 5 } 695 4 break; 696 4 697 4 //====================================================================== 698 4 // 699 4 //====================================================================== 700 4 case 4 : // 701 4 { 702 5 703 5 704 5 } 705 4 break; 706 4 707 4 //-------------------------------------------------------------------- 708 4 //实时信息 709 4 //-------------------------------------------------------------------- 710 4 case 5 : // 711 4 { 712 5 uint8_t len = 0; 713 5 uint8_t temp[DATA_LEN]; 714 5 715 5 716 5 717 5 temp[0] = (SUR_DEVICE_ADDR >> 8) & 0xff; 718 5 temp[1] = (SUR_DEVICE_ADDR >> 0) & 0xff; 719 5 720 5 // //版本号 4 721 5 temp[2] = HD_VER >> 8; //HD_VER 0101 //硬件版本号 722 5 temp[3] = HD_VER & 0xff; 723 5 724 5 temp[4] = SW_VER >> 8; //SW_VER 0101 //软件版本号 725 5 temp[5] = SW_VER & 0xff; 726 5 727 5 len = 6; 728 5 send_set_resp(0xF113, OBJ_DEVICE_ADDR, len, temp); 729 5 } 730 4 break; 731 4 case 6 : // 设置 地址 + 版本号 F1D3 05 00 0D 00 A1 00 00 F1 D3 00 C1 07 A9 1B 732 4 { 733 5 734 5 uint8_t i = 0; 735 5 uint8_t len = 0; C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 13 736 5 uint8_t temp[DATA_LEN]; 737 5 738 5 //数据长度 739 5 len = Get_Data_Len(); 740 5 741 5 for(i = 0; i < len; i++) 742 5 { 743 6 temp[i] = ttl_receive_buff[i + FIXED_LEN - 2]; 744 6 } 745 5 746 5 747 5 send_set_resp(0xF1C3, OBJ_DEVICE_ADDR, len, temp); 748 5 } 749 4 break; 750 4 case 7 : //更新程序 751 4 { 752 5 753 5 } 754 4 break; 755 4 756 4 //-------------------------------------------------------------------- 757 4 //设备信息 758 4 //-------------------------------------------------------------------- 759 4 case 10 : //F115 05 00 0A 00 C1 00 A1 F1 05 50 87 1B 760 4 { 761 5 762 5 763 5 } 764 4 break; 765 4 766 4 767 4 default : 768 4 { 769 5 770 5 } 771 4 break; 772 4 } 773 3 } 774 2 775 2 //清空数据 776 2 InitUart_Data(); 777 2 } 778 1 } 779 780 *** WARNING C294 IN LINE 358 OF ..\Apps\Uart1.c: unreachable code *** WARNING C294 IN LINE 572 OF ..\Apps\Uart1.c: unreachable code *** WARNING C294 IN LINE 596 OF ..\Apps\Uart1.c: unreachable code MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 1870 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = 150 154 PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- EDATA SIZE = ---- ---- HDATA SIZE = ---- ---- XDATA CONST SIZE = ---- ---- FAR CONST SIZE = ---- ---- C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 14 END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 3 WARNING(S), 0 ERROR(S)