📄 horse.lst
字号:
__text_start:
__start:
72 EFCF LDI R28,0xFF
73 E2D1 LDI R29,0x21
74 BFCD OUT 0x3D,R28
75 BFDE OUT 0x3E,R29
76 51CE SUBI R28,0x1E
77 40D0 SBCI R29,0
78 EA0A LDI R16,0xAA
79 8308 STD Y+0,R16
7A 2400 CLR R0
7B E0E0 LDI R30,0
7C E0F2 LDI R31,2
7D E012 LDI R17,2
7E 30E0 CPI R30,0
7F 07F1 CPC R31,R17
80 F011 BEQ 0x0083
81 9201 ST R0,Z+
82 CFFB RJMP 0x007E
83 8300 STD Z+0,R16
84 EEE4 LDI R30,0xE4
85 E0F0 LDI R31,0
86 E0A0 LDI R26,0
87 E0B2 LDI R27,2
88 E010 LDI R17,0
89 E000 LDI R16,0
8A BF0B OUT 0x3B,R16
8B 3EE4 CPI R30,0xE4
8C 07F1 CPC R31,R17
8D F021 BEQ 0x0092
8E 95C8 LPM
8F 9631 ADIW R30,1
90 920D ST R0,X+
91 CFF9 RJMP 0x008B
92 940E 00E7 CALL _main
_exit:
94 CFFF RJMP _exit
_DelayMs:
j --> R20
i --> R16
95 934A ST R20,-Y
96 935A ST R21,-Y
FILE: F:\机器人3\avr\AVR典型实例\第2章程序\复件IO~1\跑马灯设计\Led.c
(0001) //******************************FileName: LED.C******************************//
(0002) //******************************ICCAVR V6.30编译****************************//
(0003)
(0004) #include<io8535v.h> //头文件,AT90S8535单片机的寄存器定义
(0005) #define uchar unsigned char //数据类型说明
(0006) #define uint unsigned int //数据类型说明
(0007)
(0008) void DelayMs(uint i) //Ms级延时函数,参数i:延时时间
(0009) {uint j;
(0010) for(;i!=0;i--)
97 C00A RJMP 0x00A2
(0011) {for(j=8000;j!=0;j--) ;}
98 E440 LDI R20,0x40
99 E15F LDI R21,0x1F
9A C002 RJMP 0x009D
9B 5041 SUBI R20,1
9C 4050 SBCI R21,0
9D 3040 CPI R20,0
9E 0745 CPC R20,R21
9F F7D9 BNE 0x009B
A0 5001 SUBI R16,1
A1 4010 SBCI R17,0
A2 3000 CPI R16,0
A3 0701 CPC R16,R17
A4 F799 BNE 0x0098
A5 9159 LD R21,Y+
A6 9149 LD R20,Y+
A7 9508 RET
_Horse:
i --> R16
A8 934A ST R20,-Y
A9 935A ST R21,-Y
(0012) }
(0013)
(0014) void Horse(uchar i) //跑马灯程序,通过步判断点亮相应的LED
(0015) {switch(i) //高电平点亮LED
AA 2F40 MOV R20,R16
AB 2755 CLR R21
AC 3041 CPI R20,1
AD E0E0 LDI R30,0
AE 075E CPC R21,R30
AF F0E9 BEQ 0x00CD
B0 3042 CPI R20,2
B1 E0E0 LDI R30,0
B2 075E CPC R21,R30
B3 F0E1 BEQ 0x00D0
B4 3043 CPI R20,3
B5 E0E0 LDI R30,0
B6 075E CPC R21,R30
B7 F0D9 BEQ 0x00D3
B8 3044 CPI R20,4
B9 E0E0 LDI R30,0
BA 075E CPC R21,R30
BB F0D1 BEQ 0x00D6
BC 3045 CPI R20,5
BD E0E0 LDI R30,0
BE 075E CPC R21,R30
BF F0C9 BEQ 0x00D9
C0 3046 CPI R20,6
C1 E0E0 LDI R30,0
C2 075E CPC R21,R30
C3 F0C1 BEQ 0x00DC
C4 3047 CPI R20,7
C5 E0E0 LDI R30,0
C6 075E CPC R21,R30
C7 F0B9 BEQ 0x00DF
C8 3048 CPI R20,0x8
C9 E0E0 LDI R30,0
CA 075E CPC R21,R30
CB F0B1 BEQ 0x00E2
CC C017 RJMP 0x00E4
(0016) {case 1:PORTA=0x01;break; //0000 0001B 点亮LED1
CD E081 LDI R24,1
CE BB8B OUT 0x1B,R24
CF C014 RJMP 0x00E4
(0017) case 2:PORTA=0x03;break; //0000 0011B 点亮LED1~LED2
D0 E083 LDI R24,3
D1 BB8B OUT 0x1B,R24
D2 C011 RJMP 0x00E4
(0018) case 3:PORTA=0x07;break; //0000 0111B 点亮LED1~LED3
D3 E087 LDI R24,7
D4 BB8B OUT 0x1B,R24
D5 C00E RJMP 0x00E4
(0019) case 4:PORTA=0x0f;break; //0000 1111B 点亮LED1~LED4
D6 E08F LDI R24,0xF
D7 BB8B OUT 0x1B,R24
D8 C00B RJMP 0x00E4
(0020) case 5:PORTA=0x1f;break; //0001 1111B 点亮LED1~LED5
D9 E18F LDI R24,0x1F
DA BB8B OUT 0x1B,R24
DB C008 RJMP 0x00E4
(0021) case 6:PORTA=0x3f;break; //0011 1111B 点亮LED1~LED6
DC E38F LDI R24,0x3F
DD BB8B OUT 0x1B,R24
DE C005 RJMP 0x00E4
(0022) case 7:PORTA=0x7f;break; //0111 1111B 点亮LED1~LED7
DF E78F LDI R24,0x7F
E0 BB8B OUT 0x1B,R24
E1 C002 RJMP 0x00E4
(0023) case 8:PORTA=0xff;break; //1111 1111B 点亮LED1~LED8
E2 EF8F LDI R24,0xFF
E3 BB8B OUT 0x1B,R24
(0024) default:break;}
E4 9159 LD R21,Y+
E5 9149 LD R20,Y+
E6 9508 RET
(0025) }
(0026)
(0027) void main(void)
(0028) {uchar i;
(0029) DDRA=0xff; //端口设置:PA口设置为推挽1输出
_main:
i --> R20
E7 EF8F LDI R24,0xFF
E8 BB8A OUT 0x1A,R24
(0030) PORTA=0xff;
E9 BB8B OUT 0x1B,R24
(0031) PORTA=0x00; //PORTA初始值为0,灭掉所有的LED
EA 2422 CLR R2
EB BA2B OUT 0x1B,R2
(0032) DelayMs(1000);
EC EE08 LDI R16,0xE8
ED E013 LDI R17,3
EE DFA6 RCALL _DelayMs
EF C014 RJMP 0x0104
(0033) while(1) //程序无条件执行
(0034) { for(i=0;i<9;i++) //依次点亮LED1~LED8
F0 2744 CLR R20
F1 C006 RJMP 0x00F8
(0035) {Horse(i);
F2 2F04 MOV R16,R20
F3 DFB4 RCALL _Horse
(0036) DelayMs(1000);} //点亮时间约1秒
F4 EE08 LDI R16,0xE8
F5 E013 LDI R17,3
F6 DF9E RCALL _DelayMs
F7 9543 INC R20
F8 3049 CPI R20,0x9
F9 F3C0 BCS 0x00F2
(0037) for(i=7;i!=0;i--) //依次熄灭LED8~LED1
FA E047 LDI R20,7
FB C006 RJMP 0x0102
(0038) {Horse(i);
FC 2F04 MOV R16,R20
FD DFAA RCALL _Horse
(0039) DelayMs(1000);} //熄灭时间约1秒
FILE: <library>
FE EE08 LDI R16,0xE8
FF E013 LDI R17,3
100 DF94 RCALL _DelayMs
101 954A DEC R20
102 2344 TST R20
103 F7C1 BNE 0x00FC
104 CFEB RJMP 0x00F0
105 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -