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

📄 main.lis

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 04B8 82E0              ldi R24,2
 04BA 90E0              ldi R25,0
 04BC 9B87              std y+11,R25
 04BE 8A87              std y+10,R24
 04C0                   .dbline 363
 04C0           ;               msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
 04C0 81E1              ldi R24,17
 04C2 80930800          sts _msg_buffer,R24
 04C6                   .dbline 364
 04C6           ;               msg_buffer[1] = STATUS_CMD_OK;          
 04C6 2224              clr R2
 04C8 20920900          sts _msg_buffer+1,R2
 04CC                   .dbline 365
 04CC           ;       }
 04CC 5DC5              rjmp L110
 04CE           L109:
 04CE                   .dbline 369
 04CE           ;       //////////////////////////////////////
 04CE           ;       //CMD_CHIP_ERASE_ISP
 04CE           ;       //////////////////////////////////////
 04CE           ;       else if(cmd==CMD_CHIP_ERASE_ISP)
 04CE 8C85              ldd R24,y+12
 04D0 8231              cpi R24,18
 04D2 39F5              brne L112
 04D4                   .dbline 370
 04D4           ;       {
 04D4                   .dbline 371
 04D4           ;               spi_transfer_8(msg_buffer[3]);
 04D4 00910B00          lds R16,_msg_buffer+3
 04D8 00D0              rcall _spi_transfer_8
 04DA                   .dbline 372
 04DA           ;               spi_transfer_8(msg_buffer[4]);
 04DA 00910C00          lds R16,_msg_buffer+4
 04DE 00D0              rcall _spi_transfer_8
 04E0                   .dbline 373
 04E0           ;               spi_transfer_8(msg_buffer[5]);
 04E0 00910D00          lds R16,_msg_buffer+5
 04E4 00D0              rcall _spi_transfer_8
 04E6                   .dbline 374
 04E6           ;               spi_transfer_8(msg_buffer[6]);
 04E6 00910E00          lds R16,_msg_buffer+6
 04EA 00D0              rcall _spi_transfer_8
 04EC                   .dbline 378
 04EC           ;               
 04EC           ;               //Newer AVR's seems to have a busy bit
 04EC           ;               //cant test this because I don't have any of these new chips
 04EC           ;               if(msg_buffer[2]==0)
 04EC 20900A00          lds R2,_msg_buffer+2
 04F0 2220              tst R2
 04F2 29F4              brne L123
 04F4                   .dbline 379
 04F4           ;               {
 04F4                   .dbline 380
 04F4           ;                       wait_ms(msg_buffer[1]);
 04F4 00910900          lds R16,_msg_buffer+1
 04F8 1127              clr R17
 04FA 00D0              rcall _wait_ms
 04FC                   .dbline 381
 04FC           ;               }
 04FC 07C0              rjmp L119
 04FE           X5:
 04FE                   .dbline 383
 04FE           ;               else //if(msg_buffer[2]==1)
 04FE           ;               {
 04FE           L122:
 04FE                   .dbline 384
 04FE           L123:
 04FE                   .dbline 384
 04FE           ;                       while(spi_transfer_32(0xF0000000)&1);
 04FE 00E0              ldi R16,0
 0500 10E0              ldi R17,0
 0502 20E0              ldi R18,0
 0504 30EF              ldi R19,240
 0506 00D0              rcall _spi_transfer_32
 0508 00FD              sbrc R16,0
 050A F9CF              rjmp L122
 050C                   .dbline 385
 050C           ;               }               
 050C           L119:
 050C                   .dbline 387
 050C           ;                               
 050C           ;               num_bytes = 2;
 050C 82E0              ldi R24,2
 050E 90E0              ldi R25,0
 0510 9B87              std y+11,R25
 0512 8A87              std y+10,R24
 0514                   .dbline 388
 0514           ;               msg_buffer[0] = CMD_CHIP_ERASE_ISP;
 0514 82E1              ldi R24,18
 0516 80930800          sts _msg_buffer,R24
 051A                   .dbline 389
 051A           ;               msg_buffer[1] = STATUS_CMD_OK;          
 051A 2224              clr R2
 051C 20920900          sts _msg_buffer+1,R2
 0520                   .dbline 390
 0520           ;       }
 0520 33C5              rjmp L113
 0522           L112:
 0522                   .dbline 394
 0522           ;       //////////////////////////////////////
 0522           ;       //CMD_PROGRAM_FLASH_ISP
 0522           ;       //////////////////////////////////////
 0522           ;       else if(cmd==CMD_PROGRAM_FLASH_ISP)
 0522 8C85              ldd R24,y+12
 0524 8331              cpi R24,19
 0526 09F0              breq X11
 0528 BCC1              rjmp L126
 052A           X11:
 052A                   .dbline 395
 052A           ;       {
 052A                   .dbline 396
 052A           ;               block_size = ((unsigned int)msg_buffer[1])<<8;
 052A A0900900          lds R10,_msg_buffer+1
 052E BB24              clr R11
 0530 BA2C              mov R11,R10
 0532 AA24              clr R10
 0534                   .dbline 397
 0534           ;               block_size |= msg_buffer[2];
 0534 20900A00          lds R2,_msg_buffer+2
 0538 3324              clr R3
 053A A228              or R10,R2
 053C B328              or R11,R3
 053E                   .dbline 398
 053E           ;               mode = msg_buffer[3];
 053E E0900B00          lds R14,_msg_buffer+3
 0542                   .dbline 401
 0542           ;               
 0542           ;               //Word Mode
 0542           ;               if((mode&1) == 0)
 0542 E0FC              sbrc R14,0
 0544 A2C0              rjmp L131
 0546                   .dbline 402
 0546           ;               {               
 0546                   .dbline 403
 0546           ;                       for(i=0;i<block_size;i++)
 0546 CC24              clr R12
 0548 DD24              clr R13
 054A 9AC0              rjmp L136
 054C           L133:
 054C                   .dbline 404
 054C           ;                       {       
 054C                   .dbline 407
 054C           ;                               //If we have an uneven byte programm the
 054C           ;                               //high byte                     
 054C           ;                               if(i&1)
 054C C0FE              sbrs R12,0
 054E 05C0              rjmp L137
 0550                   .dbline 408
 0550           ;                               {
 0550                   .dbline 409
 0550           ;                                       spi_transfer_8(msg_buffer[5]|(1<<3));
 0550 00910D00          lds R16,_msg_buffer+5
 0554 0860              ori R16,8
 0556 00D0              rcall _spi_transfer_8
 0558                   .dbline 410
 0558           ;                               }
 0558 03C0              rjmp L138
 055A           L137:
 055A                   .dbline 412
 055A           ;                               else
 055A           ;                               {
 055A                   .dbline 413
 055A           ;                                       spi_transfer_8(msg_buffer[5]);
 055A 00910D00          lds R16,_msg_buffer+5
 055E 00D0              rcall _spi_transfer_8
 0560                   .dbline 414
 0560           ;                               }
 0560           L138:
 0560                   .dbline 416
 0560           ;                               
 0560           ;                               spi_transfer_16(address&0xFFFF);
 0560 4FEF              ldi R20,255
 0562 5FEF              ldi R21,255
 0564 60E0              ldi R22,0
 0566 70E0              ldi R23,0
 0568 40900200          lds R4,_address+2
 056C 50900300          lds R5,_address+2+1
 0570 20900000          lds R2,_address
 0574 30900100          lds R3,_address+1
 0578 2422              and R2,R20
 057A 3522              and R3,R21
 057C 4622              and R4,R22
 057E 5722              and R5,R23
 0580 8101              movw R16,R2
 0582 00D0              rcall _spi_transfer_16
 0584                   .dbline 417
 0584           ;                               spi_transfer_8(msg_buffer[i+10]);
 0584 80E0              ldi R24,<_msg_buffer
 0586 90E0              ldi R25,>_msg_buffer
 0588 F601              movw R30,R12
 058A 3A96              adiw R30,10
 058C E80F              add R30,R24
 058E F91F              adc R31,R25
 0590 0081              ldd R16,z+0
 0592 00D0              rcall _spi_transfer_8
 0594                   .dbline 420
 0594           ;                               
 0594           ;                               //Check if we can do polling
 0594           ;                               if(msg_buffer[8]!=msg_buffer[i+10])
 0594 80E0              ldi R24,<_msg_buffer
 0596 90E0              ldi R25,>_msg_buffer
 0598 F601              movw R30,R12
 059A 3A96              adiw R30,10
 059C E80F              add R30,R24
 059E F91F              adc R31,R25
 05A0 2080              ldd R2,z+0
 05A2 30901000          lds R3,_msg_buffer+8
 05A6 3214              cp R3,R2
 05A8 B1F0              breq L141
 05AA                   .dbline 421
 05AA           ;                               {
 05AA                   .dbline 422
 05AA           ;                                       polling_address = address&0xFFFF;
 05AA 4FEF              ldi R20,255
 05AC 5FEF              ldi R21,255
 05AE 60E0              ldi R22,0
 05B0 70E0              ldi R23,0
 05B2 40900200          lds R4,_address+2
 05B6 50900300          lds R5,_address+2+1
 05BA 20900000          lds R2,_address
 05BE 30900100          lds R3,_address+1
 05C2 2422              and R2,R20
 05C4 3522              and R3,R21
 05C6 4622              and R4,R22
 05C8 5722              and R5,R23
 05CA FE01              movw R30,R28
 05CC 2282              std z+2,R2
 05CE 3382              std z+3,R3
 05D0 4482              std z+4,R4
 05D2 5582              std z+5,R5
 05D4                   .dbline 423
 05D4           ;                               }
 05D4 04C0              rjmp L142
 05D6           L141:
 05D6                   .dbline 426
 05D6           ;                               //If not switch the mode hard waiting
 05D6           ;                               else
 05D6           ;                               {
 05D6                   .dbline 427
 05D6           ;                                       mode = (mode&(~0x0E)) | 0x02;
 05D6 8E2D              mov R24,R14
 05D8 817F              andi R24,241
 05DA 8260              ori R24,2
 05DC E82E              mov R14,R24
 05DE                   .dbline 428
 05DE           ;                               }
 05DE           L142:
 05DE                   .dbline 432
 05DE           ;                               
 05DE           ;                               //Different polling methods
 05DE           ;                               //Hard waiting
 05DE           ;                               if((mode&0x0E) == 0x02)
 05DE 8E2D              mov R24,R14
 05E0 8E70              andi R24,14
 05E2 8230              cpi R24,2
 05E4 29F4              brne L144
 05E6                   .dbline 433
 05E6           ;                               {
 05E6                   .dbline 434
 05E6           ;                                       wait_ms(msg_buffer[4]);
 05E6 00910C00          lds R16,_msg_buffer+4
 05EA 1127              clr R17
 05EC 00D0              rcall _wait_ms
 05EE                   .dbline 435
 05EE           ;                               }
 05EE 2BC0              rjmp L145
 05F0           L144:
 05F0                   .dbline 437
 05F0           ;                               //Data polling
 05F0           ;                               else if((mode&0x0E) == 0x04)
 05F0 8E2D              mov R24,R14
 05F2 8E70              andi R24,14
 05F4 8430              cpi R24,4
 05F6 B9F4              brne L147
 05F8                   .dbline 438
 05F8           ;                               {
 05F8           L149:
 05F8                   .dbline 439
 05F8           ;                                       do{
 05F8                   .dbline 442
 05F8           ;                                               //If we have an uneven byte read the
 05F8           ;                                               //high byte                     
 05F8           ;                                               if(i&1)
 05F8 C0FE              sbrs R12,0
 05FA 05C0              rjmp L152
 05FC                   .dbline 443
 05FC           ;                                               {
 05FC                   .dbline 444
 05FC           ;                                                       spi_transfer_8(msg_buffer[7]|(1<<3));
 05FC 00910F00          lds R16,_msg_buffer+7
 0600 0860              ori R16,8
 0602 00D0              rcall _spi_transfer_8
 0604                   .dbline 445
 0604           ;                                               }
 0604 03C0              rjmp L153
 0606           L152:
 0606                   .dbline 447
 0606           ;                                               else
 0606           ;                                

⌨️ 快捷键说明

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