Programació en pic-as 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 EQU 0x20  ; 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.

Resul EQU 0x20  ; 5 bytes, Resul+4 són les desenes de miler
Compta EQU 0x25  ; 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 ZERO  ; 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.