; Assembly PIC18 - Versione 0.2 - 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 ; https://www.vincenzov.net/tutorial/PIC18/assembly/uart.htm ; PIC18F26K20 / MPLAB X 3.55 / MPASM v5.72 ; Trasmissione seriale asincrona #include "p18f26k20.inc"; il file con la definizine dei registri specifici del PIC in uso UDATA_ACS contatore res 2 ; Contatore utilizzato nel ciclo di ritardo CODE 0x0000 ; vettore di reset, indirizzo 0. Il codice inizia qui call configura_IeO ; Configura le porte di Input/Output (opzionale) call configura_uart ; Configurazione della periferica EUSART ancora movlw "H" ; Trasmissione di un byte (carattere H) call invia_byte movlw "i" ; Trasmissione di un byte (carattere i) call invia_byte movlw 0x0D ; Trasmissione di un byte (Carriage Return) call invia_byte movlw 0x0A ; Trasmissione di un byte (Line Feed) call invia_byte call delay ; Attesa di circa un decimo di secondo bra ancora ; ***************************************************************************** invia_byte movwf TXREG ; Scrive WREG nel registro di trasmissione: inizia la trasmissione nop ; Attende un'istruzione (richiesto per il corretto funzionamento) attendi btfss PIR1, TXIF ; Byte trasmesso? bra attendi ; No, attende ancora return ; Trasmissione completata ; ***************************************************************************** configura_uart ; Configura l'EUSART per trasmissione asincrona: 9600 bit/s asincroni movlw D'25' ; Inizializza il registro a 16 bit del generatore di Baud Rate movwf SPBRG ; Tabella 18.5 movlw 0 movwf SPBRGH bsf TXSTA, BRGH ; Tabella 18.1 bsf BAUDCON, BRG16 ; Tabella 18.3 bsf TRISC, TX ; Imposto come ingresso il pin di trasmissione bsf RCSTA, SPEN ; Attivo la periferica EUSART - Tabella 18.2 bcf TXSTA, SYNC ; Attivo la modalità asincrona - Tabella 18.1 bsf TXSTA, TXEN ; Attivo il trasmettitore - Tabella 18.1 return ;***************************************************************************** delay ; Ciclo di ritardo - 100 ms (circa) @ 1 MHz movlw 0x15 ; imposta il contatore a 0x1500 movwf contatore+1 clrf contatore ripeti decfsz contatore ; decrementa la variabile contatore (LSB) e salta ; l'istruzione seguente quanto contatore.LSB=0 bra ripeti ; ripeti decfsz contatore+1 ; decrementa la variabile contatore (MSB) e salta ; l'istruzione seguente quanto contatore.MSB=0 bra ripeti ; ripeti return ;***************************************************************************** configura_IeO clrf TRISC ; Imposta PORTC come uscita (esempio...) clrf LATC ; Tutte le uscite di PORTC a zero (LED spenti) return END ; Fine del file