Ulisse D.J. Inserito: 12 agosto 2009 Segnala Inserito: 12 agosto 2009 Salve a tutti.Per fare un pò di pratica con i PIC ho voluto realizzare un semplice circuitino su breadbord per far comunicare 2 PIC. In casa avevo solo un 16f84A e un 16f876, così li ho usati.Mi sono "inventato" una specifica di comunicazione ed ho realizzato il source in assembler per il master (16f84A che comunica una stringa di 4 bit) e lo slave (16f876 che riceve la stringa e la visualizza accendendo 4 LED).Realizzato il tutto l'ho testato ma non funziona. Ammettendo che i collegamenti siano corretti (li ho verificati più volte), ho guardato e riguardato i due source per capire come mai non funziona ma mi sembra tutto in regola.Il funzionamento è semplice:premendo 1 dei 4 pulsanti il master mette a 1 la linea RA1 per 5 ms dopo di che, tramite la linea RA0, trasmette i 4 bit in seriale con durata del singolo bit di 5ms.Niente di complicato ma non va . Sicuramente ho sbagliato qualcosa nello scrivere i source.Se avete voglia e tempo di darci un'occhiata potete dirmi dove ho sbagliato.Vi incollo i due listati, grazie.MASTER: PROCESSOR 16F84A RADIX DEC INCLUDE "P16F84A.INC" __CONFIG 3FF1Hpausams macro arg1 local ciclo1 local dechi local ritardo1ms local ciclo2 local Kraj ifndef OSC #define OSC 4 endif movlw high (arg1*OSC/4) movwf HIcnt movlw low (arg1*OSC/4) movwf LOcntciclo1 movf LOcnt,f btfsc STATUS,Z goto dechi call ritardo1ms decf LOcnt,f goto ciclo1dechi movf HIcnt,f btfsc STATUS,Z goto Kraj call ritardo1ms decf HIcnt,f decf LOcnt,f goto ciclo1 ritardo1ms: movlw .100 movwf LOOPcntciclo2: nop nop nop nop nop nop nop decfsz LOOPcnt,f goto ciclo2 returnKraj endm ORG 0CHConta RES 1Dato RES 1HIcnt RES 1LOcnt RES 1LOOPcnt RES 1 ORG 00H bsf STATUS,RP0 movlw 00000000B ;Linea A tutte uscita movwf TRISA & 7FH movlw 11111111B ;Linea B tutte ingresso movwf TRISB & 7FH bcf STATUS,RP0Main btfss PORTB,4 goto Prima_stringa btfss PORTB,5 goto Seconda_stringa btfss PORTB,6 goto Terza_stringa btfss PORTB,7 goto Quarta_stringa goto MainPrima_stringa btfss PORTB,4 goto Prima_stringa bsf PORTA,1 ;Bit 1 a 1 per comunicare la trasmissione pausams .5 ;Attendi 5ms bcf PORTA,1 ;Bit 1 a 0 per cominciare a trasmettere movlw 00001111B ;Stringa da trasmettere movwf Dato ;Variabile che contiene il dato da trasmettere goto TrasmettiSeconda_stringa btfss PORTB,5 goto Seconda_stringa bsf PORTA,1 ;Bit 1 a 1 per comunicare la trasmissione pausams .5 ;Attendi 5ms bcf PORTA,1 ;Bit 1 a 0 per cominciare a trasmettere movlw 00001010B ;Stringa da trasmettere movwf Dato ;Variabile che contiene il dato da trasmettere goto TrasmettiTerza_stringa btfss PORTB,6 goto Terza_stringa bsf PORTA,1 ;Bit 1 a 1 per comunicare la trasmissione pausams .5 ;Attendi 5ms bcf PORTA,1 ;Bit 1 a 0 per cominciare a trasmettere movlw 00000011B ;Stringa da trasmettere movwf Dato ;Variabile che contiene il dato da trasmettere goto TrasmettiQuarta_stringa btfss PORTB,7 goto Quarta_stringa bsf PORTA,1 ;Bit 1 a 1 per comunicare la trasmissione pausams .5 ;Attendi 5ms bcf PORTA,1 ;Bit 1 a 0 per cominciare a trasmettere movlw 00000101B ;Stringa da trasmettere movwf Dato ;Variabile che contiene il dato da trasmettere goto TrasmettiTrasmetti bcf STATUS,C btfsc Dato,0 bsf PORTA,0 btfss Dato,0 bcf PORTA,0 pausams .5 ;Attendi 5ms rrf Dato,F decfsz Conta,1 goto Trasmetti movlw 00000100B movwf Conta bcf PORTA,0 movlw 00000000B movwf Dato goto Main ENDSLAVE: PROCESSOR 16F876 RADIX DEC INCLUDE "P16F876.INC" __CONFIG 3FF1Hpausams macro arg1 local ciclo1 local dechi local ritardo1ms local ciclo2 local Kraj ifndef OSC #define OSC 4 endif movlw high (arg1*OSC/4) ;1 movwf HIcnt ;1 movlw low (arg1*OSC/4) ;1 movwf LOcnt ;1ciclo1 movf LOcnt,f ;1 btfsc STATUS,Z ;1 goto dechi ;2 call ritardo1ms ;2 decf LOcnt,f ;1 goto ciclo1 ;2dechi movf HIcnt,f ;1 btfsc STATUS,Z ;1 goto Kraj ;2 call ritardo1ms ;2 decf HIcnt,f ;1 decf LOcnt,f ;1 goto ciclo1 ;2 ritardo1ms: movlw .100 ;1 movwf LOOPcnt ;1ciclo2: nop ;1 nop ;1 nop ;1 nop ;1 nop ;1 nop ;1 nop ;1 decfsz LOOPcnt,f ;1 goto ciclo2 ;2 return ;2Kraj endm ORG 0CHConta RES 1Dato RES 1HIcnt RES 1LOcnt RES 1LOOPcnt RES 1 ORG 00H bsf STATUS,RP0 movlw 00000000B ;Linea A tutte uscita movwf TRISA & 7FH movlw 11111111B ;Linea B tutte ingresso movwf TRISB & 7FH bcf STATUS,RP0Main btfsc PORTB,1 goto Attendi_ricez goto MainAttendi_ricez pausams .5 ;Attendi 5msRicevi_dato bcf STATUS,C btfsc PORTB,0 bsf Dato,3 btfss PORTB,0 bcf Dato,3 pausams .5 ;Attendi 5ms rrf Dato,F decfsz Conta,1 goto Ricevi_dato movlw 00000100B movwf ContaAccendi_LED movlw Dato movwf PORTA goto Main END
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora