📄 shuma.lst
字号:
__text_start:
__start:
0040 E5CF LDI R28,0x5F
0041 E0D4 LDI R29,4
0042 BFCD OUT P3D,R28
0043 BFDE OUT P3E,R29
0044 51C0 SUBI R28,0x10
0045 40D0 SBCI R29,0
0046 EA0A LDI R16,0xAA
0047 8308 STD R16,0+Y
0048 2400 CLR R0
0049 E6E0 LDI R30,0x60
004A E0F0 LDI R31,0
004B E010 LDI R17,0
004C 36E0 CPI R30,0x60
004D 07F1 CPC R31,R17
004E F011 BEQ 0x0051
004F 9201 ST R0,Z+
0050 CFFB RJMP 0x004C
0051 8300 STD R16,0+Z
0052 E8E0 LDI R30,0x80
0053 E0F0 LDI R31,0
0054 E6A0 LDI R26,0x60
0055 E0B0 LDI R27,0
0056 E010 LDI R17,0
0057 38E0 CPI R30,0x80
0058 07F1 CPC R31,R17
0059 F021 BEQ 0x005E
005A 95C8 LPM
005B 9631 ADIW R30,1
005C 920D ST R0,X+
005D CFF9 RJMP 0x0057
005E 940E009B CALL _main
_exit:
0060 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
MS --> R16
0061 940E0100 CALL push_gset2
FILE: C:\icc\examples.avr\learn\shumaguan\shuma.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003)
(0004) #define uchar unsigned char
(0005) #define uint unsigned int
(0006) #pragma data:code
(0007) const table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0008) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0009) void delay(uint MS)
(0010) {
(0011) uint i,j;
(0012) for( i=0;i<MS;i++)
0063 2744 CLR R20
0064 2755 CLR R21
0065 C00B RJMP 0x0071
(0013) for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
0066 2766 CLR R22
0067 2777 CLR R23
0068 C002 RJMP 0x006B
0069 5F6F SUBI R22,0xFF
006A 4F7F SBCI R23,0xFF
006B 3765 CPI R22,0x75
006C E0E4 LDI R30,4
006D 077E CPC R23,R30
006E F3D0 BCS 0x0069
006F 5F4F SUBI R20,0xFF
0070 4F5F SBCI R21,0xFF
0071 1740 CP R20,R16
0072 0751 CPC R21,R17
0073 F390 BCS 0x0066
(0014) }
0074 940E0104 CALL pop_gset2
0076 9508 RET
_show:
num --> R20
data --> R22
0077 940E0100 CALL push_gset2
0079 2F42 MOV R20,R18
007A 2F60 MOV R22,R16
(0015)
(0016) void show(uchar data,uchar num)
(0017) {
(0018) PORTB=table[data];
007B E082 LDI R24,2
007C 9F86 MUL R24,R22
007D 01F0 MOVW R30,R0
007E E680 LDI R24,0x60
007F E090 LDI R25,0
0080 0FE8 ADD R30,R24
0081 1FF9 ADC R31,R25
0082 9005 LD R0,R0
0083 9014 LD R1,R1
0084 01F0 MOVW R30,R0
0085 BBE8 OUT P18,R30
(0019) PORTA|=BIT(3);//00001000
0086 9ADB SBI P1B,3
(0020) PORTA&=~BIT(3);
0087 98DB CBI P1B,3
(0021)
(0022) PORTB=0XFF;
0088 EF8F LDI R24,0xFF
0089 BB88 OUT P18,R24
(0023) PORTB&=~BIT(num);//0XFE;
008A E001 LDI R16,1
008B 2F14 MOV R17,R20
008C 940E0107 CALL lsl8
008E 2E20 MOV R2,R16
008F 9420 COM R2
0090 B238 IN R3,P18
0091 2032 AND R3,R2
0092 BA38 OUT P18,R3
(0024) PORTA|=BIT(4);
0093 9ADC SBI P1B,4
(0025) PORTA&=~BIT(4);
0094 98DC CBI P1B,4
(0026) delay(1);
0095 E001 LDI R16,1
0096 E010 LDI R17,0
0097 DFC9 RCALL _delay
(0027) }
0098 940E0104 CALL pop_gset2
009A 9508 RET
(0028) void main()
(0029) {
(0030) uint i,j;
(0031) DDRA=0XFF;
_main:
j --> R20
i --> R22
009B EF8F LDI R24,0xFF
009C BB8A OUT P1A,R24
(0032) DDRB=0XFF;
009D BB87 OUT P17,R24
(0033) PORTA|=BIT(6);
009E 9ADE SBI P1B,6
009F C02B RJMP 0x00CB
(0034)
(0035) /* PORTB=0X3F;
(0036) PORTA|=BIT(3);//00001000
(0037) PORTA&=~BIT(3);
(0038)
(0039) PORTB=0XFE;
(0040) PORTA|=BIT(4);
(0041) PORTA&=~BIT(4);*/
(0042) while(1)
(0043) {
(0044) for(j=0;j<600;j++)
00A0 2744 CLR R20
00A1 2755 CLR R21
00A2 C024 RJMP 0x00C7
(0045) {
(0046) for(i=0;i<6;i++)
00A3 2766 CLR R22
00A4 2777 CLR R23
00A5 C01B RJMP 0x00C1
(0047) {
(0048) show((i+j/100)%6,i);
00A6 2F26 MOV R18,R22
00A7 E684 LDI R24,0x64
00A8 E090 LDI R25,0
00A9 932F PUSH R18
00AA 933F PUSH R19
00AB 019C MOVW R18,R24
00AC 018A MOVW R16,R20
00AD 940E00CF CALL div16u
00AF 0118 MOVW R2,R16
00B0 913F POP R19
00B1 912F POP R18
00B2 018B MOVW R16,R22
00B3 0D02 ADD R16,R2
00B4 1D13 ADC R17,R3
00B5 E086 LDI R24,6
00B6 E090 LDI R25,0
00B7 932F PUSH R18
00B8 933F PUSH R19
00B9 019C MOVW R18,R24
00BA 940E00CD CALL mod16u
00BC 913F POP R19
00BD 912F POP R18
00BE DFB8 RCALL _show
00BF 5F6F SUBI R22,0xFF
00C0 4F7F SBCI R23,0xFF
00C1 3066 CPI R22,6
00C2 E0E0 LDI R30,0
00C3 077E CPC R23,R30
00C4 F308 BCS 0x00A6
00C5 5F4F SUBI R20,0xFF
00C6 4F5F SBCI R21,0xFF
00C7 3548 CPI R20,0x58
00C8 E0E2 LDI R30,2
00C9 075E CPC R21,R30
00CA F2C0 BCS 0x00A3
00CB CFD4 RJMP 0x00A0
(0049) }
(0050) }
(0051) }
(0052)
(0053) }FILE: <library>
00CC 9508 RET
mod16u:
00CD 9468 BSET 6
00CE C001 RJMP xdiv16u
div16u:
00CF 94E8 BCLR 6
xdiv16u:
00D0 92EA ST R14,-Y
00D1 92FA ST R15,-Y
00D2 938A ST R24,-Y
00D3 24EE CLR R14
00D4 24FF CLR R15
00D5 E180 LDI R24,0x10
00D6 0F00 LSL R16
00D7 1F11 ROL R17
00D8 1CEE ROL R14
00D9 1CFF ROL R15
00DA 16E2 CP R14,R18
00DB 06F3 CPC R15,R19
00DC F018 BCS 0x00E0
00DD 1AE2 SUB R14,R18
00DE 0AF3 SBC R15,R19
00DF 9503 INC R16
00E0 958A DEC R24
00E1 F7A1 BNE 0x00D6
00E2 F416 BRTC 0x00E5
00E3 2D0E MOV R16,R14
00E4 2D1F MOV R17,R15
00E5 9189 LD R24,Y+
00E6 90F9 LD R15,Y+
00E7 90E9 LD R14,Y+
00E8 9508 RET
push_gset1:
00E9 935A ST R21,-Y
00EA 934A ST R20,-Y
00EB 9508 RET
pop_gset1:
00EC E0E1 LDI R30,1
pop:
00ED 9149 LD R20,Y+
00EE 9159 LD R21,Y+
00EF FDE0 SBRC R30,0
00F0 9508 RET
00F1 9169 LD R22,Y+
00F2 9179 LD R23,Y+
00F3 FDE1 SBRC R30,1
00F4 9508 RET
00F5 90A9 LD R10,Y+
00F6 90B9 LD R11,Y+
00F7 FDE2 SBRC R30,2
00F8 9508 RET
00F9 90C9 LD R12,Y+
00FA 90D9 LD R13,Y+
00FB FDE3 SBRC R30,3
00FC 9508 RET
00FD 90E9 LD R14,Y+
00FE 90F9 LD R15,Y+
00FF 9508 RET
push_gset2:
0100 937A ST R23,-Y
0101 936A ST R22,-Y
0102 940C00E9 JMP push_gset1
pop_gset2:
0104 E0E2 LDI R30,2
0105 940C00ED JMP pop
lsl8:
0107 2311 TST R17
0108 F019 BEQ 0x010C
0109 0F00 LSL R16
010A 951A DEC R17
010B CFFB RJMP lsl8
010C 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -