Newsgroup: it.hobby.elettronica.digitale
Titolo: Domanda banale su PIC

Forse la domanda sarà banale per gli esperti ma vi
chiedo un aiuto.
Con un pic 16f628 devo comandare un display led
(con decodifica 4511) per scriverci su dei numeri.
Il mio problema è questo:
la porta B del pic è settata come uscita, il 4511
è collegato ABCD rispettivamemte al RB0 RB1 RB2
RB3.
Fin qui nessun problema, metto un numero da 0 a 9
in una  variabile -dato- e mando tutto in PORTB:
PORTB = dato;
ma se volessi utilizzare l' EN (abilita display)
del 4511 che ho collegato al RB7 del pic per
abilitare la scrittura a mio piacimento, muovendo
il RB7 ovvero l'EN del 4511 modifico il dato in
quanto il bit7 della porta è gia settato dalla
variabile dato, ma peggio se faccio l'inverso,
cioè se prima muovo RB7 e poi mando "dato" il bit
7 cambia, come risolvo?
In pratica vorrei utilizzare i 4 bit bassi del
PORTB come dati  ( a me bastano 4 bit)  per
mandarci la variabile -dato- e i bit alti RB6, RB7
come indirizzi per eventuali hardware periferici
da abilitare all'occorrenza scrivendo delle
apposite funzioni.
Programmo in C col PICC lite.
Grazie mille se mi aiutate.

FINPEN ha scritto:

Non riesco a capire....
Non puoi settare il singolo BIT?
Emanuele
-- 
*** YOUR ELECTRONICS OPEN SOURCE ***
http://dev.emcelettronica.com
;---------------------------------------------------------
Progetti Completi (Full Projects):
[IperKEY-ResKEY] Chiave elettronica a microcontrollore
(Microcontroller Electronics Key and key reader)
//TAGS:Pic, Eeprom, ADconverter, I2C
[IperCODE] Ricevitore RADIOCOMANDI e decodifiche
(Remote Control Receiver and decoder)
//TAGS:Pic, Radio control, routines, rolling code, UART, CCP1, LCD

"Emanuele" <emcelettro...@DELETEgmail.com>
ha scritto nel messaggio
news:enh9s5$as5$1...@newsreader2.mclink.it...

Hai ragione provo a spiegarmi meglio con un
esempio più accurato.
Ho due modulini ciascuno dei quali è composto da
un display led a sette segmenti e una decodifica
4511.
Per far apparire una cifra da 0 a 9 è necessario
mettere il codice bcd agli ingressi a,b,c,d, e
abilitare l'EN.
P. es. se volessi scrivere sul display 8 devo
abilitare il EN, settare gli ingressi del 4511  a
0100, e poi disabilitare EN per tenere la cifra
invariata anche se variano gli ingressi.
Ora di questi modulini ne ho due collegati in
parallelo sulle porte del pic RB0,RB1,RB2,RB3
ciascuno rispettivamente ai pin a,b,c,d di tutte
due le decodifiche 4511 ovvero li uso come bus
dati a 4 bit.
I comandi EN di ciascun modulino li ho collegati
così:
quello del primo a RB6 e quello del secondo a RB7
perchè voglio abilitare la scrittura a mio
piacimento o sul primo o sul secondo scrivendoci
valori diversi.
Siccome la variabile che contiene la cifra da
scriverci sopra è contenuta nella variabile
"dato", quando faccio:
PORTB=dato;
questo mi sposta anche RB7  e RB6 perchè la
variabile è composta da 8 bit, cioè se la cifra è
8 in uscita a PORTB ho 00000100 e quindi anche RB6
e RB7  che vorrei muovere a parte per abilitare o
l'uno o l'altro display mi vanno sempre a 0.
non so se è meglio spiegato così :-)
Grazie

 l'uno o l'altro display mi vanno sempre a 0.
Assegna a due variabili booleane i due EN, tipo:
BOOL b_en1, b_en2;
dove b_en1 è il pin RB6 e b_en2 è il pin RB7.
Al momento dell'assegnazione: fai
PORTB=(dato & mask) | (b_en1<<6)| (b_en2<<7);
dove
mask = 0b00111111
& è l'operatore LOGIC AND
 | è l'operatore LOGIC OR
-- 
simone.bern
Mr. Heisemberg is not the only one who can affect a measurement by looking
at it (Robert A. Pease)
zsimone...@zliberoz.it
 (Rimuovere i caratteri di zorro per rispondere
via mail)


forse ho capito:
se "dato" è p. es la cifra 7 ovvero 00000111, posso modificare RB6 o RB7, cioè
l'EN1 o l'EN2 secondo quanto mi hai suggerito senza modificare i 4 bit bassi del
registro del PORTB.
Mi vaniva in mente, ma non so se è possibile, di suddividere il PORTB in due ,
tanto a me bastano 4 bit per rappresentare le cifre.
Grazie dell'attenzione.

MOLTO SEMPLICE!
abilita
bsf PORTB,7
return
disabilita
bcf PORTB,7
return





 ha scritto nel messaggio
news:1168019136.6...@42g2000cwt.googlegroups.com...

ho capito ma credo che anche stavolta mi sia spiegato male, comq ho risolto in
questo modo:
utilizzo come bus dati in uscita il PORTA, e come dicevo a me bastano 4 bit,
mentre col PORTB seleziono gli indirizzi delle periferiche (schedine di
visualizzazione e altre cose varie) usandolo come bus indirizzi (RB6 e RB7, e
poi mi avanzano altri 5 pin da utilizzare come in/out).
Grazie a tutti per l'attenzione.
Alla prossima.