📄 shuma.lst
字号:
__start:
__text_start:
0019 E5CF LDI R28,0x5F
001A E0D2 LDI R29,2
001B BFCD OUT 0x3D,R28
001C BFDE OUT 0x3E,R29
001D 51C0 SUBI R28,0x10
001E 40D0 SBCI R29,0
001F EA0A LDI R16,0xAA
0020 8308 STD Y+0,R16
0021 2400 CLR R0
0022 E6E0 LDI R30,0x60
0023 E0F0 LDI R31,0
0024 E010 LDI R17,0
0025 36E0 CPI R30,0x60
0026 07F1 CPC R31,R17
0027 F011 BEQ 0x002A
0028 9201 ST R0,Z+
0029 CFFB RJMP 0x0025
002A 8300 STD Z+0,R16
002B E3E2 LDI R30,0x32
002C E0F0 LDI R31,0
002D E6A0 LDI R26,0x60
002E E0B0 LDI R27,0
002F E010 LDI R17,0
0030 33E2 CPI R30,0x32
0031 07F1 CPC R31,R17
0032 F021 BEQ 0x0037
0033 95C8 LPM
0034 9631 ADIW R30,1
0035 920D ST R0,X+
0036 CFF9 RJMP 0x0030
0037 D018 RCALL _main
_exit:
0038 CFFF RJMP _exit
FILE: C:\ATMega8515\数码管\init.c
(0001) //ICC-AVR application builder : 2006-4-27 13:17:05
(0002) // Target : M8515
(0003) // Crystal: 11.0592Mhz
(0004)
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007)
(0008) void port_init(void)
(0009) {
(0010) PORTA = 0x00;
_port_init:
0039 2422 CLR R2
003A BA2B OUT 0x1B,R2
(0011) DDRA = 0xFF;
003B EF8F LDI R24,0xFF
003C BB8A OUT 0x1A,R24
(0012) PORTB = 0x00;
003D BA28 OUT 0x18,R2
(0013) DDRB = 0x00;
003E BA27 OUT 0x17,R2
(0014) PORTC = 0xC0;
003F EC80 LDI R24,0xC0
0040 BB85 OUT 0x15,R24
(0015) DDRC = 0xC0;
0041 BB84 OUT 0x14,R24
(0016) PORTD = 0x00;
0042 BA22 OUT 0x12,R2
(0017) DDRD = 0x00;
0043 BA21 OUT 0x11,R2
(0018) PORTE = 0x00;
0044 B827 OUT 0x07,R2
(0019) DDRE = 0x00;
0045 B826 OUT 0x06,R2
0046 9508 RET
(0020) }
(0021)
(0022) //call this routine to initialize all peripherals
(0023) void init_devices(void)
(0024) {
(0025) //stop errant interrupts until set up
(0026) CLI(); //disable all interrupts
_init_devices:
0047 94F8 BCLR 7
(0027) port_init();
0048 DFF0 RCALL _port_init
(0028)
(0029) MCUCR = 0x00;
0049 2422 CLR R2
004A BE25 OUT 0x35,R2
(0030) EMCUCR = 0x00;
004B BE26 OUT 0x36,R2
(0031) GICR = 0x00;
004C BE2B OUT 0x3B,R2
(0032) TIMSK = 0x00;
004D BE29 OUT 0x39,R2
(0033) SEI(); //re-enable interrupts
004E 9478 BSET 7
004F 9508 RET
FILE: C:\ATMega8515\数码管\main.c
(0001) #include <iom8515v.h>
(0002) #include"ForATmega8515.h"
(0003)
(0004) void delay(uint ticks);
(0005) void display(uchar left,uchar right);
(0006)
(0007) void main()
(0008) {
(0009) uchar count=0;
_main:
softdelay --> R20
count --> R22
0050 2766 CLR R22
(0010) uint softdelay=1000;
0051 EE48 LDI R20,0xE8
0052 E053 LDI R21,3
(0011) init_devices();
0053 DFF3 RCALL _init_devices
0054 C017 RJMP 0x006C
(0012) while(1)
(0013) {
(0014) while(softdelay--)display(count/10,count%10);
0055 E01A LDI R17,0xA
0056 2F06 MOV R16,R22
0057 D043 RCALL mod8u
0058 2F20 MOV R18,R16
0059 E01A LDI R17,0xA
005A 2F06 MOV R16,R22
005B D041 RCALL div8u
005C D01F RCALL _display
005D 011A MOVW R2,R20
005E 5041 SUBI R20,1
005F 4050 SBCI R21,0
0060 2022 TST R2
0061 F799 BNE 0x0055
0062 2033 TST R3
0063 F789 BNE 0x0055
(0015) softdelay=1000;
0064 EE48 LDI R20,0xE8
0065 E053 LDI R21,3
(0016) if(++count==100)count=0;
0066 2F86 MOV R24,R22
0067 5F8F SUBI R24,0xFF
0068 2F68 MOV R22,R24
0069 3664 CPI R22,0x64
006A F409 BNE 0x006C
006B 2766 CLR R22
006C CFF0 RJMP 0x005D
006D 9508 RET
_delay:
i --> R20
ticks --> R16
006E D04E RCALL push_gset1
(0017) }
(0018) }
(0019)
(0020) void delay(uint ticks)
(0021) {
(0022) uchar i;
(0023) for(;ticks!=0;ticks--)for(i=200;i!=0;i--);
006F C007 RJMP 0x0077
0070 EC48 LDI R20,0xC8
0071 C001 RJMP 0x0073
0072 954A DEC R20
0073 2344 TST R20
0074 F7E9 BNE 0x0072
0075 5001 SUBI R16,1
0076 4010 SBCI R17,0
0077 3000 CPI R16,0
0078 0701 CPC R16,R17
0079 F7B1 BNE 0x0070
007A D045 RCALL pop_gset1
007B 9508 RET
_display:
right --> R20
left --> R22
007C D03E RCALL push_gset2
007D 2F42 MOV R20,R18
007E 2F60 MOV R22,R16
(0024) }
(0025)
(0026) void display(uchar left,uchar right)
(0027) {
(0028) PORTA=Tab[left];//查表显示数码管
007F E282 LDI R24,0x22
0080 E090 LDI R25,0
0081 2FE6 MOV R30,R22
0082 27FF CLR R31
0083 0FE8 ADD R30,R24
0084 1FF9 ADC R31,R25
0085 91E4 LPM R30,0(Z)
0086 BBEB OUT 0x1B,R30
(0029) PORTC&=~SEG0; //选通左边的数码管
0087 98AF CBI 0x15,7
(0030) delay(1); //延时
0088 E001 LDI R16,1
0089 E010 LDI R17,0
008A DFE3 RCALL _delay
(0031) PORTC|=SEG0; //关左边的数码管
008B 9AAF SBI 0x15,7
(0032) PORTA=Tab[right];//查表显示数码管
008C E282 LDI R24,0x22
008D E090 LDI R25,0
008E 2FE4 MOV R30,R20
008F 27FF CLR R31
0090 0FE8 ADD R30,R24
0091 1FF9 ADC R31,R25
0092 91E4 LPM R30,0(Z)
0093 BBEB OUT 0x1B,R30
(0033) PORTC&=~SEG1; //选通右边的数码管
0094 98AE CBI 0x15,6
(0034) delay(1);
0095 E001 LDI R16,1
0096 E010 LDI R17,0
0097 DFD6 RCALL _delay
(0035) PORTC|=SEG1; //关右边的数码管
FILE: <library>
0098 9AAE SBI 0x15,6
0099 D019 RCALL pop_gset2
009A 9508 RET
mod8u:
009B 9468 BSET 6
009C C001 RJMP xdiv8u
div8u:
009D 94E8 BCLR 6
xdiv8u:
009E 932A ST R18,-Y
009F 92FA ST R15,-Y
00A0 92EA ST R14,-Y
00A1 24FF CLR R15
00A2 24EE CLR R14
00A3 E120 LDI R18,0x10
00A4 0F00 LSL R16
00A5 1CFF ROL R15
00A6 1CEE ROL R14
00A7 16E1 CP R14,R17
00A8 F010 BCS 0x00AB
00A9 1AE1 SUB R14,R17
00AA 9503 INC R16
00AB 952A DEC R18
00AC F7B9 BNE 0x00A4
00AD F40E BRTC 0x00AF
00AE 2D0E MOV R16,R14
00AF 90E9 LD R14,Y+
00B0 90F9 LD R15,Y+
00B1 9129 LD R18,Y+
00B2 9508 RET
pop_gset2:
00B3 E0E2 LDI R30,2
00B4 C00C RJMP pop
push_gset5:
00B5 92FA ST R15,-Y
00B6 92EA ST R14,-Y
push_gset4:
00B7 92DA ST R13,-Y
00B8 92CA ST R12,-Y
push_gset3:
00B9 92BA ST R11,-Y
00BA 92AA ST R10,-Y
push_gset2:
00BB 937A ST R23,-Y
00BC 936A ST R22,-Y
push_gset1:
00BD 935A ST R21,-Y
00BE 934A ST R20,-Y
00BF 9508 RET
pop_gset1:
00C0 E0E1 LDI R30,1
pop:
00C1 9149 LD R20,Y+
00C2 9159 LD R21,Y+
00C3 FDE0 SBRC R30,0
00C4 9508 RET
00C5 9169 LD R22,Y+
00C6 9179 LD R23,Y+
00C7 FDE1 SBRC R30,1
00C8 9508 RET
00C9 90A9 LD R10,Y+
00CA 90B9 LD R11,Y+
00CB FDE2 SBRC R30,2
00CC 9508 RET
00CD 90C9 LD R12,Y+
00CE 90D9 LD R13,Y+
00CF FDE3 SBRC R30,3
00D0 9508 RET
00D1 90E9 LD R14,Y+
00D2 90F9 LD R15,Y+
00D3 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -