📄 lesson4.lst
字号:
__start:
__text_start:
23 E5CF LDI R28,0x5F
24 E0D4 LDI R29,4
25 BFCD OUT 0x3D,R28
26 BFDE OUT 0x3E,R29
27 51C0 SUBI R28,0x10
28 40D0 SBCI R29,0
29 EA0A LDI R16,0xAA
2A 8308 STD Y+0,R16
2B 2400 CLR R0
2C E6E0 LDI R30,0x60
2D E0F0 LDI R31,0
2E E010 LDI R17,0
2F 36E0 CPI R30,0x60
30 07F1 CPC R31,R17
31 F011 BEQ 0x0034
32 9201 ST R0,Z+
33 CFFB RJMP 0x002F
34 8300 STD Z+0,R16
35 E4E6 LDI R30,0x46
36 E0F0 LDI R31,0
37 E6A0 LDI R26,0x60
38 E0B0 LDI R27,0
39 E010 LDI R17,0
3A E000 LDI R16,0
3B BF0B OUT 0x3B,R16
3C 34E6 CPI R30,0x46
3D 07F1 CPC R31,R17
3E F021 BEQ 0x0043
3F 95C8 LPM
40 9631 ADIW R30,1
41 920D ST R0,X+
42 CFF9 RJMP 0x003C
43 D037 RCALL _main
_exit:
44 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
45 D068 RCALL push_xgsetF000
FILE: G:\学习\avr\天祥电子AVR视频教程\chengxu\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++)
46 2744 CLR R20
47 2755 CLR R21
48 C00B RJMP 0x0054
(0012) {
(0013) for(j=0;j<1141;j++);
49 2766 CLR R22
4A 2777 CLR R23
4B C002 RJMP 0x004E
4C 5F6F SUBI R22,0xFF
4D 4F7F SBCI R23,0xFF
4E 3765 CPI R22,0x75
4F E0E4 LDI R30,4
50 077E CPC R23,R30
51 F3D0 BCS 0x004C
52 5F4F SUBI R20,0xFF
53 4F5F SBCI R21,0xFF
54 1740 CP R20,R16
55 0751 CPC R21,R17
56 F390 BCS 0x0049
57 C05B RJMP pop_xgsetF000
_show:
k --> R10
j --> R12
58 92AA ST R10,-Y
59 92CA ST R12,-Y
5A 2EA2 MOV R10,R18
5B 2EC0 MOV R12,R16
(0014) }
(0015) }
(0016) void show(uchar j,uchar k)
(0017) {
(0018) PORTA|=BIT(3);
5C 9ADB SBI 0x1B,3
(0019) PORTB=table[j];
5D E286 LDI R24,0x26
5E E090 LDI R25,0
5F 2DEC MOV R30,R12
60 27FF CLR R31
61 0FEE LSL R30
62 1FFF ROL R31
63 0FE8 ADD R30,R24
64 1FF9 ADC R31,R25
65 9025 LPM R2,Z+
66 9034 LPM R3,0(Z)
67 BA28 OUT 0x18,R2
(0020) PORTA&=~BIT(3);
68 98DB CBI 0x1B,3
(0021) PORTB=0XFF;
69 EF8F LDI R24,0xFF
6A BB88 OUT 0x18,R24
(0022) PORTB&=~BIT(k);
6B E001 LDI R16,1
6C 2D1A MOV R17,R10
6D D04A RCALL lsl8
6E 2E20 MOV R2,R16
6F 9420 COM R2
70 B238 IN R3,0x18
71 2032 AND R3,R2
72 BA38 OUT 0x18,R3
(0023) PORTA|=BIT(4);
73 9ADC SBI 0x1B,4
(0024) PORTA&=~BIT(4);
74 98DC CBI 0x1B,4
(0025) delay(50);
75 E302 LDI R16,0x32
76 E010 LDI R17,0
77 DFCD RCALL _delay
78 90C9 LD R12,Y+
79 90A9 LD R10,Y+
7A 9508 RET
(0026) }
(0027) void main()
(0028) {
(0029) uchar i,j;
(0030) DDRA|=BIT(3);
_main:
j --> R20
i --> R22
7B 9AD3 SBI 0x1A,3
(0031) DDRA|=BIT(4);
7C 9AD4 SBI 0x1A,4
(0032) DDRB=0XFF;
7D EF8F LDI R24,0xFF
7E BB87 OUT 0x17,R24
7F C014 RJMP 0x0094
(0033) while(1)
(0034) {
(0035) for(j=0;j<600;j++)
80 2744 CLR R20
81 C010 RJMP 0x0092
(0036) for(i=0;i<6;i++)
82 2766 CLR R22
83 C00B RJMP 0x008F
(0037) show((i+j/100)%6,i);
FILE: <library>
84 2F26 MOV R18,R22
85 E614 LDI R17,0x64
86 2F04 MOV R16,R20
87 D010 RCALL div8u
88 2E20 MOV R2,R16
89 2F06 MOV R16,R22
8A 0D02 ADD R16,R2
8B E016 LDI R17,6
8C D009 RCALL mod8u
8D DFCA RCALL _show
8E 9563 INC R22
8F 3066 CPI R22,6
90 F398 BCS 0x0084
91 9543 INC R20
92 3548 CPI R20,0x58
93 F370 BCS 0x0082
94 CFEB RJMP 0x0080
95 9508 RET
mod8u:
96 9468 BSET 6
97 C001 RJMP xdiv8u
div8u:
98 94E8 BCLR 6
xdiv8u:
99 932A ST R18,-Y
9A 92FA ST R15,-Y
9B 92EA ST R14,-Y
9C 24FF CLR R15
9D 24EE CLR R14
9E E120 LDI R18,0x10
9F 0F00 LSL R16
A0 1CFF ROL R15
A1 1CEE ROL R14
A2 16E1 CP R14,R17
A3 F010 BCS 0x00A6
A4 1AE1 SUB R14,R17
A5 9503 INC R16
A6 952A DEC R18
A7 F7B9 BNE 0x009F
A8 F40E BRTC 0x00AA
A9 2D0E MOV R16,R14
AA 90E9 LD R14,Y+
AB 90F9 LD R15,Y+
AC 9129 LD R18,Y+
AD 9508 RET
push_xgsetF000:
AE 937A ST R23,-Y
AF 936A ST R22,-Y
B0 935A ST R21,-Y
B1 934A ST R20,-Y
B2 9508 RET
pop_xgsetF000:
B3 9149 LD R20,Y+
B4 9159 LD R21,Y+
B5 9169 LD R22,Y+
B6 9179 LD R23,Y+
B7 9508 RET
lsl8:
B8 2311 TST R17
B9 F019 BEQ 0x00BD
BA 0F00 LSL R16
BB 951A DEC R17
BC CFFB RJMP lsl8
BD 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -