END ; Assembly PIC18 - Versione 0.1 - Agosto 2017 ; Copyright (c) 2016-2017, Vincenzo Villa ; Creative Commons | Attribuzione - Condividi allo stesso modo 4.0 Internazionale (CC BY-SA 4.0) ; Creative Commons | Attribution-Share Alike 4.0 Unported ; http://www.vincenzov.net/tutorial/PIC18/Assembly/esercizi.htm ; Conversione da binario 8 bit ad ASCII (esempio 6a) #include "p18f26k20.inc" ; Nome dei registri e dei flags RADIX DEC ; Usa la base 10 UDATA_ACS count res 1 ; Contatore, inizializzato a 8 (bit) ASCII res 3 ; Risultato: 3 caratteri ASCII bin res 1 ; Numero da convertire inizio CODE 0 movlw 123 ; Esempio, da modificare per i test movwf bin Bin8ToASCII movlw 8 ; Inizializza il contatore (loop ripetuto 8 volte) movwf count clrf ASCII ; Azzera il risultato clrf ASCII+1 clrf ASCII+2 repeat rlcf bin ; Ruota a sinistra il numero (cioč moltiplica per due) ; Moltiplica per due il risultato, incluso il riporto della ; precedente operazione. Questa operazione č eseguita in decimale, ; una cifra per byte ; Prima cifra - LSB movf ASCII+2,w ; Somma con se stesso (moltiplica per due) addwfc ASCII+2,W ; Il riporto deriva dallo scorrimento di "bin" daw ; Allinea il risultato in decomale (usati solo 4 bit) btfsc WREG,4; ; Se il bit 4 č uno (numero maggiore di 9)... bsf STATUS, C ; ... setta il riporto andlw 0x0F ; Sono usati solo i 4 bit meno significativi movwf ASCII+2 ; Salva la prima cifra ; Seconda cifra (identico al precedente) movf ASCII+1,w addwfc ASCII+1,W daw btfsc WREG,4; bsf STATUS, C andlw 0x0F movwf ASCII+1 ; Terza cifra (identico al precedente) movf ASCII,w addwfc ASCII,W daw btfsc WREG,4; bsf STATUS, C andlw 0x0F movwf ASCII decfsz count ; Ruotati tutti gli 8 bit? bra repeat ; Se no, ripeti movlw 0x30 ; Converte i numeri 0-9 in 0x30-0x39 (codice ASCII) addwf ASCII, f addwf ASCII+1, f addwf ASCII+2, f sleep ; Termina END