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