📄 lesson1.lst
字号:
00B4 98DA CBI P1B,2
(0029) }
00B5 C00B RJMP 0x00C1
(0030) else
(0031) {
(0032) PORTB|=BIT(number); //输出数据
00B6 E001 LDI R16,1
00B7 2F14 MOV R17,R20
00B8 D090 RCALL lsl8
00B9 B228 IN R2,P18
00BA 2A20 OR R2,R16
00BB BA28 OUT P18,R2
(0033) PORTA|=BIT(LEDLK); //更新数据
00BC 9ADA SBI P1B,2
(0034) Delayms(5); //调整时序
00BD E005 LDI R16,5
00BE E010 LDI R17,0
00BF DFA9 RCALL _Delayms
(0035) PORTA&=~BIT(LEDLK); //锁存数据
00C0 98DA CBI P1B,2
(0036) }
(0037) }
00C1 D084 RCALL pop_gset2
00C2 9508 RET
_All_led:
light --> R20
00C3 D067 RCALL push_gset1
00C4 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)
00C5 2344 TST R20
00C6 F049 BEQ 0x00D0
(0047) {
(0048) PORTB&=~ALLLED; //ALLLED=0xFF,使全部LED都亮
00C7 B388 IN R24,P18
00C8 7080 ANDI R24,0
00C9 BB88 OUT P18,R24
(0049) PORTA|=BIT(LEDLK); //输出数据
00CA 9ADA SBI P1B,2
(0050) Delayms(5); //调整时序
00CB E005 LDI R16,5
00CC E010 LDI R17,0
00CD DF9B RCALL _Delayms
(0051) PORTA&=~BIT(LEDLK); //锁存数据
00CE 98DA CBI P1B,2
(0052) }
00CF C008 RJMP 0x00D8
(0053) else
(0054) {
(0055) PORTB|=ALLLED; //ALLLED=0xFF,使全部LED都灭
00D0 B388 IN R24,P18
00D1 6F8F ORI R24,0xFF
00D2 BB88 OUT P18,R24
(0056) PORTA|=BIT(LEDLK); //输出数据
00D3 9ADA SBI P1B,2
(0057) Delayms(5); //调整时序
00D4 E005 LDI R16,5
00D5 E010 LDI R17,0
00D6 DF92 RCALL _Delayms
(0058) PORTA&=~BIT(LEDLK); //锁存数据
00D7 98DA CBI P1B,2
(0059) }
(0060) }
00D8 D055 RCALL pop_gset1
00D9 9508 RET
_Flow_LED:
i --> R20
MS --> R22
00DA D067 RCALL push_gset2
00DB 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++) //循环8次,8个LED依次点亮
00DC 2744 CLR R20
00DD C009 RJMP 0x00E7
(0071) {
(0072) All_led(FALSE); //全部熄灭
00DE 2700 CLR R16
00DF DFE3 RCALL _All_led
(0073) One_led(i,TRUE); //点亮指定的LED
00E0 E021 LDI R18,1
00E1 2F04 MOV R16,R20
00E2 DFC0 RCALL _One_led
(0074) Delayms(MS); //延时指定的时间
00E3 2F06 MOV R16,R22
00E4 2711 CLR R17
00E5 DF83 RCALL _Delayms
00E6 9543 INC R20
00E7 3048 CPI R20,0x8
00E8 F3A8 BCS 0x00DE
(0075) }
(0076) }
00E9 D05C RCALL pop_gset2
00EA 9508 RET
_Flash_LED:
MS --> R22
number --> R20
00EB D056 RCALL push_gset2
00EC 2F62 MOV R22,R18
00ED 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
00EE E021 LDI R18,1
00EF 2F04 MOV R16,R20
00F0 DFB2 RCALL _One_led
(0087) Delayms(MS); //延时指定的时间
00F1 2F06 MOV R16,R22
00F2 2711 CLR R17
00F3 DF75 RCALL _Delayms
(0088) All_led(FALSE); //熄灭所有的LED
00F4 2700 CLR R16
00F5 DFCD RCALL _All_led
(0089) Delayms(MS); //延时指定的时间
00F6 2F06 MOV R16,R22
00F7 2711 CLR R17
00F8 DF70 RCALL _Delayms
(0090) One_led(number,FALSE); //熄灭指定的LED
00F9 2722 CLR R18
00FA 2F04 MOV R16,R20
00FB DFA7 RCALL _One_led
(0091) }
00FC D049 RCALL pop_gset2
00FD 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
00FE 2766 CLR R22
(0102) bit=0; //bit指定闪烁的LED
00FF 2744 CLR R20
(0103) Board_init( ); //初始化开发板
0100 DF7C RCALL _Board_init
0101 C013 RJMP 0x0115
(0104) while(1)
(0105) {
(0106) switch(i)
0102 2EA6 MOV R10,R22
0103 24BB CLR R11
0104 20AA TST R10
0105 F411 BNE 0x0108
0106 20BB TST R11
0107 F039 BEQ 0x010F
0108 2D8A MOV R24,R10
0109 2D9B MOV R25,R11
010A 3081 CPI R24,1
010B E0E0 LDI R30,0
010C 079E CPC R25,R30
010D F021 BEQ 0x0112
010E C006 RJMP 0x0115
(0107) {
(0108) case 0:
(0109) Flow_LED(200); //i=0,以流水灯的方式显示
010F EC08 LDI R16,0xC8
0110 DFC9 RCALL _Flow_LED
(0110) break;
0111 C003 RJMP 0x0115
(0111) case 1:
(0112) Flash_LED(bit,100); //i=1,以闪烁灯的方式显示
0112 E624 LDI R18,0x64
0113 2F04 MOV R16,R20
0114 DFD6 RCALL _Flash_LED
0115 CFEC RJMP 0x0102
(0113) }
(0114) }
(0115) }FILE: <library>
0116 9508 RET
mpy16s:
0117 920A ST R0,-Y
0118 921A ST R1,-Y
0119 2400 CLR R0
011A 2411 CLR R1
011B 3000 CPI R16,0
011C 0701 CPC R16,R17
011D F041 BEQ 0x0126
011E 9516 LSR R17
011F 9507 ROR R16
0120 F410 BCC 0x0123
0121 0E02 ADD R0,R18
0122 1E13 ADC R1,R19
0123 0F22 LSL R18
0124 1F33 ROL R19
0125 CFF5 RJMP 0x011B
0126 2D00 MOV R16,R0
0127 2D11 MOV R17,R1
0128 9019 LD R1,Y+
0129 9009 LD R0,Y+
012A 9508 RET
push_gset1:
012B 935A ST R21,-Y
012C 934A ST R20,-Y
012D 9508 RET
pop_gset1:
012E E0E1 LDI R30,1
pop:
012F 9149 LD R20,Y+
0130 9159 LD R21,Y+
0131 FDE0 SBRC R30,0
0132 9508 RET
0133 9169 LD R22,Y+
0134 9179 LD R23,Y+
0135 FDE1 SBRC R30,1
0136 9508 RET
0137 90A9 LD R10,Y+
0138 90B9 LD R11,Y+
0139 FDE2 SBRC R30,2
013A 9508 RET
013B 90C9 LD R12,Y+
013C 90D9 LD R13,Y+
013D FDE3 SBRC R30,3
013E 9508 RET
013F 90E9 LD R14,Y+
0140 90F9 LD R15,Y+
0141 9508 RET
push_gset2:
0142 937A ST R23,-Y
0143 936A ST R22,-Y
0144 940C012B JMP push_gset1
pop_gset2:
0146 E0E2 LDI R30,2
0147 940C012F JMP pop
lsl8:
0149 2311 TST R17
014A F019 BEQ 0x014E
014B 0F00 LSL R16
014C 951A DEC R17
014D CFFB RJMP lsl8
014E 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -