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

📄 main.lis

📁 AVR单片机,STK500下载线制作全套资料,包括程序,电路图
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRISP~1\icc\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 CDD7              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 73
 001E           ; 
 001E           ;       
 001E           ;       //clock_speed=eeprom_read_byte(&eeprom_sck_period);
 001E           ;       //clock_speed=eeprom_sck_period;
 001E           ;       //if (clock_speed==0xFF) {
 001E           ;       //      clock_speed=SPI_SPEED_125KHZ;
 001E           ;       //      }
 001E           ;       clock_speed = SPI_SPEED_230KHz;
 001E 81E0              ldi R24,1
 0020 80930700          sts _clock_speed,R24
 0024                   .dbline 74
 0024           ;       spi_set_speed(clock_speed);
 0024 082F              mov R16,R24
 0026 00D0              rcall _spi_set_speed
 0028                   .dbline 76
 0028           ;       
 0028           ;       SEI();
 0028 7894              sei
 002A                   .dbline 78
 002A           ; 
 002A           ;       LED_GN_OFF;
 002A 9598              cbi 0x12,5
 002C                   .dbline 79
 002C           ;       LED_RT_ON;
 002C 969A              sbi 0x12,6
 002E                   .dbline 80
 002E           ;       wait_ms(2000);
 002E 00ED              ldi R16,2000
 0030 17E0              ldi R17,7
 0032 00D0              rcall _wait_ms
 0034                   .dbline 81
 0034           ;       LED_GN_ON;
 0034 959A              sbi 0x12,5
 0036                   .dbline 82
 0036           ;       LED_RT_OFF;
 0036 9698              cbi 0x12,6
 0038 7AC0              rjmp L4
 003A           L3:
 003A                   .dbline 84
 003A           ;       
 003A           ;       while(2) {
 003A                   .dbline 85
 003A           ;               rec_data=interface_getc();
 003A 00D0              rcall _interface_getc
 003C 5801              movw R10,R16
 003E                   .dbline 87
 003E           ;               //if a byte has been received -> process it
 003E           ;               if(rec_data!=-1) {
 003E C501              movw R24,R10
 0040 0F3F              cpi R16,255
 0042 EFEF              ldi R30,255
 0044 1E07              cpc R17,R30
 0046 09F4              brne X1
 0048 72C0              rjmp L6
 004A           X1:
 004A                   .dbline 87
 004A                   .dbline 88
 004A           ;                       t=rec_data&0xFF;
 004A 482F              mov R20,R24
 004C 5070              andi R21,0
 004E                   .dbline 90
 004E           ; 
 004E           ;                       if(state==ST_START) {
 004E C701              movw R24,R14
 0050 8030              cpi R24,0
 0052 E0EF              ldi R30,240
 0054 9E07              cpc R25,R30
 0056 49F4              brne L8
 0058                   .dbline 90
 0058                   .dbline 91
 0058           ;                               if(t==MESSAGE_START) {
 0058 4B31              cpi R20,27
 005A 09F0              breq X2
 005C 68C0              rjmp L9
 005E           X2:
 005E                   .dbline 91
 005E                   .dbline 92
 005E           ;                                       state = ST_GET_SEQ_NUM;
 005E 81E0              ldi R24,61441
 0060 90EF              ldi R25,240
 0062 7C01              movw R14,R24
 0064                   .dbline 93
 0064           ;                                       checksum = MESSAGE_START^0;
 0064 8BE1              ldi R24,27
 0066 C82E              mov R12,R24
 0068                   .dbline 94
 0068           ;                                       }
 0068                   .dbline 95
 0068           ;                               }
 0068 62C0              rjmp L9
 006A           L8:
 006A                   .dbline 96
 006A           ;                       else {
 006A                   .dbline 97
 006A           ;                               if(state==ST_GET_SEQ_NUM) {
 006A C701              movw R24,R14
 006C 8130              cpi R24,1
 006E E0EF              ldi R30,240
 0070 9E07              cpc R25,R30
 0072 31F4              brne L12
 0074                   .dbline 97
 0074                   .dbline 98
 0074           ;                                       seq_num = t;
 0074 4883              std y+0,R20
 0076                   .dbline 99
 0076           ;                                       state = ST_MSG_SIZE_1;
 0076 82E0              ldi R24,61442
 0078 90EF              ldi R25,240
 007A 7C01              movw R14,R24
 007C                   .dbline 100
 007C           ;                                       checksum ^= t;
 007C C426              eor R12,R20
 007E                   .dbline 101
 007E           ;                                       }
 007E 57C0              rjmp L13
 0080           L12:
 0080                   .dbline 102
 0080           ;                               else {
 0080                   .dbline 103
 0080           ;                                       if(state==ST_MSG_SIZE_1) {
 0080 C701              movw R24,R14
 0082 8230              cpi R24,2
 0084 E0EF              ldi R30,240
 0086 9E07              cpc R25,R30
 0088 49F4              brne L14
 008A                   .dbline 103
 008A                   .dbline 104
 008A           ;                                               msg_size = t<<8;
 008A 642F              mov R22,R20
 008C 7727              clr R23
 008E 762F              mov R23,R22
 0090 6627              clr R22
 0092                   .dbline 105
 0092           ;                                               state = ST_MSG_SIZE_2;
 0092 83E0              ldi R24,61443
 0094 90EF              ldi R25,240
 0096 7C01              movw R14,R24
 0098                   .dbline 106
 0098           ;                                               checksum ^= t;
 0098 C426              eor R12,R20
 009A                   .dbline 107
 009A           ;                                               }
 009A 49C0              rjmp L15
 009C           L14:
 009C                   .dbline 108
 009C           ;                                       else {
 009C                   .dbline 109
 009C           ;                                               if(state==ST_MSG_SIZE_2) {
 009C C701              movw R24,R14
 009E 8330              cpi R24,3
 00A0 E0EF              ldi R30,240
 00A2 9E07              cpc R25,R30
 00A4 49F4              brne L16
 00A6                   .dbline 109
 00A6                   .dbline 110
 00A6           ;                                                       msg_size |= t;
 00A6 242E              mov R2,R20
 00A8 3324              clr R3
 00AA 6229              or R22,R2
 00AC 7329              or R23,R3
 00AE                   .dbline 111
 00AE           ;                                                       state = ST_GET_TOKEN;
 00AE 84E0              ldi R24,61444
 00B0 90EF              ldi R25,240
 00B2 7C01              movw R14,R24
 00B4                   .dbline 112
 00B4           ;                                                       checksum ^= t;
 00B4 C224              eor R12,R2
 00B6                   .dbline 113
 00B6           ;                                                       }
 00B6 3BC0              rjmp L17
 00B8           L16:
 00B8                   .dbline 114
 00B8           ;                                               else {
 00B8                   .dbline 115
 00B8           ;                                                       if(state==ST_GET_TOKEN) {
 00B8 C701              movw R24,R14
 00BA 8430              cpi R24,4
 00BC E0EF              ldi R30,240
 00BE 9E07              cpc R25,R30
 00C0 79F4              brne L18
 00C2                   .dbline 115
 00C2                   .dbline 116
 00C2           ;                                                               if(t==TOKEN) {
 00C2 4E30              cpi R20,14
 00C4 49F4              brne L20
 00C6                   .dbline 116
 00C6                   .dbline 117
 00C6           ;                                                                       state = ST_GET_DATA;
 00C6 85E0              ldi R24,61445
 00C8 90EF              ldi R25,240
 00CA 7C01              movw R14,R24
 00CC                   .dbline 118
 00CC           ;                                                                       checksum ^= t;

⌨️ 快捷键说明

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