You are on page 1of 7
raat (Guida pratica al PIC 16F84- Utlizzere la porte 1 Utilizzare le porte di I/O Le porte di I/O (PORT A e PORT B) Il PIC dispone di 13 linee di 1/0, programmabili individualmente come linee di ingresso o uscita. Questi pin sono mappati direttamente nei registri PORT_A e PORT_B. PORT_B controlla | pin RBO,RB1,RB2,RB3,RB4,RB5,RB6 € RB7. PORT_A controlla i pin RAO,RA1,RA2,RA3 @ RA4, I tre bit piu’ significativi del registro non sono usati (si ricorda che la porta A possiede solo 5 linee) In figura si mostrano i collegamenti logici* tra porte e pin di 1/0 esterni * ovviamente la struttura interna reale di "collegamento" e' molto piu’ complessa PIC 16FB4 UO RAa2 — —+—_ Fat RAB RAD Rt ——-————} [ [ I [Jefe ot [bo Porta port a ep)? |[=[=]" RBO RBT RBI RBG RB2 RBS RBS RBS I due registri PORT_A e PORT_B hanno associati i relativi registri di direzione, cioe’ TRIS_A e TRIS_B. Questi ultimi due registri sono posizionati nel banco 1 della RAM in corrispondenza dei primi. Ogni bit dei registri TRIS_A e TRIS_B specifica la direzione della relativa linea di 1/0. Se il bit vale 1, la corrispondente linea e' di input, se vale 0 e' di output. Ovviamente anche il registro TRIS_A sara’ di soli 5 bit; | 3 bit piu’ significativi non sono utilizzati hitpglanlucs82.ahervstacrgpict6@Aldarao ml raat (Guida pratica al PIC 16F84- Utlizzere la porte 1 Di default (quindi anche all'accensione del pic) tutti i bit del registro TRIS_A e di TRIS_B sono impostati a 1; cio’ significa che tutte le linee RAO...RA3 ¢ RBO..RB7 sono di input. Per modificare la direzione di una linea di 1/0 e! sufficiente settare opportunamente il bit corrispondente nel registro TRIS_A 0 TRIS_B, ad esempio utilizzando le istruzioni di set e clear dei bit ‘oppure scrivendo direttamente il byte opportuno con MOVWF. Caratteristiche elettriche ee porta A Le linee della porta A come detto prima sono 5, associate ai registri PORT_A e TRIS_A. I pin RAQ,RAI,RA2 e RA3, quando configurati come output, Sono di tipo push-pull, ovverosia possono essere utilizzati sia come "sorgenti" di corrente (drain mode) che come "pozzi" (sink mode), in altre parole sono in grado sia di assorbire corrente dal positivo dell'alimentazione (25mA max), sia di fornirla verso massa (20mA max). In figura si mostrano i collegamenti interni per i pin RAQ,RA1,RA2 e RAB vopin RD PORT MN. a Note: IO gins have pretecton diodes to VoD and Vss. II pin RA4 e' un caso a parte perche' e’ di tipo a collettore aperto (open drain); cio significa che e' possibile _utilizzarlo esclusivamente come pozzo di corrente: il suo comportamento equivalente e' come quello di un interruttore che si chiude verso massa. La figura mostra i collegamenti interni relativi alla linea RA: hitpglanlucs82.ahervstacrgpict6@Aldarao ml raat (Guida pratica al PIC 16F84- Utlizzere la porte 1 bs. lpg FORT \ RASDIn Data Latch [7 a wR pots TRIS Latch 7 Ww ROTRIS 0 clock no Note 10 phn has prteetion odes b Vss ony. I pin della porta A impostati come ingressi sono automaticamente configurati come linee in alta impedenza (flottanti); se una di tali linee non viene utilizzata occorre necessariamente collegarla al positivo (VCC) tramite apposita resistenza di pull-up (ad esempio da 10Kohm) Linee porta B La porta 8 e' composta da 8 linee, RBO,RB1,RB2,RB3,RB4,RB5,RB6 RB7. Quando una linea B e' impostata come output, valgono le stesse considerazioni viste per le linee RAO,RAI,RA2 e RA3 (modalita' sink/drain e stessi assorbimenti massimi). In modalita’ input le linee B possiedono ognuna una resistenza di pull-up interna, non e' quindi necessario inserirla esternamente come accade per le linee A. Tali resistenze interne possono essere abilitate settando a zero il bit #RBPU del registro OPTION REG (il registro e' collocato nel banco RAM 1, alla locazione 0x01). Di default le resistenze sono disabiltate. Lettura e scrittura La lettura e scrittura delle porte di I/O e' estremamente semplice. Una volta che si siano scelte le direzioni delle linee tramite Vimposizione dei bit dei registri TRIS_A e TRIS_B sara’ sufficiente settare opportunamente i bit dei registri di porta (ad esempio con le istruzioni MOV,BCF,BSF etc..) per ottenere le tensioni ai capi dei pin corrispondenti. Ovviamente ha senso imporre lo stato del bit solo per le linee dichiarate come output, Per acquisire lo stato delle linee di input e' sufficiente andare a leggere lo stato dei relativi bit di porta, con le normali tecniche di lettura del registri messe a disposizione (istruzioni della famiglia MOV). Una linea di 1/0 impostata come output presentera’ all'esterno (cive’ sul relative pin) una tensione di +5volt se il bit pigianluca2.ateristaorgpictBteAldaain! raat (Guida pratica al PIC 16F84- Utlizzere la porte 1 corrispondente nel registro di porta (PORT_A 0 PORT_B) e' settato ad 1; Ovolt nel caso sia settato a 0. Una linea di 1/0 impostata come input invece e' I'esatto contrario: se la tensione ai capi del relativo pin e’ di circa Svolt, allora il PIC imposta ad 1 il bit corrispondente nel registro di porta. Se la tensione e' nulla, lo seta a0. Esempi software Esempio: Inizializzare la porta A in modo che RAQ e RAI siano di output & RA2,RA3 e RA4 di input. STATUS EQU 0x03 PORT_AEQU 0x05 TRIS A EQU 0x05 BCF STATU sselezione del baneo RAM 0 CLRF PORT_A —sazzeramento di PORT_A BSF STATUS _;selezione del banco RAM 1 MOVLW 0x1C svalore di inizializzazione MOVWF TRIS_A _jscrittura del valore in TRIS_A. NOTA: Ox1C e' il valore di inizializzazione corretto perche’ in binario vale 11100. Scrivere tale parola in TRIS_A corrisponde a dichiarare le prime due linee come output (RAO e RAL) e le restanti tre (RA2 RA3 RA4) come input. Esempi ‘Supponendo che tutte le linee della porta B siano gia’ settate come input, leggere tale porta e salvare Il risultato alla locazione (0x20 (un registro GPR). STATUS EQU 0x03 BCF STATUS,S _;selezione del banco RAM 0 MOVF 0x06,0 __;caricamento del contenuto di PORT_B in W MOVWE 0x20 :scrive il contenuto di W alla locazione 0x20 Esempi ‘Supponendo che tutte le linee della porta B siano gia’ settate come output, scrivere il contenuto del registro 0x20 su tale porta. STATUS EQU 0x03 PORT_B EQU 0x06 BCF STATU sselezione del banco RAM 0 MOVF 0x20,0 _;caricamento del contenuto del registro 0x20 in W MOVWFPORT_B —_;scriveil contenuto di Win PORT_B Esempi di collegamento hitpglanlucs82.ahervstacrgpict6@Aldarao ml raat (Guida pratica al PIC 16F84- Utlizzere la porte 1 Utilizzare i piedini come output Ecco alcuni esempi di collegamenti al pin RBO configurato come output. In figura si riporta un collegamento di un led alla linea RBO del microcontrollore: we REO 330chm up Pilotare un led con RBO - source mode La resistenza da 330 ohm limita la corrente nel ramo a circa 15mA. Quando sulla linea RBO viene imposto un 1 il piedino si porta a VCC Volt ed inizia a fluire una corrente VERSO massa e quindi il led si accende. Quando viene imposto 0 il piedino si porta a massa e la corrente smette di fluire; il led si spenge. Il circuito appena descritto utilizza il piedino RBO come sorgente (source) di corrente. Il prossimo schema mostra come utilizzare il piedono RBO come pozzo (sink) di corrente: vee xy REO 330chm Pioltare un led con RBO - sink mode Quando sulla linea RBO viene imposto un 1 il piedino si porta alla tensione VCC (esattamente come prima) ma il questa volta il led rimane spento perche non fluisce corrente. Quando viene imposto uno 0, il piedino si porta a massa ed inizia a scorrere una corrente VERSO di questo, accendendo il led. I led sono dispositivi a bassa potenza e possono essere alimentati direttamente dalle linee di 1/0 del microcontrollore. Altri dispositivi invece richiedono molta piu' potenza e si rendono necessari appositi stadi driver. II prossimo schema mostra come azionare una lampada a 220 Volt tramite la linea RBO del microcontrollor hitpglanlucs82.ahervstacrgpict6@Aldarao ml raat (Guida pratica al PIC 16F84- Utlizzere la porte 1 wv B anaooa & 220 0 REO o—_ 10K BCS47 Attivazione di una lampada a 220 Volt tramite la linea RBO Quando sul bit RBO viene posto uno 0, il transistor BC547 rimane interdetto, non scorre alcuna corrente lungo il ramo del rele che quindi non scatta e la lampada rimane spenta Quando sul bit RBO viene posto un 1, il piedino RBO si porta a VCC Volt ed inizia a scorrere una corrente verso massa, attraverso la base e l'emettitore del BC547; tale corrente e' di piccola entita’ (limitata dalla resistenza da 10k) ma sufficiente a portare in conduzione il transistor, che quindi “diventa" un cortocircuito. Inizia a fluire corrente lungo il ramo del rele’ che quindi si attiva e chiude il circuito al quale e' collegata la lampada. Utilizzare i piedini come input Per le linee B con resistenze interne di pull-up attivate e! sufficiente tenere scollegata la linea per avere un 1 logico, portarla a massa per ottenere uno 0 logico. Nello schema seguente si setta un bit sulla linea RBO tramite un semplice interruttore: Schema per impostare lo stato della linea RBO (resistenze interne di pull-up attivate!) REO Se le resistenze interne di pull-up sono disattivate e' necessario presentare una tensione di +5 volt per avere un 1 logico o portare a massa per ottenere unno 0 logico, come nello schema seguente: hitpglanlucs82.ahervstacrgpict6@Aldarao ml raat (Guida pratica al PIC 16F84- Utlizzere la porte 1 vec 10K REO 1 Schema per impostare lo stato della linea RBO (resistenze interne di pull-up disattivate!) Lo schema precedente e' obbligatorio per gli input delle linee A, per le quali non sono previste resistenze di pull-up interne attivabili via software come accade per le B. Torna all'indice hitpglanlucs82.ahervstacrgpict6@Aldarao ml m7

You might also like