📄 motor_slave.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 + -