Vai al contenuto
PLC Forum


Problema di pin e byte con 16F876


Simons

Messaggi consigliati

Salve a tutti.

Ho sottomano una board che accetta vari minimoduli per funzionare, e ha su di sè un display lcd con i seguenti collegamenti:

è usato in modalità 4-bit operation

enable -> RB0

RS -> RB1

D4 -> RA1

D5 -> RC4

D6 -> RC7

D7 -> RC1

il mio problema è il come fare a trattare i bit D4-D7 come un nibble.

mi spiego...

utilizzo CCS C Compiler e c'è già il driver lcd pronto per essere usato, con una differenza.

Nel driver pronto utilizza la porta B come dati (o meglio 4 bit della porta cool.gif quindi indirizza direttamente il nibble alla porta.

ma nel mio caso ho impiegate 2 porte per i 4 bit (tra l'altro non sono nemmeno bit consecutivi) quindi come posso fare per far riconoscere la combinazione RA1-RC4-RC7-RC1 come un'unica porta, o meglio i 4 bit più significativi di quella porta??

ammetto che la spiegazione non è delle migliori, però se qualcuno ha capito può darmi una mano?

grazie

simons

Link al commento
Condividi su altri siti


Ciao Simons

se non ho capito male tu hai un valore a 4bit e devi scriverlo su 4 pin del tuo micro che però sono uno qua e uno là per parlare in modo tecnico...

Potresti fare così

All interno dle programma continui ad utilizzare il dato come nibble Quando lo deviscrivere sulle porte interpojni una piccoal procedura di codifica.

Non conosco il tuo compilatore ma sicuramente esiste un estensione del C standard che ti permette di definire variabili di il tipo bit.

Perciò potresti scrivere

clr bit0 ; if (nibble & 0x01) set bit0 ;

o meglio

bit0 = (nibble & 0x01) ? 1 : 0 ;

bit1 = (nibble & 0x02) ? 1 : 0 ;

bit2 = (nibble & 0x04) ? 1 : 0 ;

bit3 = (nibble & 0x08) ? 1 : 0 ;

dove bit0..bit3 sono i bit delle tue porte..

se non hai la possibilità di definire il tipo bit devi scrivere di più

supponendo di voler modificare il bit PA.3

if (nibble & 0x01) PortA |= 0x04 ; else PortA &= 0xFB ;

e così via per gli altri

In pratica con quatro If testi il valroe dei bit del nibble e aggiorni i 4bit delle porte.

Link al commento
Condividi su altri siti

grazie! ho risolto il problema.

ho usato una funzione che shifta i bit del nibble da mandare :

output_bit(LINE_DB7,shift_left(&n,1,0));

output_bit(LINE_DB6,shift_left(&n,1,0));

output_bit(LINE_DB5,shift_left(&n,1,0));

output_bit(LINE_DB4,shift_left(&n,1,0));

in questo modo, in cima al programma ho definito le varie LINE_X con:

#define LINE_x PIN_x

biggrin.gif

ora sorge un altro problema, molto simile.

Come faccio a decodificare una tastiera 4x4 che ha le 4 colonne (o righe non ricordo) collegate a mezza porta B (B4-5-6-7) e le 4 righe collegate "sparse" come prima?

nel file di esempio di ccs c compiler non capisco alcune funzioni, e volevo riscrivermela da capo così anche per fare un po' di pratica.

avete suggerimenti?

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...