练习.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 + -
显示快捷键?