📄 lesson4.lst
字号:
__start:
__text_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 940E00C2 CALL push_gset2
FILE: I:\AVR视频教程\视频教程\lesson4\lesson4\lesson4.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #pragma data:code
(0006) const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0007) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0008) void delay(uint ms)
(0009) {
(0010) uint i,j;
(0011) for(i=0;i<ms;i++)
0063 2744 CLR R20
0064 2755 CLR R21
0065 C00B RJMP 0x0071
(0012) {
(0013) for(j=0;j<1141;j++);
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) }
(0015) }
0074 940E00C6 CALL pop_gset2
0076 9508 RET
_show:
k --> R20
j --> R22
0077 940E00C2 CALL push_gset2
0079 2F42 MOV R20,R18
007A 2F60 MOV R22,R16
(0016) void show(uchar j,uchar k)
(0017) {
(0018) PORTA|=BIT(3);
007B 9ADB SBI P1B,3
(0019) PORTB=table[j];
007C E082 LDI R24,2
007D 9F86 MUL R24,R22
007E 01F0 MOVW R30,R0
007F E680 LDI R24,0x60
0080 E090 LDI R25,0
0081 0FE8 ADD R30,R24
0082 1FF9 ADC R31,R25
0083 9005 LD R0,R0
0084 9014 LD R1,R1
0085 01F0 MOVW R30,R0
0086 BBE8 OUT P18,R30
(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(k);
008A E001 LDI R16,1
008B 2F14 MOV R17,R20
008C 940E00C9 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 940E00C6 CALL pop_gset2
009A 9508 RET
(0028) void main()
(0029) {
(0030) uchar i;
(0031) DDRA|=BIT(3);
_main:
i --> R20
009B 9AD3 SBI P1A,3
(0032) DDRA|=BIT(4);
009C 9AD4 SBI P1A,4
(0033) DDRB=0XFF;
009D EF8F LDI R24,0xFF
009E BB87 OUT P17,R24
009F C009 RJMP 0x00A9
(0034) while(1)
(0035) {
(0036) for(i=1;i<7;i++)
00A0 E041 LDI R20,1
00A1 C005 RJMP 0x00A7
(0037) {
(0038) show(i,i-1);
00A2 2F24 MOV R18,R20
00A3 5021 SUBI R18,1
00A4 2F04 MOV R16,R20
00A5 DFD1 RCALL _show
00A6 9543 INC R20
00A7 3047 CPI R20,7
00A8 F3C8 BCS 0x00A2
00A9 CFF6 RJMP 0x00A0
(0039) }
(0040) }
(0041) }FILE: <library>
00AA 9508 RET
push_gset1:
00AB 935A ST R21,-Y
00AC 934A ST R20,-Y
00AD 9508 RET
pop_gset1:
00AE E0E1 LDI R30,1
pop:
00AF 9149 LD R20,Y+
00B0 9159 LD R21,Y+
00B1 FDE0 SBRC R30,0
00B2 9508 RET
00B3 9169 LD R22,Y+
00B4 9179 LD R23,Y+
00B5 FDE1 SBRC R30,1
00B6 9508 RET
00B7 90A9 LD R10,Y+
00B8 90B9 LD R11,Y+
00B9 FDE2 SBRC R30,2
00BA 9508 RET
00BB 90C9 LD R12,Y+
00BC 90D9 LD R13,Y+
00BD FDE3 SBRC R30,3
00BE 9508 RET
00BF 90E9 LD R14,Y+
00C0 90F9 LD R15,Y+
00C1 9508 RET
push_gset2:
00C2 937A ST R23,-Y
00C3 936A ST R22,-Y
00C4 940C00AB JMP push_gset1
pop_gset2:
00C6 E0E2 LDI R30,2
00C7 940C00AF JMP pop
lsl8:
00C9 2311 TST R17
00CA F019 BEQ 0x00CE
00CB 0F00 LSL R16
00CC 951A DEC R17
00CD CFFB RJMP lsl8
00CE 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -