⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atmega16l_uart.lis

📁 电梯楼层采集器代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02F6           ; //发送数据
 02F6           ; #pragma interrupt_handler Uart0_tx_isr:14 
 02F6           ; void Uart0_tx_isr(void) 
 02F6           ; { 
 02F6                   .dbline 395
 02F6           ;   unsigned char tmp;
 02F6           ;   static unsigned char Status;
 02F6           ;   static unsigned int CRC,Count;
 02F6           ;   static unsigned char *p_uart;
 02F6           ;   struct StructOfProtocol *p_buf;
 02F6           ;   max485_on();
 02F6 959A              sbi 0x12,5
 02F8                   .dbline 396
 02F8           ;   switch(Status)
 02F8 40910700          lds R20,L35
 02FC 5527              clr R21
 02FE 4030              cpi R20,0
 0300 4507              cpc R20,R21
 0302 C9F0              breq L42
 0304           X27:
 0304 4130              cpi R20,1
 0306 E0E0              ldi R30,0
 0308 5E07              cpc R21,R30
 030A 01F1              breq L43
 030C           X28:
 030C 4230              cpi R20,2
 030E E0E0              ldi R30,0
 0310 5E07              cpc R21,R30
 0312 09F4              brne X37
 0314 32C0              xjmp L46
 0316           X37:
 0316           X29:
 0316 4330              cpi R20,3
 0318 E0E0              ldi R30,0
 031A 5E07              cpc R21,R30
 031C 09F4              brne X38
 031E 64C0              xjmp L49
 0320           X38:
 0320           X30:
 0320 4430              cpi R20,4
 0322 E0E0              ldi R30,0
 0324 5E07              cpc R21,R30
 0326 09F4              brne X39
 0328 80C0              xjmp L52
 032A           X39:
 032A           X31:
 032A 4530              cpi R20,5
 032C E0E0              ldi R30,0
 032E 5E07              cpc R21,R30
 0330 09F4              brne X40
 0332 88C0              xjmp L53
 0334           X40:
 0334           X32:
 0334 92C0              xjmp L39
 0336           L42:
 0336                   .dbline 399
 0336           ;   {
 0336           ;      case 0:
 0336           ;          Count = 1;
 0336 81E0              ldi R24,1
 0338 90E0              ldi R25,0
 033A 90930B00          sts L37+1,R25
 033E 80930A00          sts L37,R24
 0342                   .dbline 400
 0342           ;          Status++;
 0342 80910700          lds R24,L35
 0346 8F5F              subi R24,255    ; addi 1
 0348 80930700          sts L35,R24
 034C           L43:
 034C                   .dbline 402
 034C           ;        case 1:                                        /*同步码发送*/
 034C           ;          UDR = BOOT_CODE;             /*发送同步码*/  
 034C 8EEF              ldi R24,254
 034E 8CB9              out 0xc,R24
 0350                   .dbline 403
 0350           ;          if(++Count>=2) Status++;/*发送2 byte同步码*/
 0350 80910A00          lds R24,L37
 0354 90910B00          lds R25,L37+1
 0358 0196              adiw R24,1
 035A 1C01              movw R2,R24
 035C 30920B00          sts L37+1,R3
 0360 20920A00          sts L37,R2
 0364 8230              cpi R24,2
 0366 E0E0              ldi R30,0
 0368 9E07              cpc R25,R30
 036A 08F4              brsh X41
 036C 7FC0              xjmp L40
 036E           X41:
 036E           X33:
 036E                   .dbline 403
 036E 80910700          lds R24,L35
 0372 8F5F              subi R24,255    ; addi 1
 0374 80930700          sts L35,R24
 0378                   .dbline 404
 0378           ;          break;
 0378 79C0              xjmp L40
 037A           L46:
 037A                   .dbline 406
 037A           ;      case 2:
 037A           ;          UDR = DEVICE_NUMBER;
 037A 82E0              ldi R24,2
 037C 8CB9              out 0xc,R24
 037E                   .dbline 407
 037E           ;          *p_uart = *Buffer485;
 037E 20900000          lds R2,_Buffer485
 0382 E0910C00          lds R30,L38
 0386 F0910D00          lds R31,L38+1
 038A 2082              std z+0,R2
 038C                   .dbline 408
 038C           ;          p_buf = (struct StructOfProtocol *)Buffer485;
 038C 40E0              ldi R20,<_Buffer485
 038E 50E0              ldi R21,>_Buffer485
 0390                   .dbline 409
 0390           ;        Count = p_buf->Length;
 0390 FA01              movw R30,R20
 0392 2180              ldd R2,z+1
 0394 3280              ldd R3,z+2
 0396 30920B00          sts L37+1,R3
 039A 20920A00          sts L37,R2
 039E                   .dbline 410
 039E           ;        if (Count && Count <= (256 - 8)) /*包长度检查*/
 039E 2220              tst R2
 03A0 11F4              brne X34
 03A2 3320              tst R3
 03A4 E9F0              breq L47
 03A6           X34:
 03A6 88EF              ldi R24,248
 03A8 90E0              ldi R25,0
 03AA 8215              cp R24,R2
 03AC 9305              cpc R25,R3
 03AE C0F0              brlo L47
 03B0           X35:
 03B0                   .dbline 411
 03B0           ;        {
 03B0                   .dbline 412
 03B0           ;          p_uart = Buffer485;              /*初始化数据发送指针*/
 03B0 80E0              ldi R24,<_Buffer485
 03B2 90E0              ldi R25,>_Buffer485
 03B4 90930D00          sts L38+1,R25
 03B8 80930C00          sts L38,R24
 03BC                   .dbline 413
 03BC           ;          CRC = 0xffff;                    /*初始化校验码*/
 03BC 8FEF              ldi R24,65535
 03BE 9FEF              ldi R25,255
 03C0 90930900          sts L36+1,R25
 03C4 80930800          sts L36,R24
 03C8                   .dbline 414
 03C8           ;          Count += 3;
 03C8 C101              movw R24,R2
 03CA 0396              adiw R24,3
 03CC 90930B00          sts L37+1,R25
 03D0 80930A00          sts L37,R24
 03D4                   .dbline 415
 03D4           ;          Status++;
 03D4 80910700          lds R24,L35
 03D8 8F5F              subi R24,255    ; addi 1
 03DA 80930700          sts L35,R24
 03DE                   .dbline 416
 03DE           ;        }
 03DE 46C0              xjmp L40
 03E0           L47:
 03E0                   .dbline 418
 03E0           ;        else                               /*包长度异常*/
 03E0           ;          {
 03E0                   .dbline 419
 03E0           ;            Status = 0;                      /*清状态标志*/
 03E0 2224              clr R2
 03E2 20920700          sts L35,R2
 03E6                   .dbline 420
 03E6           ;          }
 03E6                   .dbline 421
 03E6           ;        break;
 03E6 42C0              xjmp L40
 03E8           L49:
 03E8                   .dbline 423
 03E8           ;      case 3:                               /*数据包发送*/
 03E8           ;        tmp = *p_uart++;                    /*取发送数据*/
 03E8 E0910C00          lds R30,L38
 03EC F0910D00          lds R31,L38+1
 03F0 A190              ld R10,Z+
 03F2 F0930D00          sts L38+1,R31
 03F6 E0930C00          sts L38,R30
 03FA                   .dbline 424
 03FA           ;        UDR = tmp;                          /*发送数据*/
 03FA ACB8              out 0xc,R10
 03FC                   .dbline 425
 03FC           ;        CRC16(&CRC,tmp);                    /*数据校验*/
 03FC 2A2D              mov R18,R10
 03FE 00E0              ldi R16,<L36
 0400 10E0              ldi R17,>L36
 0402 FEDD              xcall _CRC16
 0404                   .dbline 426
 0404           ;        if (--Count == 0) Status++;     /*数据包发送完毕*/
 0404 40910A00          lds R20,L37
 0408 50910B00          lds R21,L37+1
 040C 4150              subi R20,1
 040E 5040              sbci R21,0
 0410 50930B00          sts L37+1,R21
 0414 40930A00          sts L37,R20
 0418 4030              cpi R20,0
 041A 4507              cpc R20,R21
 041C 39F5              brne L40
 041E           X36:
 041E                   .dbline 426
 041E 80910700          lds R24,L35
 0422 8F5F              subi R24,255    ; addi 1
 0424 80930700          sts L35,R24
 0428                   .dbline 427
 0428           ;        break;
 0428 21C0              xjmp L40
 042A           L52:
 042A                   .dbline 429
 042A           ;        case 4:                            /*高位校验码发送*/
 042A           ;        UDR = CRC >> 8;
 042A 20900800          lds R2,L36
 042E 30900900          lds R3,L36+1
 0432 232C              mov R2,R3
 0434 3324              clr R3
 0436 2CB8              out 0xc,R2
 0438                   .dbline 430
 0438           ;        Status++;
 0438 80910700          lds R24,L35
 043C 8F5F              subi R24,255    ; addi 1
 043E 80930700          sts L35,R24
 0442                   .dbline 431
 0442           ;        break;
 0442 14C0              xjmp L40
 0444           L53:
 0444                   .dbline 433
 0444           ;      case 5:                            /*低位校验码发送*/
 0444           ;        UDR = CRC;
 0444 20900800          lds R2,L36
 0448 30900900          lds R3,L36+1
 044C 2CB8              out 0xc,R2
 044E                   .dbline 434
 044E           ;        Status++;
 044E 80910700          lds R24,L35
 0452 8F5F              subi R24,255    ; addi 1
 0454 80930700          sts L35,R24
 0458                   .dbline 435
 0458           ;        break;
 0458 09C0              xjmp L40
 045A           L39:
 045A                   .dbline 437
 045A           ;      default:                          /*结束发送*/
 045A           ;        Status = Count = 0;
 045A 2224              clr R2
 045C 3324              clr R3
 045E 30920B00          sts L37+1,R3
 0462 20920A00          sts L37,R2
 0466 20920700          sts L35,R2
 046A                   .dbline 438
 046A           ;          max485_off();
 046A 9598              cbi 0x12,5
 046C                   .dbline 439
 046C           ;        break;
 046C           L40:
 046C                   .dbline -2
 046C           L34:
 046C                   .dbline 0 ; func end
 046C 0E940000          xcall pop_xgset300C
 0470 0990              ld R0,y+
 0472 0FBE              out 0x3f,R0
 0474 F991              ld R31,y+
 0476 E991              ld R30,y+
 0478 B991              ld R27,y+
 047A A991              ld R26,y+
 047C 9991              ld R25,y+
 047E 8991              ld R24,y+
 0480 3991              ld R19,y+
 0482 2991              ld R18,y+
 0484 1991              ld R17,y+
 0486 0991              ld R16,y+
 0488 9990              ld R9,y+
 048A 8990              ld R8,y+
 048C 7990              ld R7,y+
 048E 6990              ld R6,y+
 0490 5990              ld R5,y+
 0492 4990              ld R4,y+
 0494 3990              ld R3,y+
 0496 2990              ld R2,y+
 0498 1990              ld R1,y+
 049A 0990              ld R0,y+
 049C 1895              reti
 049E                   .dbsym r p_buf 20 pS[StructOfProtocol]
 049E                   .dbsym r tmp 10 c
 049E                   .dbend
 049E           ;   }
 049E           ; } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -