📄 horse.lst
字号:
__start:
__text_start:
0000 CFFF RJMP __start
0001 E0D2 LDI R29,2
0002 BFCD OUT 0x3D,R28
0003 BFDE OUT 0x3E,R29
0004 51C0 SUBI R28,0x10
0005 40D0 SBCI R29,0
0006 EA0A LDI R16,0xAA
0007 8308 STD Y+0,R16
0008 2400 CLR R0
0009 E6E0 LDI R30,0x60
000A E0F0 LDI R31,0
000B E010 LDI R17,0
000C 36E0 CPI R30,0x60
000D 07F1 CPC R31,R17
000E F011 BEQ 0x0011
000F 9201 ST R0,Z+
0010 CFFB RJMP 0x000C
0011 8300 STD Z+0,R16
0012 E0E0 LDI R30,0
0013 E0F0 LDI R31,0
0014 E6A0 LDI R26,0x60
0015 E0B0 LDI R27,0
0016 E010 LDI R17,0
0017 30E0 CPI R30,0
0018 07F1 CPC R31,R17
0019 F021 BEQ 0x001E
001A 95C8 LPM
001B 9631 ADIW R30,1
001C 920D ST R0,X+
001D CFF9 RJMP 0x0017
001E D04F RCALL _main
_exit:
001F CFFF RJMP _exit
_DelayMs:
j --> R20
i --> R16
0020 D06C RCALL push_gset1
FILE: C:\DOCUME~1\Administrator\桌面\张军\AVR\AVR单片机系统开发实例稿\第二章\第二章程序\跑马灯设计\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--)
0021 C00A RJMP 0x002C
(0011) {for(j=8000;j!=0;j--) ;}
0022 E440 LDI R20,0x40
0023 E15F LDI R21,0x1F
0024 C002 RJMP 0x0027
0025 5041 SUBI R20,1
0026 4050 SBCI R21,0
0027 3040 CPI R20,0
0028 0745 CPC R20,R21
0029 F7D9 BNE 0x0025
002A 5001 SUBI R16,1
002B 4010 SBCI R17,0
002C 3000 CPI R16,0
002D 0701 CPC R16,R17
002E F799 BNE 0x0022
(0012) }
002F D060 RCALL pop_gset1
0030 9508 RET
_Horse:
i --> R16
0031 D05B RCALL push_gset1
(0013)
(0014) void Horse(uchar i) //跑马灯程序,通过步判断点亮相应的LED
(0015) {switch(i) //高电平点亮LED
0032 2F40 MOV R20,R16
0033 2755 CLR R21
0034 3041 CPI R20,1
0035 E0E0 LDI R30,0
0036 075E CPC R21,R30
0037 F0E9 BEQ 0x0055
0038 3042 CPI R20,2
0039 E0E0 LDI R30,0
003A 075E CPC R21,R30
003B F0E1 BEQ 0x0058
003C 3043 CPI R20,3
003D E0E0 LDI R30,0
003E 075E CPC R21,R30
003F F0D9 BEQ 0x005B
0040 3044 CPI R20,4
0041 E0E0 LDI R30,0
0042 075E CPC R21,R30
0043 F0D1 BEQ 0x005E
0044 3045 CPI R20,5
0045 E0E0 LDI R30,0
0046 075E CPC R21,R30
0047 F0C9 BEQ 0x0061
0048 3046 CPI R20,6
0049 E0E0 LDI R30,0
004A 075E CPC R21,R30
004B F0C1 BEQ 0x0064
004C 3047 CPI R20,7
004D E0E0 LDI R30,0
004E 075E CPC R21,R30
004F F0B9 BEQ 0x0067
0050 3048 CPI R20,0x8
0051 E0E0 LDI R30,0
0052 075E CPC R21,R30
0053 F0B1 BEQ 0x006A
0054 C017 RJMP 0x006C
(0016) {case 1:PORTA=0x01;break; //0000 0001B 点亮LED1
0055 E081 LDI R24,1
0056 BB8B OUT 0x1B,R24
0057 C014 RJMP 0x006C
(0017) case 2:PORTA=0x03;break; //0000 0011B 点亮LED1~LED2
0058 E083 LDI R24,3
0059 BB8B OUT 0x1B,R24
005A C011 RJMP 0x006C
(0018) case 3:PORTA=0x07;break; //0000 0111B 点亮LED1~LED3
005B E087 LDI R24,7
005C BB8B OUT 0x1B,R24
005D C00E RJMP 0x006C
(0019) case 4:PORTA=0x0f;break; //0000 1111B 点亮LED1~LED4
005E E08F LDI R24,0xF
005F BB8B OUT 0x1B,R24
0060 C00B RJMP 0x006C
(0020) case 5:PORTA=0x1f;break; //0001 1111B 点亮LED1~LED5
0061 E18F LDI R24,0x1F
0062 BB8B OUT 0x1B,R24
0063 C008 RJMP 0x006C
(0021) case 6:PORTA=0x3f;break; //0011 1111B 点亮LED1~LED6
0064 E38F LDI R24,0x3F
0065 BB8B OUT 0x1B,R24
0066 C005 RJMP 0x006C
(0022) case 7:PORTA=0x7f;break; //0111 1111B 点亮LED1~LED7
0067 E78F LDI R24,0x7F
0068 BB8B OUT 0x1B,R24
0069 C002 RJMP 0x006C
(0023) case 8:PORTA=0xff;break; //1111 1111B 点亮LED1~LED8
006A EF8F LDI R24,0xFF
006B BB8B OUT 0x1B,R24
(0024) default:break;}
(0025) }
006C D023 RCALL pop_gset1
006D 9508 RET
(0026)
(0027) void main(void)
(0028) {uchar i;
(0029) DDRA=0xff; //端口设置:PA口设置为推挽1输出
_main:
i --> R20
006E EF8F LDI R24,0xFF
006F BB8A OUT 0x1A,R24
(0030) PORTA=0xff;
0070 BB8B OUT 0x1B,R24
(0031) PORTA=0x00; //PORTA初始值为0,灭掉所有的LED
0071 2422 CLR R2
0072 BA2B OUT 0x1B,R2
(0032) DelayMs(1000);
0073 EE08 LDI R16,0xE8
0074 E013 LDI R17,3
0075 DFAA RCALL _DelayMs
0076 C014 RJMP 0x008B
(0033) while(1) //程序无条件执行
(0034) { for(i=0;i<9;i++) //依次点亮LED1~LED8
0077 2744 CLR R20
0078 C006 RJMP 0x007F
(0035) {Horse(i);
0079 2F04 MOV R16,R20
007A DFB6 RCALL _Horse
(0036) DelayMs(1000);} //点亮时间约1秒
007B EE08 LDI R16,0xE8
007C E013 LDI R17,3
007D DFA2 RCALL _DelayMs
007E 9543 INC R20
007F 3049 CPI R20,0x9
0080 F3C0 BCS 0x0079
(0037) for(i=7;i!=0;i--) //依次熄灭LED8~LED1
0081 E047 LDI R20,7
0082 C006 RJMP 0x0089
(0038) {Horse(i);
0083 2F04 MOV R16,R20
0084 DFAC RCALL _Horse
(0039) DelayMs(1000);} //熄灭时间约1秒
0085 EE08 LDI R16,0xE8
0086 E013 LDI R17,3
0087 DF98 RCALL _DelayMs
0088 954A DEC R20
0089 2344 TST R20
008A F7C1 BNE 0x0083
008B CFEB RJMP 0x0077
(0040) }
(0041) }
FILE: <library>
008C 9508 RET
push_gset1:
008D 935A ST R21,-Y
008E 934A ST R20,-Y
008F 9508 RET
pop_gset1:
0090 E0E1 LDI R30,1
pop:
0091 9149 LD R20,Y+
0092 9159 LD R21,Y+
0093 FDE0 SBRC R30,0
0094 9508 RET
0095 9169 LD R22,Y+
0096 9179 LD R23,Y+
0097 FDE1 SBRC R30,1
0098 9508 RET
0099 90A9 LD R10,Y+
009A 90B9 LD R11,Y+
009B FDE2 SBRC R30,2
009C 9508 RET
009D 90C9 LD R12,Y+
009E 90D9 LD R13,Y+
009F FDE3 SBRC R30,3
00A0 9508 RET
00A1 90E9 LD R14,Y+
00A2 90F9 LD R15,Y+
00A3 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -