📄 lius.lst
字号:
__start:
__text_start:
2A E5CF LDI R28,0x5F
2B E0D4 LDI R29,4
2C BFCD OUT 0x3D,R28
2D BFDE OUT 0x3E,R29
2E 51CE SUBI R28,0x1E
2F 40D0 SBCI R29,0
30 EA0A LDI R16,0xAA
31 8308 STD Y+0,R16
32 2400 CLR R0
33 E6E0 LDI R30,0x60
34 E0F0 LDI R31,0
35 E010 LDI R17,0
36 36E0 CPI R30,0x60
37 07F1 CPC R31,R17
38 F011 BEQ 0x003B
39 9201 ST R0,Z+
3A CFFB RJMP 0x0036
3B 8300 STD Z+0,R16
3C E5E4 LDI R30,0x54
3D E0F0 LDI R31,0
3E E6A0 LDI R26,0x60
3F E0B0 LDI R27,0
40 E010 LDI R17,0
41 E000 LDI R16,0
42 BF0B OUT 0x3B,R16
43 35E4 CPI R30,0x54
44 07F1 CPC R31,R17
45 F021 BEQ 0x004A
46 95C8 LPM
47 9631 ADIW R30,1
48 920D ST R0,X+
49 CFF9 RJMP 0x0043
4A 940E 013B CALL _main
_exit:
4C CFFF RJMP _exit
_Delay:
a --> R16
b --> R18
c --> R20
4D 934A ST R20,-Y
FILE: D:\试验\ls.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005)
(0006) void Delay() //延时函数
(0007) {
(0008) uchar a, b, c;
(0009) for (a = 1; a; a++)
4E E001 LDI R16,1
4F C00B RJMP 0x005B
(0010) for (b = 1; b; b++)
50 E021 LDI R18,1
51 C006 RJMP 0x0058
(0011) for (c = 0; c<10; c++) //循环次数=255*255*10
52 2744 CLR R20
53 C001 RJMP 0x0055
54 9543 INC R20
55 304A CPI R20,0xA
56 F3E8 BCS 0x0054
57 9523 INC R18
58 2322 TST R18
59 F7C1 BNE 0x0052
5A 9503 INC R16
5B 2300 TST R16
5C F799 BNE 0x0050
5D 9149 LD R20,Y+
5E 9508 RET
_DelayMs:
j --> R20
i --> R16
5F 934A ST R20,-Y
60 935A ST R21,-Y
(0012) ;
(0013) }
(0014)
(0015) void DelayMs(uint i) //1ms延时,准确性较Delay();高
(0016) {
61 C00A RJMP 0x006C
(0017) while(i--)
(0018) {
(0019) uint j;
(0020) for(j=1;j<=613;j++)
62 E041 LDI R20,1
63 E050 LDI R21,0
64 C002 RJMP 0x0067
65 5F4F SUBI R20,0xFF
66 4F5F SBCI R21,0xFF
67 E685 LDI R24,0x65
68 E092 LDI R25,2
69 1784 CP R24,R20
6A 0795 CPC R25,R21
6B F7C8 BCC 0x0065
6C 0118 MOVW R2,R16
6D 5001 SUBI R16,1
6E 4010 SBCI R17,0
6F 2022 TST R2
70 F789 BNE 0x0062
71 2033 TST R3
72 F779 BNE 0x0062
73 9159 LD R21,Y+
74 9149 LD R20,Y+
75 9508 RET
(0021) ;
(0022) }
(0023) }
(0024)
(0025) void LED_on() //打开所有LED
(0026) {
(0027) PORTC =0X00;
_LED_on:
76 2422 CLR R2
77 BA25 OUT 0x15,R2
(0028) Delay();
78 DFD4 RCALL _Delay
79 9508 RET
(0029) }
(0030)
(0031) void LED_off() //关闭所有LED
(0032) {
(0033) PORTC = 0xFF;
_LED_off:
7A EF8F LDI R24,0xFF
7B BB85 OUT 0x15,R24
(0034) Delay();
7C DFD0 RCALL _Delay
7D 9508 RET
_LED_01:
i --> R10
7E 92AA ST R10,-Y
7F 92BA ST R11,-Y
80 0158 MOVW R10,R16
(0035) }
(0036)
(0037) void LED_01(int i) //LED亮灭控制
(0038) {
(0039) PORTC = ~BIT(i); //输出低电平
81 E001 LDI R16,1
82 E010 LDI R17,0
83 0195 MOVW R18,R10
84 940E 0238 CALL lsl16
86 0118 MOVW R2,R16
87 9420 COM R2
88 9430 COM R3
89 BA25 OUT 0x15,R2
(0040) DelayMs(100); //调用延时程序
8A E604 LDI R16,0x64
8B E010 LDI R17,0
8C DFD2 RCALL _DelayMs
8D 90B9 LD R11,Y+
8E 90A9 LD R10,Y+
8F 9508 RET
_LED_02:
i --> R20
90 934A ST R20,-Y
91 935A ST R21,-Y
92 01A8 MOVW R20,R16
(0041) }
(0042)
(0043) void LED_02(int i) //间隔点亮
(0044) {
(0045) PORTC=~(BIT(i)|BIT(i-2));
93 019A MOVW R18,R20
94 5022 SUBI R18,2
95 4030 SBCI R19,0
96 E001 LDI R16,1
97 E010 LDI R17,0
98 940E 0238 CALL lsl16
9A 0118 MOVW R2,R16
9B E001 LDI R16,1
9C E010 LDI R17,0
9D 019A MOVW R18,R20
9E 940E 0238 CALL lsl16
A0 0128 MOVW R4,R16
A1 2842 OR R4,R2
A2 2853 OR R5,R3
A3 9440 COM R4
A4 9450 COM R5
A5 BA45 OUT 0x15,R4
(0046) DelayMs(100);
A6 E604 LDI R16,0x64
A7 E010 LDI R17,0
A8 DFB6 RCALL _DelayMs
A9 9159 LD R21,Y+
AA 9149 LD R20,Y+
AB 9508 RET
_LED_03:
i --> R20
AC 934A ST R20,-Y
AD 935A ST R21,-Y
AE 01A8 MOVW R20,R16
(0047) }
(0048)
(0049) void LED_03(int i) //相临点亮
(0050) {
(0051) PORTC=~(BIT(i)|BIT(i-1)); //~后内容需用括号括起来
AF 019A MOVW R18,R20
B0 5021 SUBI R18,1
B1 4030 SBCI R19,0
B2 E001 LDI R16,1
B3 E010 LDI R17,0
B4 940E 0238 CALL lsl16
B6 0118 MOVW R2,R16
B7 E001 LDI R16,1
B8 E010 LDI R17,0
B9 019A MOVW R18,R20
BA 940E 0238 CALL lsl16
BC 0128 MOVW R4,R16
BD 2842 OR R4,R2
BE 2853 OR R5,R3
BF 9440 COM R4
C0 9450 COM R5
C1 BA45 OUT 0x15,R4
(0052) DelayMs(100);
C2 E604 LDI R16,0x64
C3 E010 LDI R17,0
C4 DF9A RCALL _DelayMs
C5 9159 LD R21,Y+
C6 9149 LD R20,Y+
C7 9508 RET
_LED_04:
i --> R20
C8 934A ST R20,-Y
C9 935A ST R21,-Y
CA 01A8 MOVW R20,R16
(0053) }
(0054)
(0055) void LED_04(int i) //发散聚集点亮
(0056) {
(0057) switch(i)
CB 3040 CPI R20,0
CC 0745 CPC R20,R21
CD F069 BEQ 0x00DB
CE 3041 CPI R20,1
CF E0E0 LDI R30,0
D0 075E CPC R21,R30
D1 F079 BEQ 0x00E1
D2 3042 CPI R20,2
D3 E0E0 LDI R30,0
D4 075E CPC R21,R30
D5 F089 BEQ 0x00E7
D6 3043 CPI R20,3
D7 E0E0 LDI R30,0
D8 075E CPC R21,R30
D9 F099 BEQ 0x00ED
DA C017 RJMP 0x00F2
(0058) {
(0059) case 0:PORTC=0xE7;DelayMs(100);break; //延时100ms
DB EE87 LDI R24,0xE7
DC BB85 OUT 0x15,R24
DD E604 LDI R16,0x64
DE E010 LDI R17,0
DF DF7F RCALL _DelayMs
E0 C011 RJMP 0x00F2
(0060) case 1:PORTC=0xDB;DelayMs(100);break;
E1 ED8B LDI R24,0xDB
E2 BB85 OUT 0x15,R24
E3 E604 LDI R16,0x64
E4 E010 LDI R17,0
E5 DF79 RCALL _DelayMs
E6 C00B RJMP 0x00F2
(0061) case 2:PORTC=0xBD;DelayMs(100);break;
E7 EB8D LDI R24,0xBD
E8 BB85 OUT 0x15,R24
E9 E604 LDI R16,0x64
EA E010 LDI R17,0
EB DF73 RCALL _DelayMs
EC C005 RJMP 0x00F2
(0062) case 3:PORTC=0x7E;DelayMs(100);break;
ED E78E LDI R24,0x7E
EE BB85 OUT 0x15,R24
EF E604 LDI R16,0x64
F0 E010 LDI R17,0
F1 DF6D RCALL _DelayMs
(0063) default:break;
F2 9159 LD R21,Y+
F3 9149 LD R20,Y+
F4 9508 RET
_LED_05:
i --> R20
F5 934A ST R20,-Y
F6 935A ST R21,-Y
F7 01A8 MOVW R20,R16
(0064) }
(0065) }
(0066)
(0067) void LED_05(int i) //00,0F,F0,FF方式显示
(0068) {
(0069) switch(i)
F8 3040 CPI R20,0
F9 0745 CPC R20,R21
FA F069 BEQ 0x0108
FB 3041 CPI R20,1
FC E0E0 LDI R30,0
FD 075E CPC R21,R30
FE F079 BEQ 0x010E
FF 3042 CPI R20,2
100 E0E0 LDI R30,0
101 075E CPC R21,R30
102 F089 BEQ 0x0114
103 3043 CPI R20,3
104 E0E0 LDI R30,0
105 075E CPC R21,R30
106 F099 BEQ 0x011A
107 C017 RJMP 0x011F
(0070) {
(0071) case 0:PORTC=0x00;DelayMs(100);break; //延时100ms
108 2422 CLR R2
109 BA25 OUT 0x15,R2
10A E604 LDI R16,0x64
10B E010 LDI R17,0
10C DF52 RCALL _DelayMs
10D C011 RJMP 0x011F
(0072) case 1:PORTC=0x0F;DelayMs(100);break;
10E E08F LDI R24,0xF
10F BB85 OUT 0x15,R24
110 E604 LDI R16,0x64
111 E010 LDI R17,0
112 DF4C RCALL _DelayMs
113 C00B RJMP 0x011F
(0073) case 2:PORTC=0xF0;DelayMs(100);break;
114 EF80 LDI R24,0xF0
115 BB85 OUT 0x15,R24
116 E604 LDI R16,0x64
117 E010 LDI R17,0
118 DF46 RCALL _DelayMs
119 C005 RJMP 0x011F
(0074) case 3:PORTC=0xFF;DelayMs(100);break;
11A EF8F LDI R24,0xFF
11B BB85 OUT 0x15,R24
11C E604 LDI R16,0x64
11D E010 LDI R17,0
11E DF40 RCALL _DelayMs
(0075) default:break;
11F 9159 LD R21,Y+
120 9149 LD R20,Y+
121 9508 RET
_LED_06:
i --> R20
122 934A ST R20,-Y
123 935A ST R21,-Y
124 01A8 MOVW R20,R16
(0076) }
(0077) }
(0078)
(0079) void LED_06(int i)
(0080) {
(0081) switch(i)
125 3040 CPI R20,0
126 0745 CPC R20,R21
127 F029 BEQ 0x012D
128 3041 CPI R20,1
129 E0E0 LDI R30,0
12A 075E CPC R21,R30
12B F039 BEQ 0x0133
12C C00B RJMP 0x0138
(0082) {
(0083) case 0:PORTC=0XAA;DelayMs(100);break;
12D EA8A LDI R24,0xAA
12E BB85 OUT 0x15,R24
12F E604 LDI R16,0x64
130 E010 LDI R17,0
131 DF2D RCALL _DelayMs
132 C005 RJMP 0x0138
(0084) case 1:PORTC=0X55;DelayMs(100);break;
133 E585 LDI R24,0x55
134 BB85 OUT 0x15,R24
135 E604 LDI R16,0x64
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -