📄 ls.s
字号:
.module ls.c
.area text(rom, con, rel)
.dbfile D:\试验\ls.c
.dbfunc e Delay _Delay fV
; a -> R16
; b -> R18
; c -> R20
.even
_Delay::
st -y,R20
.dbline -1
.dbline 7
; #include <iom16v.h>
; #include <macros.h>
; #define uchar unsigned char
; #define uint unsigned int
;
; void Delay() //延时函数
; {
.dbline 9
; uchar a, b, c;
; for (a = 1; a; a++)
ldi R16,1
xjmp L5
L2:
.dbline 10
; for (b = 1; b; b++)
ldi R18,1
xjmp L9
L6:
.dbline 11
; for (c = 0; c<10; c++) //循环次数=255*255*10
clr R20
xjmp L13
L10:
.dbline 12
; ;
L11:
.dbline 11
inc R20
L13:
.dbline 11
cpi R20,10
brlo L10
X0:
L7:
.dbline 10
inc R18
L9:
.dbline 10
tst R18
brne L6
X1:
L3:
.dbline 9
inc R16
L5:
.dbline 9
tst R16
brne L2
X2:
.dbline -2
L1:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r a 16 c
.dbsym r b 18 c
.dbsym r c 20 c
.dbend
.dbfunc e DelayMs _DelayMs fV
; j -> R20,R21
; i -> R16,R17
.even
_DelayMs::
st -y,R20
st -y,R21
.dbline -1
.dbline 16
; }
;
; void DelayMs(uint i) //1ms延时,准确性较Delay();高
; {
xjmp L16
L15:
.dbline 18
; while(i--)
; {
.dbline 20
; uint j;
; for(j=1;j<=613;j++)
ldi R20,1
ldi R21,0
xjmp L21
L18:
.dbline 21
; ;
L19:
.dbline 20
subi R20,255 ; offset = 1
sbci R21,255
L21:
.dbline 20
ldi R24,613
ldi R25,2
cp R24,R20
cpc R25,R21
brsh L18
X3:
.dbline 22
; }
L16:
.dbline 17
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L15
tst R3
brne L15
X4:
.dbline -2
L14:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r j 20 i
.dbsym r i 16 i
.dbend
.dbfunc e LED_on _LED_on fV
.even
_LED_on::
.dbline -1
.dbline 26
; }
;
; void LED_on() //打开所有LED
; {
.dbline 27
; PORTC =0X00;
clr R2
out 0x15,R2
.dbline 28
; Delay();
xcall _Delay
.dbline -2
L22:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LED_off _LED_off fV
.even
_LED_off::
.dbline -1
.dbline 32
; }
;
; void LED_off() //关闭所有LED
; {
.dbline 33
; PORTC = 0xFF;
ldi R24,255
out 0x15,R24
.dbline 34
; Delay();
xcall _Delay
.dbline -2
L23:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LED_01 _LED_01 fV
; i -> R10,R11
.even
_LED_01::
st -y,R10
st -y,R11
movw R10,R16
.dbline -1
.dbline 38
; }
;
; void LED_01(int i) //LED亮灭控制
; {
.dbline 39
; PORTC = ~BIT(i); //输出低电平
ldi R16,1
ldi R17,0
movw R18,R10
xcall lsl16
movw R2,R16
com R2
com R3
out 0x15,R2
.dbline 40
; DelayMs(100); //调用延时程序
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline -2
L24:
.dbline 0 ; func end
ld R11,y+
ld R10,y+
ret
.dbsym r i 10 I
.dbend
.dbfunc e LED_02 _LED_02 fV
; i -> R20,R21
.even
_LED_02::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 44
; }
;
; void LED_02(int i) //间隔点亮
; {
.dbline 45
; PORTC=~(BIT(i)|BIT(i-2));
movw R18,R20
subi R18,2
sbci R19,0
ldi R16,1
ldi R17,0
xcall lsl16
movw R2,R16
ldi R16,1
ldi R17,0
movw R18,R20
xcall lsl16
movw R4,R16
or R4,R2
or R5,R3
com R4
com R5
out 0x15,R4
.dbline 46
; DelayMs(100);
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline -2
L25:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 I
.dbend
.dbfunc e LED_03 _LED_03 fV
; i -> R20,R21
.even
_LED_03::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 50
; }
;
; void LED_03(int i) //相临点亮
; {
.dbline 51
; PORTC=~(BIT(i)|BIT(i-1)); //~后内容需用括号括起来
movw R18,R20
subi R18,1
sbci R19,0
ldi R16,1
ldi R17,0
xcall lsl16
movw R2,R16
ldi R16,1
ldi R17,0
movw R18,R20
xcall lsl16
movw R4,R16
or R4,R2
or R5,R3
com R4
com R5
out 0x15,R4
.dbline 52
; DelayMs(100);
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline -2
L26:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 I
.dbend
.dbfunc e LED_04 _LED_04 fV
; i -> R20,R21
.even
_LED_04::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 56
; }
;
; void LED_04(int i) //发散聚集点亮
; {
.dbline 57
; switch(i)
cpi R20,0
cpc R20,R21
breq L30
X5:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L31
X6:
cpi R20,2
ldi R30,0
cpc R21,R30
breq L32
X7:
cpi R20,3
ldi R30,0
cpc R21,R30
breq L33
X8:
xjmp L29
L30:
.dbline 59
; {
; case 0:PORTC=0xE7;DelayMs(100);break; //延时100ms
ldi R24,231
out 0x15,R24
.dbline 59
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 59
xjmp L29
L31:
.dbline 60
; case 1:PORTC=0xDB;DelayMs(100);break;
ldi R24,219
out 0x15,R24
.dbline 60
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 60
xjmp L29
L32:
.dbline 61
; case 2:PORTC=0xBD;DelayMs(100);break;
ldi R24,189
out 0x15,R24
.dbline 61
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 61
xjmp L29
L33:
.dbline 62
; case 3:PORTC=0x7E;DelayMs(100);break;
ldi R24,126
out 0x15,R24
.dbline 62
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 62
.dbline 63
; default:break;
L29:
.dbline -2
L27:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 I
.dbend
.dbfunc e LED_05 _LED_05 fV
; i -> R20,R21
.even
_LED_05::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 68
; }
; }
;
; void LED_05(int i) //00,0F,F0,FF方式显示
; {
.dbline 69
; switch(i)
cpi R20,0
cpc R20,R21
breq L37
X9:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L38
X10:
cpi R20,2
ldi R30,0
cpc R21,R30
breq L39
X11:
cpi R20,3
ldi R30,0
cpc R21,R30
breq L40
X12:
xjmp L36
L37:
.dbline 71
; {
; case 0:PORTC=0x00;DelayMs(100);break; //延时100ms
clr R2
out 0x15,R2
.dbline 71
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 71
xjmp L36
L38:
.dbline 72
; case 1:PORTC=0x0F;DelayMs(100);break;
ldi R24,15
out 0x15,R24
.dbline 72
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 72
xjmp L36
L39:
.dbline 73
; case 2:PORTC=0xF0;DelayMs(100);break;
ldi R24,240
out 0x15,R24
.dbline 73
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 73
xjmp L36
L40:
.dbline 74
; case 3:PORTC=0xFF;DelayMs(100);break;
ldi R24,255
out 0x15,R24
.dbline 74
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 74
.dbline 75
; default:break;
L36:
.dbline -2
L34:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 I
.dbend
.dbfunc e LED_06 _LED_06 fV
; i -> R20,R21
.even
_LED_06::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 80
; }
; }
;
; void LED_06(int i)
; {
.dbline 81
; switch(i)
cpi R20,0
cpc R20,R21
breq L44
X13:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L45
X14:
xjmp L42
L44:
.dbline 83
; {
; case 0:PORTC=0XAA;DelayMs(100);break;
ldi R24,170
out 0x15,R24
.dbline 83
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 83
xjmp L43
L45:
.dbline 84
; case 1:PORTC=0X55;DelayMs(100);break;
ldi R24,85
out 0x15,R24
.dbline 84
ldi R16,100
ldi R17,0
xcall _DelayMs
.dbline 84
L42:
L43:
.dbline -2
L41:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 I
.dbend
.dbfunc e main _main fV
; r -> R20,R21
; j -> R22,R23
; s -> R22,R23
; q -> R22,R23
; p -> R22,R23
; o -> R22,R23
; n -> R22,R23
; m -> R22,R23
; l -> R22,R23
; i -> R10,R11
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -