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

📄 spi.lst

📁 avr单片机与flash存储器通信程序,调试通过,希望对大家有所帮助.
💻 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 + -