练习.s
来自「基于AVR实验平台下ATMega128芯片实习作业」· S 代码 · 共 455 行
S
455 行
.module _练习.c
.area text(rom, con, rel)
; i -> R16,R17
.even
_delay_1ms::
; #include<iom128v.h>
; void delay_1ms(void)
; { unsigned int i;
clr R16
clr R17
xjmp L5
L2:
L3:
subi R16,255 ; offset = 1
sbci R17,255
L5:
; for(i=0;i<1000;i++);
cpi R16,232
ldi R30,3
cpc R17,R30
brlo L2
L1:
.dbline 0 ; func end
ret
; i -> R20,R21
; n -> R22,R23
.even
_delay_nms::
xcall push_gset2
movw R22,R16
; }
; void delay_nms(unsigned int n)
; {unsigned int i=0;
clr R20
clr R21
xjmp L10
L7:
L8:
subi R20,255 ; offset = 1
sbci R21,255
L10:
; for(i=0;i<n;i++);
cp R20,R22
cpc R21,R23
brlo L7
; delay_1ms();
xcall _delay_1ms
L6:
xcall pop_gset2
.dbline 0 ; func end
ret
.area lit(rom, con, rel)
L12:
.word 255
.word 0
.word 255
.word 0
.word 255
.word 0
L13:
.word 254
.word 253
.word 251
.word 247
.word 239
.word 223
.word 191
.word 127
L14:
.word 127
.word 191
.word 223
.word 239
.word 247
.word 251
.word 253
.word 254
L15:
.word 60
.word 195
.word 60
.word 195
L16:
.word 252
.word 243
.word 207
.word 63
L17:
.word 126
.word 189
.word 219
.word 231
.word 219
.word 189
.word 126
.area text(rom, con, rel)
; v -> R10,R11
; F -> y+60
; E -> y+52
; D -> y+44
; C -> y+28
; B -> y+12
; A -> y+0
; m -> R12,R13
.even
_main::
sbiw R28,63
sbiw R28,11 ; offset = 74
; }
;
; void main()
; {unsigned int m;
; unsigned int v;
; unsigned A[]={0xff,0x00,0xff,0x00,0xff,0x00};
ldi R24,<L12
ldi R25,>L12
movw R30,R28
ldi R16,12
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
; unsigned B[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
ldi R24,<L13
ldi R25,>L13
movw R30,R28
adiw R30,12
ldi R16,16
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
; unsigned C[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
ldi R24,<L14
ldi R25,>L14
movw R30,R28
adiw R30,28
ldi R16,16
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
; unsigned D[]={0x3c,0xc3,0x3c,0xc3};
ldi R24,<L15
ldi R25,>L15
movw R30,R28
adiw R30,44
ldi R16,8
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
; unsigned E[]={0xfc,0xf3,0xcf,0x3f};
ldi R24,<L16
ldi R25,>L16
movw R30,R28
adiw R30,52
ldi R16,8
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
; unsigned F[]={0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e};
ldi R24,<L17
ldi R25,>L17
movw R30,R28
adiw R30,60
ldi R16,14
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
; DDRB=0xff;
ldi R24,255
out 0x17,R24
; PORTB=0xff;
out 0x18,R24
; for(v=0;v<1000;v++)
clr R10
clr R11
xjmp L21
L18:
; { for(m=0;m<6;m++)
clr R12
clr R13
xjmp L25
L22:
ldi R16,2
ldi R17,0
movw R18,R12
xcall empy16s
movw R30,R16
movw R24,R28
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
out 0x18,R2
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
L23:
movw R24,R12
adiw R24,1
movw R12,R24
L25:
movw R24,R12
cpi R24,6
ldi R30,0
cpc R25,R30
brlo L22
; {PORTB=A[m];
; delay_nms(100000);delay_nms(100000);} //闪烁
; for(m=0;m<8;m++)
clr R12
clr R13
xjmp L29
L26:
ldi R16,2
ldi R17,0
movw R18,R12
xcall empy16s
movw R30,R16
movw R24,R28
adiw R24,12
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
out 0x18,R2
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
L27:
movw R24,R12
adiw R24,1
movw R12,R24
L29:
movw R24,R12
cpi R24,8
ldi R30,0
cpc R25,R30
brlo L26
; {PORTB=B[m];
; delay_nms(100000);delay_nms(100000);} //右移
; for(m=0;m<8;m++)
clr R12
clr R13
xjmp L33
L30:
ldi R16,2
ldi R17,0
movw R18,R12
xcall empy16s
movw R30,R16
movw R24,R28
adiw R24,28
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
out 0x18,R2
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
L31:
movw R24,R12
adiw R24,1
movw R12,R24
L33:
movw R24,R12
cpi R24,8
ldi R30,0
cpc R25,R30
brlo L30
; {PORTB=C[m];
; delay_nms(100000);delay_nms(100000);} //左移
; for(m=0;m<8;m++)
clr R12
clr R13
xjmp L37
L34:
ldi R16,2
ldi R17,0
movw R18,R12
xcall empy16s
movw R30,R16
movw R24,R28
adiw R24,60
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
out 0x18,R2
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
L35:
movw R24,R12
adiw R24,1
movw R12,R24
L37:
movw R24,R12
cpi R24,8
ldi R30,0
cpc R25,R30
brlo L34
; {PORTB=F[m];
; delay_nms(100000);delay_nms(100000);} //单个双向移动
; for(m=0;m<4;m++)
clr R12
clr R13
xjmp L41
L38:
ldi R16,2
ldi R17,0
movw R18,R12
xcall empy16s
movw R30,R16
movw R24,R28
adiw R24,44
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
out 0x18,R2
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
L39:
movw R24,R12
adiw R24,1
movw R12,R24
L41:
movw R24,R12
cpi R24,4
ldi R30,0
cpc R25,R30
brlo L38
; {PORTB=D[m];
; delay_nms(100000);delay_nms(100000);} //双个双向移动
; for(m=0;m<4;m++)
clr R12
clr R13
xjmp L45
L42:
ldi R16,2
ldi R17,0
movw R18,R12
xcall empy16s
movw R30,R16
movw R24,R28
adiw R24,52
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
out 0x18,R2
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
movw R16,R20
xcall _delay_nms
L43:
movw R24,R12
adiw R24,1
movw R12,R24
L45:
movw R24,R12
cpi R24,4
ldi R30,0
cpc R25,R30
brlo L42
L19:
movw R24,R10
adiw R24,1
movw R10,R24
L21:
movw R24,R10
cpi R24,232
ldi R30,3
cpc R25,R30
brsh X0
xjmp L18
X0:
L11:
adiw R28,63
adiw R28,11 ; offset = 74
.dbline 0 ; func end
ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?