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

📄 main.lis

📁 文档里面的代码是可以正常使用的
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\icc\stk500\avrasp\main.c
 0000                   .dbfunc e main _main fV
 0000           ;              i -> y+1
 0000           ;       msg_size -> R22,R23
 0000           ;        seq_num -> y+0
 0000           ;       checksum -> R12
 0000           ;              t -> R20
 0000           ;          state -> R14,R15
 0000           ;       rec_data -> R10,R11
                        .even
 0000           _main::
 0000 2397              sbiw R28,3
 0002                   .dbline -1
 0002                   .dbline 49
 0002           ; /**   \file
 0002           ;       <b>USBisp main</b><br>
 0002           ;       Autor: Matthias Wei遝r<br>
 0002           ;       Copyright 2005: Matthias Wei遝r<br>
 0002           ;       License: QPL (see license.txt)
 0002           ;       <hr>
 0002           ; */
 0002           ; /*! \mainpage USBisp STK500 v2
 0002           ; 
 0002           ;       (c)2005 by Matthias Weisser
 0002           ; 
 0002           ;       This software is distributed under the QPL
 0002           ;       see license.txt for more information
 0002           ; 
 0002           ;       \section Compiler
 0002           ;       latest WINAVR
 0002           ; 
 0002           ;       \section version history version history
 0002           ;       <b>v1.0</b>
 0002           ;       <ul>
 0002           ;               <li>First release</li>
 0002           ;       </ul>
 0002           ; */
 0002           ; #include "stk500.h"
 0002           ; 
 0002           ; //States used in the receive state machine
 0002           ; #define       ST_START                0xF000                                                          /*消息开始0x1B                                  */
 0002           ; #define       ST_GET_SEQ_NUM  0xF001                                                          /*消息包号                                              */
 0002           ; #define ST_MSG_SIZE_1 0xF002                                                          /*消息长度                                              */
 0002           ; #define ST_MSG_SIZE_2 0xF003                                                          /*消息长度                                              */
 0002           ; #define ST_GET_TOKEN  0xF004                                                          /*消息记号0x0E                                  */
 0002           ; #define ST_GET_DATA           0xF005                                                          /*消息数据                                              */
 0002           ; #define       ST_GET_CHECK    0xF006                                                          /*消息校验                                              */
 0002           ; #define       ST_PROCESS              0xF007                                                          /*消息                                          */
 0002           ; 
 0002           ; void chip_init(void);
 0002           ; unsigned char adc_get(char n);
 0002           ; void process_command(unsigned char seq_num);
 0002           ; 
 0002           ; //Some global variables
 0002           ; unsigned char msg_buffer[300];
 0002           ; unsigned char clock_speed;
 0002           ; unsigned char reset_polarity;
 0002           ; unsigned char param_controller_init;
 0002           ; unsigned char prgmode;
 0002           ; 
 0002           ; unsigned long address;
 0002           ; 
 0002           ; void main(void) {
 0002                   .dbline 51
 0002           ;       
 0002           ;       unsigned int i=0;
 0002 0024              clr R0
 0004 1124              clr R1
 0006 1A82              std y+2,R1
 0008 0982              std y+1,R0
 000A                   .dbline 53
 000A           ; 
 000A           ;       unsigned char seq_num=0;
 000A 0882              std y+0,R0
 000C                   .dbline 54
 000C           ;       unsigned int msg_size=0;
 000C 6627              clr R22
 000E 7727              clr R23
 0010                   .dbline 55
 0010           ;       unsigned char checksum=0;
 0010 CC24              clr R12
 0012                   .dbline 58
 0012           ; 
 0012           ;       /// next state
 0012           ;       unsigned int state=ST_START;    /*应该是状态标志*/
 0012 80E0              ldi R24,61440
 0014 90EF              ldi R25,240
 0016 7C01              movw R14,R24
 0018                   .dbline 63
 0018           ; 
 0018           ;       unsigned char t;
 0018           ;       signed int rec_data;
 0018           ; 
 0018           ;       chip_init();
 0018 37D8              rcall _chip_init
 001A                   .dbline 64
 001A           ;       interface_init();
 001A 00D0              rcall _interface_init
 001C                   .dbline 65
 001C           ;       spi_disable();
 001C 00D0              rcall _spi_disable
 001E                   .dbline 68
 001E           ;       
 001E           ;       //clock_speed=eeprom_read_byte(&eeprom_sck_period);
 001E           ;       clock_speed=eeprom_sck_period;
 001E 20900000          lds R2,_eeprom_sck_period
 0022 20920700          sts _clock_speed,R2
 0026                   .dbline 69
 0026           ;       if (clock_speed==0xFF) {
 0026 822D              mov R24,R2
 0028 8F3F              cpi R24,255
 002A 19F4              brne L3
 002C                   .dbline 69
 002C                   .dbline 70
 002C           ;               clock_speed=SPI_SPEED_125KHZ;
 002C 85E0              ldi R24,5
 002E 80930700          sts _clock_speed,R24
 0032                   .dbline 71
 0032           ;               }
 0032           L3:
 0032                   .dbline 72
 0032           ;       spi_set_speed(clock_speed);
 0032 00910700          lds R16,_clock_speed
 0036 00D0              rcall _spi_set_speed
 0038                   .dbline 74
 0038           ;       
 0038           ;       SEI();
 0038 7894              sei
 003A                   .dbline 76
 003A           ; 
 003A           ;       LED_GN_OFF;
 003A 8EEF              ldi R24,-2
 003C 9FEF              ldi R25,-1
 003E 25B0              in R2,0x5
 0040 2822              and R2,R24
 0042 25B8              out 0x5,R2
 0044                   .dbline 77
 0044           ;       LED_RT_ON;
 0044 299A              sbi 0x5,1
 0046                   .dbline 78
 0046           ;       wait_ms(2000);
 0046 00ED              ldi R16,2000
 0048 17E0              ldi R17,7
 004A 00D0              rcall _wait_ms
 004C                   .dbline 79
 004C           ;       LED_GN_ON;
 004C 289A              sbi 0x5,0
 004E                   .dbline 80
 004E           ;       LED_RT_OFF;
 004E 8DEF              ldi R24,-3
 0050 9FEF              ldi R25,-1
 0052 25B0              in R2,0x5
 0054 2822              and R2,R24
 0056 25B8              out 0x5,R2
 0058 7AC0              rjmp L6
 005A           L5:
 005A                   .dbline 82
 005A           ;       
 005A           ;       while(2) {
 005A                   .dbline 83
 005A           ;               rec_data=interface_getc();
 005A 00D0              rcall _interface_getc
 005C 5801              movw R10,R16
 005E                   .dbline 85
 005E           ;               //if a byte has been received -> process it
 005E           ;               if(rec_data!=-1) {
 005E C501              movw R24,R10
 0060 0F3F              cpi R16,255
 0062 EFEF              ldi R30,255
 0064 1E07              cpc R17,R30
 0066 09F4              brne X1
 0068 72C0              rjmp L8
 006A           X1:
 006A                   .dbline 85
 006A                   .dbline 86
 006A           ;                       t=rec_data&0xFF;
 006A 482F              mov R20,R24
 006C 5070              andi R21,0
 006E                   .dbline 88
 006E           ; 
 006E           ;                       if(state==ST_START) {
 006E C701              movw R24,R14
 0070 8030              cpi R24,0
 0072 E0EF              ldi R30,240
 0074 9E07              cpc R25,R30
 0076 49F4              brne L10
 0078                   .dbline 88
 0078                   .dbline 89
 0078           ;                               if(t==MESSAGE_START) {
 0078 4B31              cpi R20,27
 007A 09F0              breq X2
 007C 68C0              rjmp L11
 007E           X2:
 007E                   .dbline 89
 007E                   .dbline 90
 007E           ;                                       state = ST_GET_SEQ_NUM;
 007E 81E0              ldi R24,61441
 0080 90EF              ldi R25,240
 0082 7C01              movw R14,R24
 0084                   .dbline 91
 0084           ;                                       checksum = MESSAGE_START^0;
 0084 8BE1              ldi R24,27
 0086 C82E              mov R12,R24
 0088                   .dbline 92
 0088           ;                                       }
 0088                   .dbline 93
 0088           ;                               }
 0088 62C0              rjmp L11
 008A           L10:
 008A                   .dbline 94
 008A           ;                       else {
 008A                   .dbline 95
 008A           ;                               if(state==ST_GET_SEQ_NUM) {
 008A C701              movw R24,R14
 008C 8130              cpi R24,1
 008E E0EF              ldi R30,240
 0090 9E07              cpc R25,R30
 0092 31F4              brne L14
 0094                   .dbline 95
 0094                   .dbline 96
 0094           ;                                       seq_num = t;
 0094 4883              std y+0,R20
 0096                   .dbline 97
 0096           ;                                       state = ST_MSG_SIZE_1;
 0096 82E0              ldi R24,61442
 0098 90EF              ldi R25,240
 009A 7C01              movw R14,R24
 009C                   .dbline 98
 009C           ;                                       checksum ^= t;
 009C C426              eor R12,R20
 009E                   .dbline 99
 009E           ;                                       }
 009E 57C0              rjmp L15
 00A0           L14:
 00A0                   .dbline 100
 00A0           ;                               else {
 00A0                   .dbline 101
 00A0           ;                                       if(state==ST_MSG_SIZE_1) {
 00A0 C701              movw R24,R14
 00A2 8230              cpi R24,2
 00A4 E0EF              ldi R30,240
 00A6 9E07              cpc R25,R30
 00A8 49F4              brne L16
 00AA                   .dbline 101
 00AA                   .dbline 102
 00AA           ;                                               msg_size = t<<8;
 00AA 642F              mov R22,R20
 00AC 7727              clr R23
 00AE 762F              mov R23,R22
 00B0 6627              clr R22
 00B2                   .dbline 103
 00B2           ;                                               state = ST_MSG_SIZE_2;
 00B2 83E0              ldi R24,61443
 00B4 90EF              ldi R25,240
 00B6 7C01              movw R14,R24
 00B8                   .dbline 104
 00B8           ;                                               checksum ^= t;
 00B8 C426              eor R12,R20
 00BA                   .dbline 105
 00BA           ;                                               }
 00BA 49C0              rjmp L17
 00BC           L16:
 00BC                   .dbline 106
 00BC           ;                                       else {
 00BC                   .dbline 107
 00BC           ;                                               if(state==ST_MSG_SIZE_2) {
 00BC C701              movw R24,R14
 00BE 8330              cpi R24,3
 00C0 E0EF              ldi R30,240
 00C2 9E07              cpc R25,R30
 00C4 49F4              brne L18
 00C6                   .dbline 107
 00C6                   .dbline 108
 00C6           ;                                                       msg_size |= t;
 00C6 242E              mov R2,R20
 00C8 3324              clr R3
 00CA 6229              or R22,R2
 00CC 7329              or R23,R3
 00CE                   .dbline 109
 00CE           ;                                                       state = ST_GET_TOKEN;
 00CE 84E0              ldi R24,61444
 00D0 90EF              ldi R25,240
 00D2 7C01              movw R14,R24
 00D4                   .dbline 110
 00D4           ;                                                       checksum ^= t;
 00D4 C224              eor R12,R2
 00D6                   .dbline 111
 00D6           ;                                                       }
 00D6 3BC0              rjmp L19
 00D8           L18:
 00D8                   .dbline 112
 00D8           ;                                               else {
 00D8                   .dbline 113
 00D8           ;                                                       if(state==ST_GET_TOKEN) {
 00D8 C701              movw R24,R14
 00DA 8430              cpi R24,4
 00DC E0EF              ldi R30,240
 00DE 9E07              cpc R25,R30
 00E0 79F4              brne L20
 00E2                   .dbline 113
 00E2                   .dbline 114

⌨️ 快捷键说明

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