Programació en mpasm del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Conversió de números a ASCII

Conversió d'una xifra a ASCII

Volem convertir un número d'una xifra (0 a 9) al seu codi ASCII. L'aplicació més típica és quan volem mostrar-lo en una pantalla.

El procediment és tan senzill com sumar a la xifra el codi ASCII del número zero. Cal tenir present que si la variable conté un número més gran que 9 el resultat pot ser qualsevol caràcter. Si tenim una variable qualsevol, podem primer convertir-la a BCD i després passar a ASCII cada un dels dígits.

Xifra				; Variable amb el valor que volem convertir	
Ascii					; Conversió a ASCII
	movlw		'0'		; Carrega el codi ASCII del número 0
					; Sumant-li la xifra tindrem el codi ASCII
	addwf		Xifra,f		; Ara Xifra conté el caràcter ASCII

Conversió de números de diverses xifres a ASCII

Quan convertim números de diverses xifres a ASCII, normalment ens interessa que els zeros a l'esquerra no surtin o, més ben dit, siguin espais en blanc. Cal, doncs, mirar cada xifra i si és zero substituir-la per un espai en blanc però només si les anteriors també ho són. El següent tros de programa s'agafa un número de 5 dígits BCD i el converteix a ASCII sense mostrar els zeros de l'esquerra. Els valors d'entrada i de sortida estan a un registre Resul de 5 posicions on el dígit de més pes és Resul+4 i el de menys és Resul.

A l'exemple PP i a l'exemple MT podem veure maneres de fer-ho.

Resul:5				; Resul+4 són les desenes de miler
Compta				; Comptador d'iteracions
	movlw		.5		; Cal fer-ho 5 cops
	movwf		Compta		; Ho posem al comptador
	movlw		Resul+4		; Adreça de la darrera xifra
	movwf		FSR		; Adreçament indirecte
	movlw		'0'		; Carrega el codi ASCII del número 0
					; Sumant-li la xifra tindrem el codi ASCII
Bucle1
	addwf		INDF,f		; Ho afegeix al dígit
	decf		FSR		; Decrementa FSR
	decfsz		Compta,f	; Decrementa el comptador
	goto		Bucle1		; Si no és zero, repetim
	movlw		.4		; Cal fer-ho 4 cops
	movwf		Compta		; Ho posem al comptador
	movlw		Resul+4		; Adreça de la darrera xifra
	movwf		FSR		; Adreçament indirecte
Bucle2
	movf		INDF,w		; Llegeix el dígit
	xorlw		'0'		; Compara amb 0
	btfss		STATUS,Z	; Si Z està activat eren iguals
	goto		Final		; Si no eren iguals, ja estem
	movlw		' '		; Carrega un espai en blanc
	movwf		INDF		; Substitueix el 0 per l'espai
	decf		FSR		; Decrementa FSR
	decfsz		Compta,f	; Decrementa el comptador
	goto		Bucle2		; Si no és zero, repetim
Final

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.