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

📄 main.lis

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\project\avrisp\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 DDD7              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 8EEF              ldi R24,-2
 002C 9FEF              ldi R25,-1
 002E 28B2              in R2,0x18
 0030 2822              and R2,R24
 0032 28BA              out 0x18,R2
 0034                   .dbline 79
 0034           ;       LED_RT_ON;
 0034 C19A              sbi 0x18,1
 0036                   .dbline 80
 0036           ;       wait_ms(2000);
 0036 00ED              ldi R16,2000
 0038 17E0              ldi R17,7
 003A 00D0              rcall _wait_ms
 003C                   .dbline 81
 003C           ;       LED_GN_ON;
 003C C09A              sbi 0x18,0
 003E                   .dbline 82
 003E           ;       LED_RT_OFF;
 003E 8DEF              ldi R24,-3
 0040 9FEF              ldi R25,-1
 0042 28B2              in R2,0x18
 0044 2822              and R2,R24
 0046 28BA              out 0x18,R2
 0048 7AC0              rjmp L4
 004A           L3:
 004A                   .dbline 84
 004A           ;       
 004A           ;       while(2) {
 004A                   .dbline 85
 004A           ;               rec_data=interface_getc();
 004A 00D0              rcall _interface_getc
 004C 5801              movw R10,R16
 004E                   .dbline 87
 004E           ;               //if a byte has been received -> process it
 004E           ;               if(rec_data!=-1) {
 004E C501              movw R24,R10
 0050 0F3F              cpi R16,255
 0052 EFEF              ldi R30,255
 0054 1E07              cpc R17,R30
 0056 09F4              brne X1
 0058 72C0              rjmp L6
 005A           X1:
 005A                   .dbline 87
 005A                   .dbline 88
 005A           ;                       t=rec_data&0xFF;
 005A 482F              mov R20,R24
 005C 5070              andi R21,0
 005E                   .dbline 90
 005E           ; 
 005E           ;                       if(state==ST_START) {
 005E C701              movw R24,R14
 0060 8030              cpi R24,0
 0062 E0EF              ldi R30,240
 0064 9E07              cpc R25,R30
 0066 49F4              brne L8
 0068                   .dbline 90
 0068                   .dbline 91
 0068           ;                               if(t==MESSAGE_START) {
 0068 4B31              cpi R20,27
 006A 09F0              breq X2
 006C 68C0              rjmp L9
 006E           X2:
 006E                   .dbline 91
 006E                   .dbline 92
 006E           ;                                       state = ST_GET_SEQ_NUM;
 006E 81E0              ldi R24,61441
 0070 90EF              ldi R25,240
 0072 7C01              movw R14,R24
 0074                   .dbline 93
 0074           ;                                       checksum = MESSAGE_START^0;
 0074 8BE1              ldi R24,27
 0076 C82E              mov R12,R24
 0078                   .dbline 94
 0078           ;                                       }
 0078                   .dbline 95
 0078           ;                               }
 0078 62C0              rjmp L9
 007A           L8:
 007A                   .dbline 96
 007A           ;                       else {
 007A                   .dbline 97
 007A           ;                               if(state==ST_GET_SEQ_NUM) {
 007A C701              movw R24,R14
 007C 8130              cpi R24,1
 007E E0EF              ldi R30,240
 0080 9E07              cpc R25,R30
 0082 31F4              brne L12
 0084                   .dbline 97
 0084                   .dbline 98
 0084           ;                                       seq_num = t;
 0084 4883              std y+0,R20
 0086                   .dbline 99
 0086           ;                                       state = ST_MSG_SIZE_1;
 0086 82E0              ldi R24,61442
 0088 90EF              ldi R25,240
 008A 7C01              movw R14,R24
 008C                   .dbline 100
 008C           ;                                       checksum ^= t;
 008C C426              eor R12,R20
 008E                   .dbline 101
 008E           ;                                       }
 008E 57C0              rjmp L13
 0090           L12:
 0090                   .dbline 102
 0090           ;                               else {
 0090                   .dbline 103
 0090           ;                                       if(state==ST_MSG_SIZE_1) {
 0090 C701              movw R24,R14
 0092 8230              cpi R24,2
 0094 E0EF              ldi R30,240
 0096 9E07              cpc R25,R30
 0098 49F4              brne L14
 009A                   .dbline 103
 009A                   .dbline 104
 009A           ;                                               msg_size = t<<8;
 009A 642F              mov R22,R20
 009C 7727              clr R23
 009E 762F              mov R23,R22
 00A0 6627              clr R22
 00A2                   .dbline 105
 00A2           ;                                               state = ST_MSG_SIZE_2;
 00A2 83E0              ldi R24,61443
 00A4 90EF              ldi R25,240
 00A6 7C01              movw R14,R24
 00A8                   .dbline 106
 00A8           ;                                               checksum ^= t;
 00A8 C426              eor R12,R20
 00AA                   .dbline 107
 00AA           ;                                               }
 00AA 49C0              rjmp L15
 00AC           L14:
 00AC                   .dbline 108
 00AC           ;                                       else {
 00AC                   .dbline 109
 00AC           ;                                               if(state==ST_MSG_SIZE_2) {
 00AC C701              movw R24,R14
 00AE 8330              cpi R24,3
 00B0 E0EF              ldi R30,240
 00B2 9E07              cpc R25,R30
 00B4 49F4              brne L16
 00B6                   .dbline 109
 00B6                   .dbline 110
 00B6           ;                                                       msg_size |= t;
 00B6 242E              mov R2,R20
 00B8 3324              clr R3
 00BA 6229              or R22,R2
 00BC 7329              or R23,R3
 00BE                   .dbline 111
 00BE           ;                                                       state = ST_GET_TOKEN;
 00BE 84E0              ldi R24,61444
 00C0 90EF              ldi R25,240
 00C2 7C01              movw R14,R24
 00C4                   .dbline 112
 00C4           ;                                                       checksum ^= t;
 00C4 C224              eor R12,R2
 00C6                   .dbline 113
 00C6           ;                                                       }
 00C6 3BC0              rjmp L17
 00C8           L16:
 00C8                   .dbline 114
 00C8           ;                                               else {
 00C8                   .dbline 115
 00C8           ;                                                       if(state==ST_GET_TOKEN) {
 00C8 C701              movw R24,R14
 00CA 8430              cpi R24,4
 00CC E0EF              ldi R30,240
 00CE 9E07              cpc R25,R30
 00D0 79F4              brne L18
 00D2                   .dbline 115
 00D2                   .dbline 116
 00D2           ;                                                               if(t==TOKEN) {
 00D2 4E30              cpi R20,14
 00D4 49F4              brne L20
 00D6                   .dbline 116

⌨️ 快捷键说明

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