📄 spi.lst
字号:
__text_start:
__start:
0011 E5CF LDI R28,0x5F
0012 E0D2 LDI R29,2
0013 BFCD OUT 0x3D,R28
0014 BFDE OUT 0x3E,R29
0015 51C0 SUBI R28,0x10
0016 40D0 SBCI R29,0
0017 EA0A LDI R16,0xAA
0018 8308 STD Y+0,R16
0019 2400 CLR R0
001A E6E0 LDI R30,0x60
001B E0F0 LDI R31,0
001C E010 LDI R17,0
001D 36E0 CPI R30,0x60
001E 07F1 CPC R31,R17
001F F011 BEQ 0x0022
0020 9201 ST R0,Z+
0021 CFFB RJMP 0x001D
0022 8300 STD Z+0,R16
0023 E2E2 LDI R30,0x22
0024 E0F0 LDI R31,0
0025 E6A0 LDI R26,0x60
0026 E0B0 LDI R27,0
0027 E010 LDI R17,0
0028 32E2 CPI R30,0x22
0029 07F1 CPC R31,R17
002A F021 BEQ 0x002F
002B 95C8 LPM
002C 9631 ADIW R30,1
002D 920D ST R0,X+
002E CFF9 RJMP 0x0028
002F D024 RCALL _main
_exit:
0030 CFFF RJMP _exit
FILE: C:\ATMega8515\SPI\init.c
(0001) //ICC-AVR application builder : 2006-4-27 13:50:28
(0002) // Target : M8515
(0003) // Crystal: 11.059Mhz
(0004)
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007) #include"ForATmega8515.h"
(0008) void port_init(void)
(0009) {
(0010) PORTA = 0x00;
_port_init:
0031 2422 CLR R2
0032 BA2B OUT 0x1B,R2
(0011) DDRA = 0x00;
0033 BA2A OUT 0x1A,R2
(0012) PORTB = 0x00;
0034 BA28 OUT 0x18,R2
(0013) DDRB = 0xBF;
0035 EB8F LDI R24,0xBF
0036 BB87 OUT 0x17,R24
(0014) PORTC = 0x00;
0037 BA25 OUT 0x15,R2
(0015) DDRC = 0x00;
0038 BA24 OUT 0x14,R2
(0016) PORTD = 0x00;
0039 BA22 OUT 0x12,R2
(0017) DDRD = 0x00;
003A BA21 OUT 0x11,R2
(0018) PORTE = 0x00;
003B B827 OUT 0x07,R2
(0019) DDRE = 0x00;
003C B826 OUT 0x06,R2
003D 9508 RET
(0020) }
(0021)
(0022) //SPI initialize
(0023) // clock rate: 5529498hz
(0024) void spi_init(void)
(0025) {
(0026) SPCR = 0xFC; //setup SPI
_spi_init:
003E EF8C LDI R24,0xFC
003F B98D OUT 0x0D,R24
0040 9508 RET
_spi_stc_isr:
0041 920A ST R0,-Y
0042 B60F IN R0,0x3F
0043 920A ST R0,-Y
(0027) }
(0028)
(0029) #pragma interrupt_handler spi_stc_isr:9
(0030) void spi_stc_isr(void)
(0031) {
(0032) //byte in SPDR has been sent/received
(0033) PORTB|=SS; //锁存数据
0044 9AC4 SBI 0x18,4
(0034) PORTB&=~SS;
0045 98C4 CBI 0x18,4
0046 9009 LD R0,Y+
0047 BE0F OUT 0x3F,R0
0048 9009 LD R0,Y+
0049 9518 RETI
(0035) }
(0036)
(0037) //call this routine to initialize all peripherals
(0038) void init_devices(void)
(0039) {
(0040) //stop errant interrupts until set up
(0041) CLI(); //disable all interrupts
_init_devices:
004A 94F8 BCLR 7
(0042) port_init();
004B DFE5 RCALL _port_init
(0043) spi_init();
004C DFF1 RCALL _spi_init
(0044)
(0045) MCUCR = 0x00;
004D 2422 CLR R2
004E BE25 OUT 0x35,R2
(0046) EMCUCR = 0x00;
004F BE26 OUT 0x36,R2
(0047) GICR = 0x00;
0050 BE2B OUT 0x3B,R2
(0048) TIMSK = 0x00;
0051 BE29 OUT 0x39,R2
(0049) SEI(); //re-enable interrupts
0052 9478 BSET 7
0053 9508 RET
FILE: C:\ATMega8515\SPI\spi.c
(0001) #include <iom8515v.h>
(0002) #include"ForATmega8515.h"
(0003)
(0004) void delay(uint ticks);
(0005)
(0006) void main()
(0007) {
(0008) uchar temp=1;
_main:
temp --> R20
0054 E041 LDI R20,1
(0009) init_devices();
0055 DFF4 RCALL _init_devices
0056 C00C RJMP 0x0063
(0010) while(1)
(0011) {
(0012) SPDR=temp;//发送数据
0057 B94F OUT 0x0F,R20
(0013) temp<<=1;
0058 0F44 LSL R20
(0014) delay(1000);
0059 EE08 LDI R16,0xE8
005A E013 LDI R17,3
005B D009 RCALL _delay
(0015) if(temp==0){temp=1;SPCR^=0x20;}//改变方向
005C 2344 TST R20
005D F429 BNE 0x0063
005E E041 LDI R20,1
005F E280 LDI R24,0x20
0060 B02D IN R2,0x0D
0061 2628 EOR R2,R24
0062 B82D OUT 0x0D,R2
0063 CFF3 RJMP 0x0057
0064 9508 RET
_delay:
i --> R20
ticks --> R16
0065 D015 RCALL push_gset1
(0016) }
(0017) }
(0018)
(0019)
(0020) void delay(uint ticks)
(0021) {
(0022) uchar i;
(0023) for(;ticks!=0;ticks--)for(i=200;i!=0;i--);
FILE: <library>
0066 C007 RJMP 0x006E
0067 EC48 LDI R20,0xC8
0068 C001 RJMP 0x006A
0069 954A DEC R20
006A 2344 TST R20
006B F7E9 BNE 0x0069
006C 5001 SUBI R16,1
006D 4010 SBCI R17,0
006E 3000 CPI R16,0
006F 0701 CPC R16,R17
0070 F7B1 BNE 0x0067
0071 D00C RCALL pop_gset1
0072 9508 RET
push_gset5:
0073 92FA ST R15,-Y
0074 92EA ST R14,-Y
push_gset4:
0075 92DA ST R13,-Y
0076 92CA ST R12,-Y
push_gset3:
0077 92BA ST R11,-Y
0078 92AA ST R10,-Y
push_gset2:
0079 937A ST R23,-Y
007A 936A ST R22,-Y
push_gset1:
007B 935A ST R21,-Y
007C 934A ST R20,-Y
007D 9508 RET
pop_gset1:
007E E0E1 LDI R30,1
pop:
007F 9149 LD R20,Y+
0080 9159 LD R21,Y+
0081 FDE0 SBRC R30,0
0082 9508 RET
0083 9169 LD R22,Y+
0084 9179 LD R23,Y+
0085 FDE1 SBRC R30,1
0086 9508 RET
0087 90A9 LD R10,Y+
0088 90B9 LD R11,Y+
0089 FDE2 SBRC R30,2
008A 9508 RET
008B 90C9 LD R12,Y+
008C 90D9 LD R13,Y+
008D FDE3 SBRC R30,3
008E 9508 RET
008F 90E9 LD R14,Y+
0090 90F9 LD R15,Y+
0091 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -