📄 led流水灯.lst
字号:
__text_start:
__start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E007D CALL _main
_exit:
004A CFFF RJMP _exit
FILE: H:\AVRMega16\LED流水灯\delay.h
(0001) #define xtal 8 //8MS
(0002) /************************************************************
(0003) * 函数名称:void DelayUS(unsigned int time)
(0004) * 功 能:软件延时1.1Us
(0005) * 入口参数:time 延时时间
(0006) * 出口参数:无
(0007) ************************************************************/
(0008) void DelayUS(unsigned int time)
(0009) {
_DelayUS:
time --> R16
004B C002 RJMP 0x004E
(0010) while(time>1)
(0011) time--;
004C 5001 SUBI R16,1
004D 4010 SBCI R17,0
004E E081 LDI R24,1
004F E090 LDI R25,0
0050 1780 CP R24,R16
0051 0791 CPC R25,R17
0052 F3C8 BCS 0x004C
0053 9508 RET
_DelayMS:
i --> R20
time --> R16
0054 940E00BE CALL push_gset1
(0012) }
(0013) /************************************************************
(0014) * 函数名称:void DelayMS(unsigned int time)
(0015) * 功 能:软件延时 1/1000s
(0016) * 入口参数:time 延时时间 MS
(0017) * 出口参数:无
(0018) ************************************************************/
(0019) void DelayMS (unsigned int time)
(0020) {
0056 C009 RJMP 0x0060
(0021) unsigned int i;
(0022) while(time--)
(0023) {
(0024) for(i=1;i<(unsigned int)(xtal*143-2);i++)
0057 E041 LDI R20,1
0058 E050 LDI R21,0
0059 C002 RJMP 0x005C
005A 5F4F SUBI R20,0xFF
005B 4F5F SBCI R21,0xFF
005C 3746 CPI R20,0x76
005D E0E4 LDI R30,4
005E 075E CPC R21,R30
005F F3D0 BCS 0x005A
0060 0118 MOVW R2,R16
0061 5001 SUBI R16,1
0062 4010 SBCI R17,0
0063 2022 TST R2
0064 F791 BNE 0x0057
0065 2033 TST R3
0066 F781 BNE 0x0057
0067 940E00C1 CALL pop_gset1
0069 9508 RET
FILE: H:\AVRMega16\LED流水灯\led流水灯.c
(0001) //内部晶振 8M
(0002) //包含所需头文件
(0003) #include <ioM16v.h>
(0004) #include <macros.h>
(0005) #include "delay.h"
(0006)
(0007)
(0008)
(0009) /*------宏定义------*/
(0010) #define uchar unsigned char
(0011) #define uint unsigned int
(0012)
(0013)
(0014)
(0015) //端口初始化
(0016) void port_init(void)
(0017) {
(0018) PORTA = 0x00;//A口数据置0
_port_init:
006A 2422 CLR R2
006B BA2B OUT 0x1B,R2
(0019) DDRA = 0xFF;//A口设为输出
006C EF8F LDI R24,0xFF
006D BB8A OUT 0x1A,R24
(0020) PORTB = 0x00;//B口数据置1
006E BA28 OUT 0x18,R2
(0021) DDRB = 0x00;//B口设为输入
006F BA27 OUT 0x17,R2
(0022) PORTC = 0x00;
0070 BA25 OUT 0x15,R2
(0023) DDRC = 0xFF;
0071 BB84 OUT 0x14,R24
(0024) PORTD = 0x00;
0072 BA22 OUT 0x12,R2
(0025) DDRD = 0xFF;
0073 BB81 OUT 0x11,R24
0074 9508 RET
(0026) }
(0027)
(0028)
(0029) void init_devices(void)
(0030) {
(0031) CLI(); //禁止所有中断
_init_devices:
0075 94F8 BCLR 7
(0032) MCUCR = 0x00;//INT0、INT1中断触发方式
0076 2422 CLR R2
0077 BE25 OUT 0x35,R2
(0033) MCUCSR = 0x80;//禁止JTAG
0078 E880 LDI R24,0x80
0079 BF84 OUT 0x34,R24
(0034) GICR = 0x00;//外部中断使能
007A BE2B OUT 0x3B,R2
(0035) port_init();
007B DFEE RCALL _port_init
007C 9508 RET
(0036) //SEI();//开全局中断
(0037) }
(0038) //主函数
(0039) void main(void)
(0040) {
(0041) uint n=0;
_main:
n --> R20
j --> R22
007D 2744 CLR R20
007E 2755 CLR R21
(0042) uchar j=0xfe;//定义变量初值
007F EF6E LDI R22,0xFE
(0043) init_devices();//调用初始函数
0080 DFF4 RCALL _init_devices
0081 C032 RJMP 0x00B4
(0044)
(0045)
(0046) while(1)
(0047) {
(0048) for(n=0;n<7;n++)//设置循环
0082 2744 CLR R20
0083 2755 CLR R21
0084 C012 RJMP 0x0097
(0049) {
(0050) PORTA=j;
0085 BB6B OUT 0x1B,R22
(0051) j=(j<<1)|(j>>7);//LED左移
0086 2E26 MOV R2,R22
0087 9426 LSR R2
0088 9426 LSR R2
0089 9426 LSR R2
008A 9426 LSR R2
008B 9426 LSR R2
008C 9426 LSR R2
008D 9426 LSR R2
008E 2E36 MOV R3,R22
008F 0C33 LSL R3
0090 2832 OR R3,R2
0091 2D63 MOV R22,R3
(0052) DelayMS(500);//延时程序
0092 EF04 LDI R16,0xF4
0093 E011 LDI R17,1
0094 DFBF RCALL _DelayMS
0095 5F4F SUBI R20,0xFF
0096 4F5F SBCI R21,0xFF
0097 3047 CPI R20,7
0098 E0E0 LDI R30,0
0099 075E CPC R21,R30
009A F350 BCS 0x0085
(0053) }
(0054) for(n=0;n<7;n++)
009B 2744 CLR R20
009C 2755 CLR R21
009D C012 RJMP 0x00B0
(0055) {
(0056) PORTA=j;
009E BB6B OUT 0x1B,R22
(0057) j=(j>>1)|(j<<7);//LED右移
009F 2E26 MOV R2,R22
00A0 0C22 LSL R2
00A1 0C22 LSL R2
00A2 0C22 LSL R2
00A3 0C22 LSL R2
00A4 0C22 LSL R2
00A5 0C22 LSL R2
00A6 0C22 LSL R2
00A7 2E36 MOV R3,R22
00A8 9436 LSR R3
00A9 2832 OR R3,R2
00AA 2D63 MOV R22,R3
(0058) DelayMS(500);
FILE: <library>
00AB EF04 LDI R16,0xF4
00AC E011 LDI R17,1
00AD DFA6 RCALL _DelayMS
00AE 5F4F SUBI R20,0xFF
00AF 4F5F SBCI R21,0xFF
00B0 3047 CPI R20,7
00B1 E0E0 LDI R30,0
00B2 075E CPC R21,R30
00B3 F350 BCS 0x009E
00B4 CFCD RJMP 0x0082
00B5 9508 RET
push_gset5:
00B6 92FA ST R15,-Y
00B7 92EA ST R14,-Y
push_gset4:
00B8 92DA ST R13,-Y
00B9 92CA ST R12,-Y
push_gset3:
00BA 92BA ST R11,-Y
00BB 92AA ST R10,-Y
push_gset2:
00BC 937A ST R23,-Y
00BD 936A ST R22,-Y
push_gset1:
00BE 935A ST R21,-Y
00BF 934A ST R20,-Y
00C0 9508 RET
pop_gset1:
00C1 E0E1 LDI R30,1
pop:
00C2 9149 LD R20,Y+
00C3 9159 LD R21,Y+
00C4 FDE0 SBRC R30,0
00C5 9508 RET
00C6 9169 LD R22,Y+
00C7 9179 LD R23,Y+
00C8 FDE1 SBRC R30,1
00C9 9508 RET
00CA 90A9 LD R10,Y+
00CB 90B9 LD R11,Y+
00CC FDE2 SBRC R30,2
00CD 9508 RET
00CE 90C9 LD R12,Y+
00CF 90D9 LD R13,Y+
00D0 FDE3 SBRC R30,3
00D1 9508 RET
00D2 90E9 LD R14,Y+
00D3 90F9 LD R15,Y+
00D4 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -