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

📄 motor_slave.lis

📁 用ICC编写的程序包括SPI
💻 LIS
字号:
                        .module Motor_slave.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\IccAvr_Pro\Motor_slave.c
                        .area vector(rom, abs)
                        .org 4
 0004 0C940000          jmp _int0_isr
                        .area text(rom, con, rel)
                        .area vector(rom, abs)
                        .org 8
 0008 0C940000          jmp _int1_isr
                        .area text(rom, con, rel)
                        .area vector(rom, abs)
                        .org 16
 0010 0C940000          jmp _timer2_ovf_isr
                        .area text(rom, con, rel)
                        .area vector(rom, abs)
                        .org 56
 0038 0C940000          jmp _adc_isr
                        .area text(rom, con, rel)
                        .area vector(rom, abs)
                        .org 68
 0044 0C940000          jmp _spi_stc_isr
                        .area text(rom, con, rel)
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 23
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #include "time.h"
 0000           ; #include "ad.h"
 0000           ; #include "qep.h"
 0000           ; #include "isr.h"
 0000           ; #include "SPI_slave.h"
 0000           ; 
 0000           ; 
 0000           ; extern unsigned char SPI_rx_buff[SPI_size];  
 0000           ; extern unsigned char SPI_tx_buff[SPI_size];  
 0000           ; extern unsigned char rx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow;  
 0000           ; extern unsigned char tx_wr_index,tx_rd_index,tx_counter,SPI_ok,SPI_datain;
 0000           ; extern int    qep_cnt[QEP_size];
 0000           ; extern unsigned char time_flag;
 0000           ; extern unsigned int AD_value[AD_size]; 
 0000           ; extern unsigned char ad_index; 
 0000           ; 
 0000           ; extern const unsigned char ad_channel[AD_size];
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 24
 0000           ;  PORTA = 0xFF;
 0000 8FEF              ldi R24,255
 0002 8BBB              out 0x1b,R24
 0004                   .dbline 25
 0004           ;  DDRA  = 0x00;
 0004 2224              clr R2
 0006 2ABA              out 0x1a,R2
 0008                   .dbline 26
 0008           ;  PORTB = 0x00;
 0008 28BA              out 0x18,R2
 000A                   .dbline 27
 000A           ;  DDRB  = 0x40;
 000A 80E4              ldi R24,64
 000C 87BB              out 0x17,R24
 000E                   .dbline 28
 000E           ;  PORTC = 0x00; //m103 output only
 000E 25BA              out 0x15,R2
 0010                   .dbline 29
 0010           ;  DDRC  = 0x00;
 0010 24BA              out 0x14,R2
 0012                   .dbline 30
 0012           ;  PORTD = 0x00;
 0012 22BA              out 0x12,R2
 0014                   .dbline 31
 0014           ;  DDRD  = 0x30;
 0014 80E3              ldi R24,48
 0016 81BB              out 0x11,R24
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
 001A                   .dbfunc e init_devices _init_devices fV
                        .even
 001A           _init_devices::
 001A                   .dbline -1
 001A                   .dbline 36
 001A           ; } 
 001A           ; 
 001A           ; //call this routine to initialize all peripherals
 001A           ; void init_devices(void)
 001A           ; {
 001A                   .dbline 38
 001A           ;  //stop errant interrupts until set up
 001A           ;  CLI(); //disable all interrupts
 001A F894              cli
 001C                   .dbline 39
 001C           ;  port_init();
 001C F1DF              xcall _port_init
 001E                   .dbline 40
 001E           ;  timer1_init();
 001E 0E940000          xcall _timer1_init
 0022                   .dbline 41
 0022           ;  timer2_init();
 0022 0E940000          xcall _timer2_init
 0026                   .dbline 42
 0026           ;  spi_init();
 0026 0E940000          xcall _spi_init
 002A                   .dbline 43
 002A           ;  adc_init();
 002A 0E940000          xcall _adc_init
 002E                   .dbline 45
 002E           ; 
 002E           ;  MCUCR = 0x0F;
 002E 8FE0              ldi R24,15
 0030 85BF              out 0x35,R24
 0032                   .dbline 46
 0032           ;  GICR  = 0xC0;
 0032 80EC              ldi R24,192
 0034 8BBF              out 0x3b,R24
 0036                   .dbline 47
 0036           ;  TIMSK = 0x40; //timer interrupt sources
 0036 80E4              ldi R24,64
 0038 89BF              out 0x39,R24
 003A                   .dbline 48
 003A           ;  SEI(); //re-enable interrupts
 003A 7894              sei
 003C                   .dbline -2
 003C           L2:
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbend
 003E                   .dbfunc e main _main fV
 003E           ;              i -> R20
                        .even
 003E           _main::
 003E                   .dbline -1
 003E                   .dbline 52
 003E           ;  //all peripherals are now initialized
 003E           ;  }
 003E           ; void main(void)  
 003E           ; {  
 003E                   .dbline 53
 003E           ;   unsigned char i=0;    
 003E 4427              clr R20
 0040 29C0              xjmp L5
 0042           X0:
 0042                   .dbline 55
 0042           ;   while(1)
 0042           ;   {
 0042           L7:
 0042                   .dbline 57
 0042           ;    while(!time_flag)  
 0042           ;    {  
 0042                   .dbline 58
 0042           ;         time_flag=0;
 0042 2224              clr R2
 0044 20920000          sts _time_flag,R2
 0048                   .dbline 59
 0048           ;         if(SPI_datain)
 0048 20900000          lds R2,_SPI_datain
 004C 2220              tst R2
 004E F1F0              breq L10
 0050                   .dbline 60
 0050           ;         {
 0050                   .dbline 61
 0050           ;               switch(getSPIchar())
 0050 0E940000          xcall _getSPIchar
 0054 602F              mov R22,R16
 0056 7727              clr R23
 0058 6A3A              cpi R22,170
 005A E0E0              ldi R30,0
 005C 7E07              cpc R23,R30
 005E 09F0              breq L15
 0060 0FC0              xjmp L12
 0062           X1:
 0062                   .dbline 62
 0062           ;                {
 0062           L15:
 0062                   .dbline 64
 0062           ;                   case 0xaa:
 0062           ;                               if(i<4)
 0062 4430              cpi R20,4
 0064 58F4              brsh L16
 0066                   .dbline 65
 0066           ;                               {
 0066                   .dbline 66
 0066           ;                                putSPIchar(*((unsigned char*)(qep_cnt)+i));
 0066 80E0              ldi R24,<_qep_cnt
 0068 90E0              ldi R25,>_qep_cnt
 006A E42F              mov R30,R20
 006C FF27              clr R31
 006E E80F              add R30,R24
 0070 F91F              adc R31,R25
 0072 0081              ldd R16,z+0
 0074 0E940000          xcall _putSPIchar
 0078                   .dbline 67
 0078           ;                                i++;
 0078 4395              inc R20
 007A                   .dbline 68
 007A           ;                                }
 007A 05C0              xjmp L13
 007C           L16:
 007C                   .dbline 70
 007C           ;                                else
 007C           ;                                i=0;
 007C 4427              clr R20
 007E                   .dbline 71
 007E           ;                               break;
 007E 03C0              xjmp L13
 0080           L12:
 0080                   .dbline 74
 0080           ;               
 0080           ;                       default:
 0080           ;                       putSPIchar(0xee);break;
 0080 0EEE              ldi R16,238
 0082 0E940000          xcall _putSPIchar
 0086                   .dbline 74
 0086           L13:
 0086                   .dbline 76
 0086           ;                 }
 0086           ;                SPI_datain=0;
 0086 2224              clr R2
 0088 20920000          sts _SPI_datain,R2
 008C                   .dbline 77
 008C           ;         }
 008C           L10:
 008C                   .dbline 78
 008C           L8:
 008C                   .dbline 56
 008C 20900000          lds R2,_time_flag
 0090 2220              tst R2
 0092 B9F2              breq L7
 0094                   .dbline 80
 0094           L5:
 0094                   .dbline 54
 0094 FBCF              xjmp L8
 0096           X2:
 0096                   .dbline -2
 0096           L3:
 0096                   .dbline 0 ; func end
 0096 0895              ret
 0098                   .dbsym r i 20 c
 0098                   .dbend

⌨️ 快捷键说明

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