common.s

来自「AVR系列单片机ATMEGA64开发的LED显示屏程序 内容包括ATMEGA6」· S 代码 · 共 233 行

S
233
字号
	.module common.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\common.c
	.dbfunc e waitms _waitms fV
;       longloop -> y+0
;       calc_adj -> R10,R11
;      shortloop -> R12,R13
;   milliseconds -> y+12
	.even
_waitms::
	xcall push_arg4
	xcall push_gset4
	sbiw R28,4
	.dbline -1
	.dbline 13
; 
; #include <include.h>
; 
; 
; 
; 
; /***********************************************************************
; Delay routine
; NB! Remember to set CPU_CLOCK in MHz before using this delay function.
; ***********************************************************************/
; 
; void waitms(long milliseconds)
; {
	.dbline 16
;   long longloop;
;   int shortloop;
;   int calc_adj = F_CPU <<6;
	ldi R20,0
	ldi R21,0
	ldi R22,64
	ldi R23,56
	movw R10,R20
	.dbline 17
;   for (longloop=0; longloop<milliseconds; longloop++)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	xjmp L6
L3:
	.dbline 18
;   {
	.dbline 19
	clr R12
	clr R13
	xjmp L10
L7:
	.dbline 19
	nop
L8:
	.dbline 19
	movw R24,R12
	adiw R24,1
	movw R12,R24
L10:
	.dbline 19
	cp R12,R10
	cpc R13,R11
	brlt L7
	.dbline 20
L4:
	.dbline 17
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
L6:
	.dbline 17
	movw R30,R28
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	movw R30,R28
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brge X0
	xjmp L3
X0:
	.dbline -2
L2:
	adiw R28,4
	xcall pop_gset4
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l longloop 0 L
	.dbsym r calc_adj 10 I
	.dbsym r shortloop 12 I
	.dbsym l milliseconds 12 L
	.dbend
	.dbfunc e waitus _waitus fV
;       longloop -> y+0
;       calc_adj -> R10,R11
;      shortloop -> R12,R13
;   microseconds -> y+12
	.even
_waitus::
	xcall push_arg4
	xcall push_gset4
	sbiw R28,4
	.dbline -1
	.dbline 24
;     for (shortloop=0; shortloop<calc_adj; shortloop++) NOP();
;   }
; }
; 
; void waitus(long microseconds)
; {
	.dbline 27
;   long longloop;
;   int shortloop;
;   int calc_adj = F_CPU >> 5;
	ldi R20,0
	ldi R21,8
	ldi R22,7
	ldi R23,0
	movw R10,R20
	.dbline 28
;   for (longloop=0; longloop<microseconds; longloop++)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	xjmp L15
L12:
	.dbline 29
;   {
	.dbline 30
	clr R12
	clr R13
	xjmp L19
L16:
	.dbline 30
	nop
L17:
	.dbline 30
	movw R24,R12
	adiw R24,1
	movw R12,R24
L19:
	.dbline 30
	cp R12,R10
	cpc R13,R11
	brlt L16
	.dbline 31
L13:
	.dbline 28
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
L15:
	.dbline 28
	movw R30,R28
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	movw R30,R28
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brge X1
	xjmp L12
X1:
	.dbline -2
L11:
	adiw R28,4
	xcall pop_gset4
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l longloop 0 L
	.dbsym r calc_adj 10 I
	.dbsym r shortloop 12 I
	.dbsym l microseconds 12 L
	.dbend

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?