📄 led.lst
字号:
(0028) PORTA&=~BIT(LEDLK); //锁存数据
00B8 98DA CBI P1B,2
(0029) }
00B9 C00C RJMP 0x00C6
(0030) else
(0031) {
(0032) PORTB|=BIT(number); //输出数据
00BA E001 LDI R16,1
00BB 2F14 MOV R17,R20
00BC 940E0150 CALL lsl8
00BE B228 IN R2,P18
00BF 2A20 OR R2,R16
00C0 BA28 OUT P18,R2
(0033) PORTA|=BIT(LEDLK); //更新数据
00C1 9ADA SBI P1B,2
(0034) Delayms(5); //调整时序
00C2 E005 LDI R16,5
00C3 E010 LDI R17,0
00C4 DFA4 RCALL _Delayms
(0035) PORTA&=~BIT(LEDLK); //锁存数据
00C5 98DA CBI P1B,2
(0036) }
(0037) }
00C6 940E014D CALL pop_gset2
00C8 9508 RET
_All_led:
light --> R20
00C9 940E0132 CALL push_gset1
00CB 2F40 MOV R20,R16
(0038) /*******************************************
(0039) 函数名称: All_led
(0040) 功 能: 点亮或者熄灭全部LED
(0041) 参 数: light--为TRUE的时候为点亮全部LED,为FALSE的时候为熄灭全部LED
(0042) 返回值 : 无
(0043) /********************************************/
(0044) void All_led(uchar light)
(0045) {
(0046) if(light)
00CC 2344 TST R20
00CD F049 BEQ 0x00D7
(0047) {
(0048) PORTB&=~ALLLED;
00CE B388 IN R24,P18
00CF 7080 ANDI R24,0
00D0 BB88 OUT P18,R24
(0049) PORTA|=BIT(LEDLK);
00D1 9ADA SBI P1B,2
(0050) Delayms(5);
00D2 E005 LDI R16,5
00D3 E010 LDI R17,0
00D4 DF94 RCALL _Delayms
(0051) PORTA&=~BIT(LEDLK);
00D5 98DA CBI P1B,2
(0052) }
00D6 C008 RJMP 0x00DF
(0053) else
(0054) {
(0055) PORTB|=ALLLED;
00D7 B388 IN R24,P18
00D8 6F8F ORI R24,0xFF
00D9 BB88 OUT P18,R24
(0056) PORTA|=BIT(LEDLK);
00DA 9ADA SBI P1B,2
(0057) Delayms(5);
00DB E005 LDI R16,5
00DC E010 LDI R17,0
00DD DF8B RCALL _Delayms
(0058) PORTA&=~BIT(LEDLK);
00DE 98DA CBI P1B,2
(0059) }
(0060) }
00DF 940E0135 CALL pop_gset1
00E1 9508 RET
_Flow_LED:
i --> R20
MS --> R22
00E2 940E0149 CALL push_gset2
00E4 2F60 MOV R22,R16
(0061) /*******************************************
(0062) 函数名称: Flow_led
(0063) 功 能: 流水灯(循环一次)
(0064) 参 数: MS--点亮相邻LED的时间间隔
(0065) 返回值 : 无
(0066) /********************************************/
(0067) void Flow_LED(uchar MS)
(0068) {
(0069) uchar i;
(0070) for(i=0;i<8;i++)
00E5 2744 CLR R20
00E6 C009 RJMP 0x00F0
(0071) {
(0072) All_led(FALSE); //全部熄灭
00E7 2700 CLR R16
00E8 DFE0 RCALL _All_led
(0073) One_led(i,TRUE); //点亮指定的LED
00E9 E021 LDI R18,1
00EA 2F04 MOV R16,R20
00EB DFB9 RCALL _One_led
(0074) Delayms(MS); //延时指定的时间
00EC 2F06 MOV R16,R22
00ED 2711 CLR R17
00EE DF7A RCALL _Delayms
00EF 9543 INC R20
00F0 3048 CPI R20,0x8
00F1 F3A8 BCS 0x00E7
(0075) }
(0076) }
00F2 940E014D CALL pop_gset2
00F4 9508 RET
_Flash_LED:
MS --> R22
number --> R20
00F5 940E0149 CALL push_gset2
00F7 2F62 MOV R22,R18
00F8 2F40 MOV R20,R16
(0077) /*******************************************
(0078) 函数名称: Flash_led
(0079) 功 能: 闪烁指定的LED(循环一次)
(0080) 参 数: number--指定的LED
(0081) MS--LED闪烁的时间间隔
(0082) 返回值 : 无
(0083) /********************************************/
(0084) void Flash_LED(uchar number,uchar MS)
(0085) {
(0086) One_led(number,TRUE); //点亮指定的LED
00F9 E021 LDI R18,1
00FA 2F04 MOV R16,R20
00FB DFA9 RCALL _One_led
(0087) Delayms(MS); //延时指定的时间
00FC 2F06 MOV R16,R22
00FD 2711 CLR R17
00FE DF6A RCALL _Delayms
(0088) All_led(FALSE); //熄灭所有的LED
00FF 2700 CLR R16
0100 DFC8 RCALL _All_led
(0089) Delayms(MS); //延时指定的时间
0101 2F06 MOV R16,R22
0102 2711 CLR R17
0103 DF65 RCALL _Delayms
(0090) One_led(number,FALSE); //熄灭指定的LED
0104 2722 CLR R18
0105 2F04 MOV R16,R20
0106 DF9E RCALL _One_led
(0091) }
0107 940E014D CALL pop_gset2
0109 9508 RET
(0092) /*******************************************
(0093) 函数名称: main
(0094) 功 能: 1. 流水灯 2.闪烁指定的LED
(0095) 参 数: 无
(0096) 返回值 : 无
(0097) /********************************************/
(0098) void main(void)
(0099) {
(0100) uchar i,bit;
(0101) i=0; //i=0时为流水灯,i=1时为闪烁灯
_main:
bit --> R20
i --> R22
010A 2766 CLR R22
(0102) bit=0; //bit指定闪烁的LED
010B 2744 CLR R20
(0103) Board_init( ); //初始化开发板
010C DF72 RCALL _Board_init
010D C012 RJMP 0x0120
(0104) while(1)
(0105) {
(0106) switch(i)
010E 2EA6 MOV R10,R22
010F 24BB CLR R11
0110 20AA TST R10
0111 F411 BNE 0x0114
0112 20BB TST R11
0113 F031 BEQ 0x011A
0114 01C5 MOVW R24,R10
0115 3081 CPI R24,1
0116 E0E0 LDI R30,0
0117 079E CPC R25,R30
0118 F021 BEQ 0x011D
0119 C006 RJMP 0x0120
(0107) {
(0108) case 0:
(0109) Flow_LED(200);
011A EC08 LDI R16,0xC8
011B DFC6 RCALL _Flow_LED
(0110) break;
011C C003 RJMP 0x0120
(0111) case 1:
(0112) Flash_LED(bit,100);
011D E624 LDI R18,0x64
011E 2F04 MOV R16,R20
011F DFD5 RCALL _Flash_LED
0120 CFED RJMP 0x010E
(0113) }
(0114) }
(0115) }FILE: <library>
0121 9508 RET
empy16s:
0122 920A ST R0,-Y
0123 921A ST R1,-Y
0124 938A ST R24,-Y
0125 939A ST R25,-Y
0126 9F02 MUL R16,R18
0127 01C0 MOVW R24,R0
0128 9F12 MUL R17,R18
0129 0D90 ADD R25,R0
012A 9F03 MUL R16,R19
012B 0D90 ADD R25,R0
012C 018C MOVW R16,R24
012D 9199 LD R25,Y+
012E 9189 LD R24,Y+
012F 9019 LD R1,Y+
0130 9009 LD R0,Y+
0131 9508 RET
push_gset1:
0132 935A ST R21,-Y
0133 934A ST R20,-Y
0134 9508 RET
pop_gset1:
0135 E0E1 LDI R30,1
pop:
0136 9149 LD R20,Y+
0137 9159 LD R21,Y+
0138 FDE0 SBRC R30,0
0139 9508 RET
013A 9169 LD R22,Y+
013B 9179 LD R23,Y+
013C FDE1 SBRC R30,1
013D 9508 RET
013E 90A9 LD R10,Y+
013F 90B9 LD R11,Y+
0140 FDE2 SBRC R30,2
0141 9508 RET
0142 90C9 LD R12,Y+
0143 90D9 LD R13,Y+
0144 FDE3 SBRC R30,3
0145 9508 RET
0146 90E9 LD R14,Y+
0147 90F9 LD R15,Y+
0148 9508 RET
push_gset2:
0149 937A ST R23,-Y
014A 936A ST R22,-Y
014B 940C0132 JMP push_gset1
pop_gset2:
014D E0E2 LDI R30,2
014E 940C0136 JMP pop
lsl8:
0150 2311 TST R17
0151 F019 BEQ 0x0155
0152 0F00 LSL R16
0153 951A DEC R17
0154 CFFB RJMP lsl8
0155 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -