Pagina 1 di 1

Problema XOR PIC16F1713

MessaggioInviato: 2 mar 2015, 20:37
da Davide90
Salve ragazzi, ho un problema con delle righe di codice:

con questo codice :
Codice: Seleziona tutto
PORTA = PORTA | pin_attivo;

dove pin_attivo=0b00000001;
dichiarato come INT oppure dichiarandolo come CHAR

accendo la porta RA1,

con questo altro codice :

Codice: Seleziona tutto
PORTA^=pin_attivo;


teoricamente dovrei spegnere la stessa porta.

In realtà, collegano un led, vedo che dopo la seconda istruzione il Led rimane acceso.
Sapete mica suggerirmi il motivo?

Simulando funziona bene, in real time ( debug) non si spegne mai il led

Re: Problema XOR PIC16F1713

MessaggioInviato: 3 mar 2015, 1:24
da WALTERmwp
Ciao Foto UtenteDavide90, forse è meglio se riporti la sezione completa del codice che prevede l'esecuzione delle due differenti assegnazioni.

Saluti

Re: Problema XOR PIC16F1713

MessaggioInviato: 3 mar 2015, 8:03
da Davide90
CiaoFoto UtenteWALTERmwp, il problema era nella configurazione del registro ANSELA, sistemata la configurazione , le operazioni vengono eseguite correttamente . Grazie per la disponibiltà..

Re: Problema XOR PIC16F1713

MessaggioInviato: 3 mar 2015, 12:33
da WALTERmwp
Davide90 ha scritto:il problema era nella configurazione del registro ANSELA
meglio così però, se sei d'accordo, potresti riportare ugualmente la porzione di codice e la impostazione del registro, prima e dopo, in modo tale che il thread abbia una valenza "didattica" per chi lo ha letto, me compreso, ovviamente; diversamente ne rimane ben poco.
Grazie.

Saluti

Re: Problema XOR PIC16F1713

MessaggioInviato: 4 mar 2015, 8:59
da Davide90
Si hai ragione, riporto la parte di codice in cui effettuo prima la OR per accendere il led, e poi la XOR per spegnerlo.

Codice: Seleziona tutto
TMR1IF=0;
TMR1H = 255;
TMR1L = 176;
T1CON=0x01;
PORTA = PORTA | pin_attivo;//accendo il led sulla PORTA lasciando invariati gli altri BIT
while(!TMR1IF);

    PORTA^=pin_attivo;// spengo solo il led acceso precedentemente, lasciando invariati gli altri BIT della PORTA

T1CON=0x00;

ricordo che pin_attivo è una maschera di bit:

Codice: Seleziona tutto
pin_attivo=0b00000001;


Dato che il PIC che sto usando (PIC16F1713) , contiene , tra le altre periferiche, anche dei convertitori A/D , bisogna impostare correttamente i registri ANSEL di PORTA,PORTB,PORTC.
Nel mio caso, l'impostazione corretta, per la PORTA è la seguente:

Codice: Seleziona tutto
ANSELA=0x00; // configuro le porte come DIGITAL I/O

Nel primo post, semplicemente non configuravo mai tale registro.

Re: Problema XOR PIC16F1713

MessaggioInviato: 4 mar 2015, 11:47
da WALTERmwp
Grazie Foto UtenteDavide90.

Saluti