⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tobcd16.asm

📁 AVR单片机的典型程序
💻 ASM
字号:
; File Name		ToBCD16.asm"
; Support Email	Per@hum.au.dk
; Target MCU		AT90Sxxxx

;	R e v i s i o n   H I S T O R Y 

;	rev.	date		who	why
;	----	------------	---	---------------------------------------------------
;	0.01	May 17, 2001	PB	Creation after a great idea from Thorleif Bundgaard
;	0.02	May 19, 2001	PB	Fix bug : call > rcall

;.DEVICE AT90S4414			; change if an other device is used
;.include "4414def.inc"		; change if an other device is used

.def	Divisor	=r8
.def	Divisor1	=r9
.def	Base		=r10
.def	Base1		=r11
.def	Base2		=r12
.def	Base3		=r13
.def	Temp		=r16		; If BaseX are regs > r15 then there's no need for Temp

; Entry : Base1, Base , XH, XL
; Result : (XH, XL)+
; 35 Words off program space
; Execution at 1 MHz. between 100 and 370 uS. depending on the input numbers

ToBCD16:	ldi	Temp,high(10000)
		mov	Base3,Temp
		ldi	Temp,low(10000)
		mov	Base2,Temp
		rcall	ToBCD1

		ldi	Temp,high(1000)
		mov	Base3,Temp
		ldi	Temp,low(1000)
		mov	Base2,Temp
		rcall	ToBCD1

		clr	Base3
		ldi	Temp,100
		mov	Base2,Temp
		rcall	ToBCD1

		ldi	Temp,10
		mov	Base2,Temp
		rcall	ToBCD1

		ldi	Temp,1
		mov	Base2,Temp

ToBCD1:	ldi	Temp,'0'		; Start with ASCII 0 ($30h)
ToBCD2:	st	X,Temp
		sub	Base,Base2		; Subtract divisor
		sbc	Base1,Base3
		brcc	ToBCD3			; Skip if ok
		add	Base,Base2		; Else restore
		adc	Base1,Base3
		adiw	r26,1			; Point (X) to next byte (don't know why XL doesn't work here)
		ret

ToBCD3:	ld	Temp,X
		inc	Temp
		rjmp	ToBCD2

⌨️ 快捷键说明

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