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

📄 dianzhen.lst

📁 avr单片机与flash存储器通信程序,调试通过,希望对大家有所帮助.
💻 LST
字号:
__text_start:
__start:
    002D E5CF      LDI	R28,0x5F
    002E E0D2      LDI	R29,2
    002F BFCD      OUT	0x3D,R28
    0030 BFDE      OUT	0x3E,R29
    0031 51C0      SUBI	R28,0x10
    0032 40D0      SBCI	R29,0
    0033 EA0A      LDI	R16,0xAA
    0034 8308      STD	Y+0,R16
    0035 2400      CLR	R0
    0036 E6E0      LDI	R30,0x60
    0037 E0F0      LDI	R31,0
    0038 E010      LDI	R17,0
    0039 36E0      CPI	R30,0x60
    003A 07F1      CPC	R31,R17
    003B F011      BEQ	0x003E
    003C 9201      ST	R0,Z+
    003D CFFB      RJMP	0x0039
    003E 8300      STD	Z+0,R16
    003F E5EA      LDI	R30,0x5A
    0040 E0F0      LDI	R31,0
    0041 E6A0      LDI	R26,0x60
    0042 E0B0      LDI	R27,0
    0043 E010      LDI	R17,0
    0044 35EA      CPI	R30,0x5A
    0045 07F1      CPC	R31,R17
    0046 F021      BEQ	0x004B
    0047 95C8      LPM
    0048 9631      ADIW	R30,1
    0049 920D      ST	R0,X+
    004A CFF9      RJMP	0x0044
    004B D001      RCALL	_main
_exit:
    004C CFFF      RJMP	_exit
FILE: C:\ATMega8515\点阵\dianzhen.c
(0001) #include <iom8515v.h>
(0002) #include <macros.h>
(0003) #include"ForATmega8515.h"
(0004) //延时(短)
(0005) #define SomeNop   NOP();NOP();NOP();NOP();NOP();NOP();\
(0006) 				  NOP();NOP();NOP();NOP();NOP();NOP();\
(0007) 				  NOP();NOP();NOP();NOP();NOP();NOP();
(0008) 
(0009) uchar const pic1[]={0x18,0x18,0x99,0xDB,0x7E,0x3C,0x18,0x00};
(0010) uchar const pic2[]={0x30,0x18,0x0C,0xFE,0xFE,0x0C,0x18,0x30};
(0011) uchar const pic3[]={0x00,0x18,0x3C,0x7E,0xDB,0x99,0x18,0x18};
(0012) uchar const pic4[]={0x0C,0x18,0x30,0x7F,0x7F,0x30,0x18,0x0C};
(0013) uchar const line[]={0,2,4,6,8,10,12,14};
(0014) 
(0015) void delay(uint tick);//延时(长)
(0016) void display(uchar const *graph);
(0017) 
(0018) void main()
(0019) {
(0020)  uint softdelay=1000;
_main:
  softdelay            --> R20
    004D EE48      LDI	R20,0xE8
    004E E053      LDI	R21,3
(0021)  init_devices();
    004F D098      RCALL	_init_devices
    0050 C033      RJMP	0x0084
(0022)  while(1)
(0023)  {
(0024)   while(softdelay--)display(pic1);//显示pic1
    0051 E302      LDI	R16,0x32
    0052 E010      LDI	R17,0
    0053 D040      RCALL	_display
    0054 011A      MOVW	R2,R20
    0055 5041      SUBI	R20,1
    0056 4050      SBCI	R21,0
    0057 2022      TST	R2
    0058 F7C1      BNE	0x0051
    0059 2033      TST	R3
    005A F7B1      BNE	0x0051
(0025)   softdelay=1000;
    005B EE48      LDI	R20,0xE8
    005C E053      LDI	R21,3
    005D C003      RJMP	0x0061
(0026)   while(softdelay--)display(pic2);//显示pic2
    005E E30A      LDI	R16,0x3A
    005F E010      LDI	R17,0
    0060 D033      RCALL	_display
    0061 011A      MOVW	R2,R20
    0062 5041      SUBI	R20,1
    0063 4050      SBCI	R21,0
    0064 2022      TST	R2
    0065 F7C1      BNE	0x005E
    0066 2033      TST	R3
    0067 F7B1      BNE	0x005E
(0027)   softdelay=1000;
    0068 EE48      LDI	R20,0xE8
    0069 E053      LDI	R21,3
    006A C003      RJMP	0x006E
(0028)   while(softdelay--)display(pic3);//显示pic3
    006B E402      LDI	R16,0x42
    006C E010      LDI	R17,0
    006D D026      RCALL	_display
    006E 011A      MOVW	R2,R20
    006F 5041      SUBI	R20,1
    0070 4050      SBCI	R21,0
    0071 2022      TST	R2
    0072 F7C1      BNE	0x006B
    0073 2033      TST	R3
    0074 F7B1      BNE	0x006B
(0029)   softdelay=1000;
    0075 EE48      LDI	R20,0xE8
    0076 E053      LDI	R21,3
    0077 C003      RJMP	0x007B
(0030)   while(softdelay--)display(pic4);//显示pic4
    0078 E40A      LDI	R16,0x4A
    0079 E010      LDI	R17,0
    007A D019      RCALL	_display
    007B 011A      MOVW	R2,R20
    007C 5041      SUBI	R20,1
    007D 4050      SBCI	R21,0
    007E 2022      TST	R2
    007F F7C1      BNE	0x0078
    0080 2033      TST	R3
    0081 F7B1      BNE	0x0078
(0031)   softdelay=1000;
    0082 EE48      LDI	R20,0xE8
    0083 E053      LDI	R21,3
    0084 CFCF      RJMP	0x0054
    0085 9508      RET
_delay:
  i                    --> R20
  ticks                --> R16
    0086 D075      RCALL	push_gset1
(0032)  }
(0033) }
(0034) 
(0035) void delay(uint ticks)
(0036) {
(0037)  uchar i;
(0038)  for(;ticks!=0;ticks--)for(i=200;i!=0;i--);
    0087 C007      RJMP	0x008F
    0088 EC48      LDI	R20,0xC8
    0089 C001      RJMP	0x008B
    008A 954A      DEC	R20
    008B 2344      TST	R20
    008C F7E9      BNE	0x008A
    008D 5001      SUBI	R16,1
    008E 4010      SBCI	R17,0
    008F 3000      CPI	R16,0
    0090 0701      CPC	R16,R17
    0091 F7B1      BNE	0x0088
    0092 D06C      RCALL	pop_gset1
    0093 9508      RET
_display:
  i                    --> R20
  graph                --> R22
    0094 D065      RCALL	push_gset2
    0095 01B8      MOVW	R22,R16
(0039) }
(0040) 
(0041) void display(uchar const *graph)
(0042) {
(0043)  uchar i;
(0044)  for(i=0;i!=8;i++)
    0096 2744      CLR	R20
    0097 C02B      RJMP	0x00C3
(0045)  {//把graph的数据显示出来
(0046)   PORTB|=0x01;
    0098 9AC0      SBI	0x18,0
(0047)   SPDR=*graph++;
    0099 011B      MOVW	R2,R22
    009A 5F6F      SUBI	R22,0xFF
    009B 4F7F      SBCI	R23,0xFF
    009C 01F1      MOVW	R30,R2
    009D 91E4      LPM	R30,0(Z)
    009E B9EF      OUT	0x0F,R30
(0048)   SomeNop
    009F 0000      NOP
    00A0 0000      NOP
    00A1 0000      NOP
    00A2 0000      NOP
    00A3 0000      NOP
    00A4 0000      NOP
    00A5 0000      NOP
    00A6 0000      NOP
    00A7 0000      NOP
    00A8 0000      NOP
    00A9 0000      NOP
    00AA 0000      NOP
    00AB 0000      NOP
    00AC 0000      NOP
    00AD 0000      NOP
    00AE 0000      NOP
    00AF 0000      NOP
    00B0 0000      NOP
(0049)   PORTB&=0xf1;
    00B1 B388      IN	R24,0x18
    00B2 7F81      ANDI	R24,0xF1
    00B3 BB88      OUT	0x18,R24
(0050)   PORTB|=line[i];
    00B4 E582      LDI	R24,0x52
    00B5 E090      LDI	R25,0
    00B6 2FE4      MOV	R30,R20
    00B7 27FF      CLR	R31
    00B8 0FE8      ADD	R30,R24
    00B9 1FF9      ADC	R31,R25
    00BA 91E4      LPM	R30,0(Z)
    00BB B228      IN	R2,0x18
    00BC 2A2E      OR	R2,R30
    00BD BA28      OUT	0x18,R2
(0051)   PORTB&=~0x01;
    00BE 98C0      CBI	0x18,0
(0052)   delay(1); 
    00BF E001      LDI	R16,1
    00C0 E010      LDI	R17,0
    00C1 DFC4      RCALL	_delay
    00C2 9543      INC	R20
    00C3 3048      CPI	R20,0x8
    00C4 F009      BEQ	0x00C6
    00C5 CFD2      RJMP	0x0098
    00C6 D02B      RCALL	pop_gset2
    00C7 9508      RET
FILE: C:\ATMega8515\点阵\init.c
(0001) //ICC-AVR application builder : 2006-4-27 14:09:59
(0002) // Target : M8515
(0003) // Crystal: 11.059Mhz
(0004) 
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007) 
(0008) void port_init(void)
(0009) {
(0010)  PORTA = 0x00;
_port_init:
    00C8 2422      CLR	R2
    00C9 BA2B      OUT	0x1B,R2
(0011)  DDRA  = 0x00;
    00CA BA2A      OUT	0x1A,R2
(0012)  PORTB = 0x00;
    00CB BA28      OUT	0x18,R2
(0013)  DDRB  = 0xBF;
    00CC EB8F      LDI	R24,0xBF
    00CD BB87      OUT	0x17,R24
(0014)  PORTC = 0x00;
    00CE BA25      OUT	0x15,R2
(0015)  DDRC  = 0x00;
    00CF BA24      OUT	0x14,R2
(0016)  PORTD = 0x00;
    00D0 BA22      OUT	0x12,R2
(0017)  DDRD  = 0x00; 
    00D1 BA21      OUT	0x11,R2
(0018)  PORTE = 0x00;
    00D2 B827      OUT	0x07,R2
(0019)  DDRE  = 0x00; 
    00D3 B826      OUT	0x06,R2
    00D4 9508      RET
(0020) }
(0021) 
(0022) //SPI initialize
(0023) // clock rate: 5529498hz
(0024) void spi_init(void)
(0025) {
(0026)  SPCR = 0xFC; //setup SPI
_spi_init:
    00D5 EF8C      LDI	R24,0xFC
    00D6 B98D      OUT	0x0D,R24
    00D7 9508      RET
_spi_stc_isr:
    00D8 922A      ST	R2,-Y
    00D9 938A      ST	R24,-Y
    00DA B62F      IN	R2,0x3F
    00DB 922A      ST	R2,-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^=0x10;
    00DC E180      LDI	R24,0x10
    00DD B228      IN	R2,0x18
    00DE 2628      EOR	R2,R24
    00DF BA28      OUT	0x18,R2
(0034)  PORTB^=0x10;
    00E0 B228      IN	R2,0x18
    00E1 2628      EOR	R2,R24
    00E2 BA28      OUT	0x18,R2
    00E3 9029      LD	R2,Y+
    00E4 BE2F      OUT	0x3F,R2
    00E5 9189      LD	R24,Y+
    00E6 9029      LD	R2,Y+
    00E7 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:
    00E8 94F8      BCLR	7
(0042)  port_init();
    00E9 DFDE      RCALL	_port_init
(0043)  spi_init();
    00EA DFEA      RCALL	_spi_init
(0044) 
(0045)  MCUCR = 0x00;
    00EB 2422      CLR	R2
    00EC BE25      OUT	0x35,R2
(0046)  EMCUCR = 0x00;
    00ED BE26      OUT	0x36,R2
(0047)  GICR = 0x00;
    00EE BE2B      OUT	0x3B,R2
(0048)  TIMSK = 0x00;
    00EF BE29      OUT	0x39,R2
(0049)  SEI(); //re-enable interrupts
FILE: <library>
    00F0 9478      BSET	7
    00F1 9508      RET
pop_gset2:
    00F2 E0E2      LDI	R30,2
    00F3 C00C      RJMP	pop
push_gset5:
    00F4 92FA      ST	R15,-Y
    00F5 92EA      ST	R14,-Y
push_gset4:
    00F6 92DA      ST	R13,-Y
    00F7 92CA      ST	R12,-Y
push_gset3:
    00F8 92BA      ST	R11,-Y
    00F9 92AA      ST	R10,-Y
push_gset2:
    00FA 937A      ST	R23,-Y
    00FB 936A      ST	R22,-Y
push_gset1:
    00FC 935A      ST	R21,-Y
    00FD 934A      ST	R20,-Y
    00FE 9508      RET
pop_gset1:
    00FF E0E1      LDI	R30,1
pop:
    0100 9149      LD	R20,Y+
    0101 9159      LD	R21,Y+
    0102 FDE0      SBRC	R30,0
    0103 9508      RET
    0104 9169      LD	R22,Y+
    0105 9179      LD	R23,Y+
    0106 FDE1      SBRC	R30,1
    0107 9508      RET
    0108 90A9      LD	R10,Y+
    0109 90B9      LD	R11,Y+
    010A FDE2      SBRC	R30,2
    010B 9508      RET
    010C 90C9      LD	R12,Y+
    010D 90D9      LD	R13,Y+
    010E FDE3      SBRC	R30,3
    010F 9508      RET
    0110 90E9      LD	R14,Y+
    0111 90F9      LD	R15,Y+
    0112 9508      RET

⌨️ 快捷键说明

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