📄 horse_light.lst
字号:
__text_start:
__start:
0013 E5CF LDI R28,0x5F
0014 E0D4 LDI R29,4
0015 BFCD OUT 0x3D,R28
0016 BFDE OUT 0x3E,R29
0017 51C0 SUBI R28,0x10
0018 40D0 SBCI R29,0
0019 EA0A LDI R16,0xAA
001A 8308 STD Y+0,R16
001B 2400 CLR R0
001C E6E0 LDI R30,0x60
001D E0F0 LDI R31,0
001E E010 LDI R17,0
001F 36E0 CPI R30,0x60
0020 07F1 CPC R31,R17
0021 F011 BEQ 0x0024
0022 9201 ST R0,Z+
0023 CFFB RJMP 0x001F
0024 8300 STD Z+0,R16
0025 E2E6 LDI R30,0x26
0026 E0F0 LDI R31,0
0027 E6A0 LDI R26,0x60
0028 E0B0 LDI R27,0
0029 E010 LDI R17,0
002A 32E6 CPI R30,0x26
002B 07F1 CPC R31,R17
002C F021 BEQ 0x0031
002D 95C8 LPM
002E 9631 ADIW R30,1
002F 920D ST R0,X+
0030 CFF9 RJMP 0x002A
0031 D018 RCALL _main
_exit:
0032 CFFF RJMP _exit
FILE: F:\Learn\AVR\Pro_Mega8\LED\Horse_Light\HorseLight.c
(0001) /******************************************/
(0002) //文件名:HorseLight.c
(0003) //功能: LED的控制
(0004) //作者: young
(0005) //时间: 2006.10.1
(0006) //目标MCU:ATmega8
(0007) //晶振: 8MHZ
(0008) /******************************************/
(0009) #include <iom8v.h>
(0010)
(0011) //延时1MS
(0012) void delay_1ms(void)
(0013) {
(0014) unsigned int i;
(0015) for(i=1;i<(unsigned int)(1144-2);i++)
_delay_1ms:
i --> R16
0033 E001 LDI R16,1
0034 E010 LDI R17,0
0035 C002 RJMP 0x0038
0036 5F0F SUBI R16,0xFF
0037 4F1F SBCI R17,0xFF
0038 3706 CPI R16,0x76
0039 E0E4 LDI R30,4
003A 071E CPC R17,R30
003B F3D0 BCS 0x0036
(0016) ;
(0017) }
003C 9508 RET
_delay_ms:
i --> R20
n --> R22
003D D039 RCALL push_gset2
003E 01B8 MOVW R22,R16
(0018)
(0019) //延时nMS
(0020) void delay_ms(unsigned int n)
(0021) {
(0022) unsigned int i=0;
003F 2744 CLR R20
0040 2755 CLR R21
0041 C003 RJMP 0x0045
(0023) while(i<n)
(0024) {
(0025) delay_1ms();
0042 DFF0 RCALL _delay_1ms
(0026) i++;
0043 5F4F SUBI R20,0xFF
0044 4F5F SBCI R21,0xFF
0045 1746 CP R20,R22
0046 0757 CPC R21,R23
0047 F3D0 BCS 0x0042
(0027) }
(0028) }
0048 D015 RCALL pop_gset2
0049 9508 RET
(0029)
(0030) //主函数,依次顺序打开LED
(0031) void main()
(0032) {
(0033) unsigned char i;
(0034) DDRD=0xFF; //设置D口为输出模式
_main:
i --> R20
004A EF8F LDI R24,0xFF
004B BB81 OUT 0x11,R24
(0035) PORTD=0xFF; //置高电平
004C BB82 OUT 0x12,R24
004D C00E RJMP 0x005C
(0036)
(0037) while (1)
(0038) {
(0039) for(i=0;i<8;i++) //顺序打开LED
004E 2744 CLR R20
004F C00A RJMP 0x005A
(0040) {
(0041) PORTD=~(1<<i);
0050 E001 LDI R16,1
0051 2F14 MOV R17,R20
0052 D027 RCALL lsl8
0053 2E20 MOV R2,R16
0054 9420 COM R2
0055 BA22 OUT 0x12,R2
(0042) delay_ms(200);
0056 EC08 LDI R16,0xC8
0057 E010 LDI R17,0
0058 DFE4 RCALL _delay_ms
0059 9543 INC R20
005A 3048 CPI R20,0x8
005B F3A0 BCS 0x0050
005C CFF1 RJMP 0x004E
(0043) }
(0044) }
(0045) }
FILE: <library>
005D 9508 RET
pop_gset2:
005E E0E2 LDI R30,2
005F C004 RJMP pop
push_gset1:
0060 935A ST R21,-Y
0061 934A ST R20,-Y
0062 9508 RET
pop_gset1:
0063 E0E1 LDI R30,1
pop:
0064 9149 LD R20,Y+
0065 9159 LD R21,Y+
0066 FDE0 SBRC R30,0
0067 9508 RET
0068 9169 LD R22,Y+
0069 9179 LD R23,Y+
006A FDE1 SBRC R30,1
006B 9508 RET
006C 90A9 LD R10,Y+
006D 90B9 LD R11,Y+
006E FDE2 SBRC R30,2
006F 9508 RET
0070 90C9 LD R12,Y+
0071 90D9 LD R13,Y+
0072 FDE3 SBRC R30,3
0073 9508 RET
0074 90E9 LD R14,Y+
0075 90F9 LD R15,Y+
0076 9508 RET
push_gset2:
0077 937A ST R23,-Y
0078 936A ST R22,-Y
0079 CFE6 RJMP push_gset1
lsl8:
007A 2311 TST R17
007B F019 BEQ 0x007F
007C 0F00 LSL R16
007D 951A DEC R17
007E CFFB RJMP lsl8
007F 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -