; Assembly PIC18 - Versione 0.1 - Maggio 2016 ; Copyright (c) 2016, 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/MSSP-SPI.htm ; PIC18F26K20 / MPLAB X 3.30 / MPASM v5.67 #include "p18f26k20.inc" ; Variabili UDATA_ACS DatoTx res 1 ; Variabile da trasmettere al registro a scorrimento DatoRx res 1 ; Variabile ricevuta dal registro a scorrimento RES_VECT CODE 0x0000 ; Vettore di Reset MAIN_PROG CODE Inizio ; Configurazione delle porte di I/O bcf TRISC, SDO ; Imposta SDO (RC5) come uscita. Da collegare a Data Input bcf TRISC, SCK ; Imposta SCK (RC3) come uscita. Da collegare a Clock Input bcf TRISC, RC7 ; Imposta RC7 come uscita. Da collegare al Master Reset ; Configurazione del modulo seriale bsf SSPCON1, SSPEN; Abilita il modulo seriale bcf SSPCON1, SSPM0; Attivo SPI Master Mode, con clock di 250 kHz (0000) bcf SSPCON1, SSPM1; Attivo SPI Master Mode, con clock di 250 kHz (0000) bcf SSPCON1, SSPM2; Attivo SPI Master Mode, con clock di 250 kHz (0000) bcf SSPCON1, SSPM3; Attivo SPI Master Mode, con clock di 250 kHz (0000) bcf SSPCON1, CKP ; Il clock a riposo deve essere zero bsf SSPSTAT, CKE ; Il dato cambia sul fronte di discesa del clock movlw 0x01 ; Valore iniziale della variabile da trasmettere movwf DatoTx ByteSuccessivo ; Inizio del superloop rlncf DatoTx ; Nuovo dato da scrivere (ruota la variabile) bcf LATC, RC7 ; Reset basso bsf LATC, RC7 ; Reset alto movff DatoTx, SSPBUF ; Scrive la variabile nel buffer di trasmissione attendi btfss SSPSTAT, BF ; Attesa del completamento della trasmissione/ricezione (flag BF) bra attendi movff SSPBUF, DatoRx ; Salva il dato ricevuto bra ByteSuccessivo ; Trasmetto il byte successivo END