Sunteți pe pagina 1din 10

Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr.

Lecia nr. 5

PORTUL GENERAL DE INTRARE-IEIRE

Scopul acestei lecii este de a prezenta structura hardware i posibilitile de


programare a Portului general de intrare-ieire (GPIO) al microcontrolerului PIC 12F675.
Se va realiza un proiect de aplicaii de tip logic cu acesta.

5.1. INTRODUCERE
Microcontrolerul PIC 12F675 este ncapsulat ntr-o structur cu 8 terminale (pini)
dintre care dou sunt folosite pentru alimentarea circuitului, iar restul de 6 sunt folosite
pentru a conecta cu exteriorul componentele interne.
Portul general de intrare-ieire, GPIO (General Purpose Input-Output), este un port
bidirecional de 6 bii. El va putea fi folosit ca atare, ca port digital de intrare-ieire, cu
condiia dezactivrii celorlalte componente interne cum ar fi, de exemplu, comparatorul
analogic sau convertorul analog-digital. Dac lucrul acesta nu se ntmpl, atunci pinii
asociai perifericelor respective (comparator analogic sau convertor analog-digital) nu vor
putea fi folosii ca pini de port digital de intrare-ieire (vezi figura 1.3 din lecia 1).
Datorit multifuncionalitii lor, fiecare pin de port are asociat o schem hardware
particularizat, corespunztoare funciilor pe care trebuie s le ndeplineasc.

5.2. SCHEMA PORTULUI


Pentru a nelege mai bine att funcionarea ct i modul de utilizare a portului GPIO,
vom comenta structura i funcionarea schemei asociate pinului GP0 al portului, prezentat
n figura 5.1.

Funcii de baz ndeplinite


Pinul acesta poate ndeplini funcii multiple:
port bidirecional de intrare-ieire (GPIO) cu conectare programabil la VDD i cu
posibilitatea declanrii unei ntreruperi la schimbarea semnalului de pe pin;
intrare analogic pentru canalul zero (AN0) n cazul n care este folosit
convertorul analog-digital;
intrare de comparator (CIN+) n cazul n care este folosit comparatorul analogic
din microcontroler; funciile analogice ale portului se valideaz cu comanda
Analog Input Mode aplicat porilor P1 i P2;
intrare de date pentru programarea serial (ICSPDAT), caz n care este utilizat tot
ca un pin digital de intrare-ieire.
Avnd n vedere funciile multiple ale pinului de port, el este notat astfel:
GP0/AN0/CIN+/ICSPDAT.

47
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 5

Descriere hardware
Schema conine ase bistabile notate cu FF1, FF2, ..., FF6.
FF2 este bistabilul de date asociat portului. Direcia fluxului de date prin port este
dictat de bistabilul FF3 notat cu TRISIO. Dac TRIOSIO = 0, bufferul care leag ieirea lui
FF2 de pin va fi transparent i bitul memorat n FF2 va apare la ieire (funcia de port digital
de ieire). n cazul n care bitul TRISIO = 1, bufferul va trece n starea de impedan mare la
ieire (High Z) ceea ce va determina caracterul de intrare (digital sau analogic) al pinului.

Figura 5.1. Structura hardware a pinului GP0


n cazul n care modul de lucru analogic este dezactivat (Analog Input Mode = 0),
semnalul digital de pe pinul portului va fi citit cu comanda RD PORT i nscris n bistabilele
FF5 i FF6. nscrierea se face n FF6 cu palierul pozitiv al semnalului de comand, iar n
FF5 cu palierul negativ urmnd unui front descresctor.
Acelai semnal de comand va deschide bufferul care leag ieirea lui FF5 de
magistrala intern de date (bitul 0 al magistralei Data Bus), valoarea digital disponibil pe
pinul portului fiind astfel transferat pe aceast magistral pentru a putea fi citit.
n concluzie, o comand de citire a registrului GPIO nseamn de fapt citirea
semnalului de pe pinii corespunztori, iar o comand de scriere nseamn de fapt nscrierea
valorii logice n bistabilele de date asociate pinilor portului.

48
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 5

Trebuie specificat faptul c toate operaiile de scriere n port sunt de fapt operaii de
tipul read-modify-write, ceea ce nseamn c se citete semnalul digital de pe pinul portului,
aceast valoare este modificat iar apoi nscris n bistabilul de date al portului.

Funcii suplimentare ale portului


Pentru creterea atribuiilor portului, structura hardware a circuitului asociat pinului
de port are implementate i anumite funcii suplimentare utile n aplicaii, i anume:

Weak pull up
n cazul n care pinul este configurat pentru a ndeplini funcia de intrare digital,
pentru o funcionare sigur exist posibilitatea legrii acestuia la sursa de alimentare VDD
prin intermediul tranzistorului notat cu WEAK i comandat de poarta P1. Legtura la VDD se
activeaz dac sunt ndeplinite simultan urmtoarele condiii:
o n bistabilul FF1 este nscris valoarea 1 logic cu comanda WR WPU,
o portul este configurat ca fiind de intrare, prin setarea bistabilului FF3 (trecerea lui
n starea 1 logic) cu comanda WR TRISIO,
o comanda Analog Input Mode este dezactivat (Analog Input Mode = 0),
o comanda GPPU (General Port Pull Up) este activat ( GPPU = 0 )

Interrupt on change
Fiecare pin al portului poate fi programat ca s genereze o cerere de ntrerupere la
schimbarea valorii sale digitale (ieirea porii P4).
Activarea acestei funcii se face prin:
o setarea bistabilului FF4 cu comanda WR IOC, pinul respectiv fiind configurat n
prealabil ca pin de intrare (bistabilul FF3 n stare logic 1),
o generarea semnalului de schimbare a valorii logice de ctre circuitul SAU-
EXCLUSIV (P3) conectat la ieirea bistabilelor FF5 i FF6.

5.3. REGISTRELE DE COMAND I CONTROL ALE PORTULUI


n tabelul 5.1 sunt prezentate registrele speciale implicate n alegerea funciilor
multiple ndeplinite de portul GPIO al microcontrolerului.
Tabelul 5.1. Registre de comand ale portului
Adresa Nume Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
05H GPIO - - GP5 GP4 GP3 GP2 GP1 GP0
0BH/8BH INTCON GIE PEIE T0IE INTE GPIE T0IF INTF GPIF
19H CMCON - COUT - CINV CIS CM2 CM1 CM0
81H OPTION_REG GPPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
85H TRISIO - - TRISIO5 TRISIO4 TRISIO3 TRISIO2 TRISIO1 TRISIO0
95H WPU - - WPU5 WPU4 WPU3 WPU2 WPU1 WPU0
96H IOC - - IOC5 IOC4 IOC3 IOC2 IOC1 IOC0
9FH ANSEL - ADCS2 ADCS1 ADCS0 ANS3 ANS2 ANS1 ANS0

n tabelul 5.1, n celulele marcate cu gri sunt bii ai cror valoare nu influeneaz
programarea portului de intrare-ieire.

49
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 5

Registrul GPIO (adresa 05H)


Citirea acestui registru ne indic starea logic a pinilor portului (starea bistabilului
FF5 n cazul lui GP0), iar scrierea n acest registru nseamn scrierea informaiei n registrul
de ieire asociat portului (bistabilul FF2 n cazul GP0).

Registrul INTCON (adresa 0BH)


La nivelul portului paralel pot fi generate dou tipuri de ntreruperi, i anume:
o ntrerupere la schimbarea strii logice a portului (IOC Interrupt On Change),
o ntreruperi externe generate de o surs extern conectat la pinul GP2.
Mecanismul de generare a unei cereri de ntreruperi presupune ca cel care solicit o
ntrerupere s marcheze acest lucru prin setarea unui FLAG (de exemplu, n cazul unei surse
externe va fi setat FLAG-ul INTF).
Cererea va fi luat n considerare sau nu, n funcie de un bit de validare (Enable) a
respectivei surse de ntrerupere (n cazul exemplului de mai sus, bitul INTE). La aceast
condiionare se mai adaug nc una, de validare general (n cazul portului paralel bitul
GIE). Logica ntreruperilor la microcontrolerul PIC 12F675 este prezentat n figura 5.2.

Figura 5.2. Logica ntreruperilor la PIC 12F675


Pentru a nelege mai bine mecanismul de generare a unei cereri de ntrerupere, s
urmrim cazul n care dorim ca la schimbarea valorii logice a pinului GP0 (IOC-GP0) s se
genereze o astfel de cerere ctre CPU (ieirea porii P4 din figura 5.2). Acest lucru se va
ntmpla dac:
o apare schimbarea strii logice, adic semnalul IOC-GP0 = 1 (vezi figura 5.2),
o la nivelul GP0 s-a validat admiterea unei asemenea cereri, adic bitul IOC0 = 1
(prin setarea bistabilului FF4),

50
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 5

o bitul de validare a ntreruperilor generate de portul de intrare-ieire este setat


(GPIE = 1),
o bitul general de validare a ntreruperilor este validat (GIE = 1).
n aceste condiii, apariia unei schimbri a strii logice pe pinul GP0, prin IOC-GP0,
se va propaga prin porile P0, P1, P2, P3, P4 ctre CPU.
Observaie: Registrul INTCON permite setarea/resetarea biilor GIE, INTE, GPIE
precum i citirea biilor INTF i GPIF.

Registrul CMCON (adresa 19H)


Cu ajutorul biilor CM2, CM1, i CM0 poate fi ales unul din cele opt moduri de lucru
ale comparatorului ncorporat n structura microcontrolerului. n cazul n care portul este
utilizat pentru intrri-ieiri digitale, funcia de comparator trebuie invalidat prin setarea
acestor bii (CM2 = CM1 = CM0 = 1).

Registrul OPTION_REG (adresa 81H)


n cazul utilizrii pinilor ca port digital de intrare-ieire, cu ajutorul biilor GPPU i
INTEDG pot fi controlate urmtoarele funcii:
GPPU = 0 funcia weak pull up este activat i pinul portului poate fi legat
sau nu la VDD prin setarea/resetarea individual a bistabilelor de
comand (vezi registrul WPU);
GPPU = 1 funcia weak pull up este dezactivat;
INTEDG = 0 ntreruperea se va genera pe frontul negativ al impulsului furnizat
de sursa extern conectat la GP2;
INTEDG = 1 ntreruperea se va genera pe frontul pozitiv al impulsului furnizat
de sursa extern conectat la GP2;

Registrul TRISIO (adresa 81H)


Cu cei 6 bii ai acestui registru, TRISIO5TRISIO0, vom putea configura portul ca
fiind de intrare sau de ieire:
TRISIO<5:0> General Purpose I/O Tristate Control bit
1 pinul GPIO coresunztor este de intrare
0 pinul GPIO corespunztor este de ieire
n cazul GP0, prezentat n figura 5.1, cu TRISIO0 putem controla starea bistabilului
FF3.

Registrul WPU (adresa 95H)


WPU<5:0> Weak Pull Up Control bit
1 este validat legarea la VDD a pinului portului
0 este invalidat legarea la VDD a pinului portului
n cazul GP0, cu bitul WPU0 vom putea controla starea bistabilului FF1.

51
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 5

Registrul IOC (adresa 96H)


IOC<5:0> Interrupt On Change Control bit
1 valideaz ntreruperea generat la schimbarea strii logice pe pinul portului
0 invalideaz generarea ntreruperii la schimbarea strii logice
n cazul GP0, cu bitul IOC0 vom putea controla starea bistabilului FF4.

Registrul ANSEL (adresa 9FH)


ANS<3:0> Analog Select bit
1 pinul respectiv este definit ca intrare analogic
0 pinul respectiv al portului este definit ca fiind digital (intrare sau ieire)
n cazul n care GPIO este folosit ca port de intrare-ieire digital, trebuie ca
ANS3 = ANS2 = ANS1 = ANS0 = 0

5.4. EXEMPLU DE PROGRAMARE A PORTULUI GPIO


Pentru a exemplifica modul de programare a unui pin de port I/O al
microcontrolerului, vom dezvolta o aplicaie de realizare a unor operaii logice pe bit.
Problema propus spre rezolvare este urmtoarea: pe pinii GP3, GP4 i GP5 ai
portului de intrare-ieire al microcontrolerului, sunt furnizate din exterior informaii (date)
binare. Cu ajutorul unui program, aceste date trebuie citite i prelucrate conform schemei
logice din figura 5.3.
Studiind cu atenie schema logic de principiu din figur, rezult c trebuie s
realizm urmtoarea funcie logic:
GP2 = (GP3 NAND GP4) NAND (GP4 NOR GP5)
Pentru verificarea acestei aplicaii n simulator, vom seta valorile binare pe cele trei
intrri astfel:
GP3 = 0
GP4 = 0
GP5 = 1
Rezultatul prelucrrii conform schemei logice, va fi:
GP2 = 1
G P3 GP5
G P4

&
GP2
&
1

Figura 5.3. Schema logic pentru aplicaie

Realizarea acestei aplicaii nseamn de fapt programarea (configurarea) unor pini ai


microcontrolerului ca intrri digitale (GP3, GP4 i GP5), ntre care se execut operaiile
logice din schem, respectiv ca ieiri digitale (GP2), pe care se scrie rezultatul operaiei.

52
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 5

Elaborarea programului de realizare a unor operaii logice


n elaborarea programului de realizare a aplicaiei trebuie avute n vedere
particularitile setului de instruciuni precum i cele ale programrii portului de intrare-
ieire al microcontroler-ului PIC 12F675.
Astfel, deoarece n setul de instruciuni n limbaj de asamblare nu exist instruciuni
de prelucrare logic pe bit, vom defini cte un registru pentru fiecare pin de intrare care
trebuie citit: IN_3 (pentru GP3), IN_4 (pentru GP4), IN_5 (pentru GP5). Poziia bitului de
interes (n care se va memora valoarea citit pe pin), va fi aceeai n toate cele trei registre,
i anume bitul 0.
Programul elaborat conform acestor precizri suplimentare va fi compus din trei
secvene distincte:
Secvena de iniializare (Initialize) n care se vor seta funciile pinilor de port
utilizai n program i se vor iniializa corespunztor registrele cu funcii speciale
i cele definite de utilizator;
Secvena de citire a informaiilor de pe pinii de intrare GP3, GP4, GP5 i
memorarea lor n cele trei registre IN_3.0, IN_4.0, IN_5.0 (Read_pin);
Secvena de realizare a operaiilor logice ntre cei trei bii i scrierea rezultatului
pe pinul GP2. Secvena se va numi Execute. Pentru aceast secven vor trebui
definite registre n care s se stocheze rezultatele intermediare.
innd cont de toate acestea, rezult programul surs al aplicaiei prezentat n
continuare:
;Program de exemplificare pentru realizarea unor procesri logice pe bit
;n cadrul programului vor fi citii pinii GP3, GP4 si GP5, ntre care se va executa operaia logic:
; GP2 = (GP3 NAND GP4) NAND (GP4 NOR GP5)
; iar rezultatul va fi scos pe pinul GP2 al microcontrolerului
list p=12f675
#include <p12f675.inc>
errorlevel -302
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF &
_PWRTE_ON & _INTRC_OSC_NOCLKOUT
;Definirea unor registre specifice aplicaiei cu directiva CBLOCK
cblock 0x50
IN_3 ;Se definete registrul IN_3 n care se va nscrie (pe poziia
; bitului 0) valoarea citit pe pinul GP3
; Acest registru va avea adresa 50H
IN_4 ;IN_4 va avea aceeai semnificaie ca IN_3, iar adresa lui va fi 51H
IN_5 ;La fel i adresa registrului va fi 52H
LOG_INTERM1 ;Registru n care se vor memora rezultate intermediare
; Adresa lui va fi 53H
LOG_INTERM2 ;Adresa registrului va fi 54H
LOG_FINAL ;Adresa registrului va fi 55H
endc
;Initialize: secvena de iniializare a SFR-urilor i a celor de uz general
ORG 0x005
Initialize
; call 0x3FF ;Restabilirea factorului de calibrare instruciune comentariu
; necesar n cazul utilizrii simulatorului
bsf STATUS,RP0 ;Selectare bank 1
movwf OSCCAL ;Actualizare factor de calibrare oscilatorului

53
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 5

movlw 0x3B
movwf TRISIO ;Setare GP0, 1, 3, 4, 5 - intrari, GP2 - ieire
clrf ANSEL ;Configurarea intrrilor/ieirilor conv A/D ca I/O digitale
bsf OPTION_REG,7
;Activare Weak pull-up general
movlw 0x30 ;Weak pull-up pentru pinii definii ca intrri
movwf WPU
bcf STATUS,RP0 ;Selectare bank 0
movlw 0x07
movwf CMCON ;Dezactivarea comparatorului
clrf GPIO ;Resetarea registrului portului I/O
clrf LOG_INTERM1
clrf LOG_INTERM2
clrf LOG_FINAL
;Read_pin secvena de citire a semnalelor logice pe pinii de intrare
Read_pin
clrf IN_3
clrf IN_4
clrf IN_5
btfsc GPIO,3 ;Citete GP3 - dac este 0, sare instruciunea urmtoare
bsf IN_3,0 ; dac nu scrie 1 in IN_3,0
btfsc GPIO,4 ;Citete GP4 - dac este 0, sare instruciunea urmtoare
bsf IN_4,0 ; dac nu scrie 1 in IN_4,0
btfsc GPIO,5 ;Citete GP5 - dac este 0, sare instruciunea urmtoare
bsf IN_5,0 ; dac nu scrie 1 in IN_5,0
;Execute secvena de executare a operaiilor logice i de scriere a rezultatului pe pinul GP2
Execute
movf IN_3,0 ;Se transfer coninutul registrului IN_3 in W
andwf IN_4,0 ;Execut SI logic, rezultatul se va gsi in W
movwf LOG_INTERM1
comf LOG_INTERM1 ;n LOG_INTERM1 se va gsi rezultatul operaiei
; GP3 NAND GP4
movf IN_5,0 ;Se transfer coninutul registrului IN_5 in W
iorwf IN_4,0
movwf LOG_INTERM2
comf LOG_INTERM2,0
;n W se va gsi rezultatul operaiei
; GP5 NOR GP4
andwf LOG_INTERM1,0
;n W se va gsi rezultatul operaiilor
; (GP3 NAND GP4) AND (GP4 NOR GP5)
movwf LOG_FINAL
comf LOG_FINAL ;n LOG_FINAL se va gsi rezultatul final al operaiei logice
btfsc LOG_FINAL,0 ;Citete bitul 0 din LOG_FINAL - dac este 0 (rezultatul
; operaiilor logice este 0), se sare instruciunea urmtoare
bsf GPIO,2
end

Construirea proiectului i rularea programului


1. Se vor parcurge toate operaiile de programare pentru construirea proiectului aplicaiei
descrise n paragraful 4.2.1 din lecia 4.
2. Se face testarea/depanarea programului aplicaiei utiliznd programul de simulare
MPLAB SIM care se lanseaz n execuie cu comanda: Debugger Select Tool
MPLAB SIM. Datorit specificului aplicaiei, paii care trebuie parcuri pentru
verificarea corectitudinii programului, sunt urmtorii:

54
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 5

Pasul 1 Afiarea registrelor de interes n rularea programului


Operaia de selectare a registrelor utilizate n program, n scopul urmririi
modificrilor de coninut ale acestora n timpul rulrii, se face n fereastra Watch, care se
deschide selectnd Watch n meniul View.
Vor fi selectate registrele cu funcii speciale GPIO, OPTION_REG, STATUS,
TRISIO, PCL, WREG i cele definite cu directiva Cbloc n program.
Pasul 2 Definirea stimulilor schemei
Pentru verificarea funcionrii corecte este necesar s fie simulate valorile logice de
intrare n pinii GP3, GP4, GP5, care se numesc stimuli ai schemei i sunt de tip asincron.
Aceast operaie se execut n fereastra MPLAB Stimulus deschis cu comanda Stimulus din
meniul Debugger (figura 5.4), n care se vor executa urmtoarele operaii:

Figura 5.4. Definirea stimulilor schemei


Se activeaz tab-ul Pin Stimulus.
Se apas butonul Add Row i n linia selectat se aleg tipul (Type) de intrare (n
cazul nostru Asyncrone), pinul de port al microcontroller-ului (de exemplu GP3)
i nivelul logic la care se testeaz secvena de program (de exemplu Low).
Se procedeaz similar pentru GP4 i GP5. Se va seta nivel logic Low pentru GP4
i High pentru GP5, conform cu secvena logic propus pentru verificare.
Se salveaz cu butonul Save n folderul proiectului. Numele fiierului va fi, de
exemplu, Stim1.psti.
Observaie: Fiierul odat creat i denumit poate fi ncrcat ori de oricte este
nevoie, cu comanda Load din cmpul Pin Stimulus File.
Se activeaz nivelul logic setat pentru fiecare pin n parte cu comanda Fire n
cmpul Enable. Pentru exemplificarea avut n vedere, pinii GP3, GP4 i GP5 vor
fi setai corespunztor, cu valorile: Low, Low, High.

Pasul 3 Rularea programului


Rularea programului n simulator trebuie s nceap numai dup resetarea
microcontrolerului care se execut cu comanda Reset, fie din meniul Debugger, fie cu
butonul . Pentru rularea acestei aplicaii recomandm alternarea rulrii secveniale,
folosind comenzile contextuale Set PC at Cursor apoi Run to Cursor (click buton dreapta

55
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 5

mouse n dreptul liniei pn la care se dorete rularea), cu rularea pas cu pas (cu comanda
sau butonul Step Into).
Se va urmri modificarea coninutului registrelor conform cu logica programului i
valoarea final a registrului GPIO: 24 (0010 0100B adic GP5 = 1, GP4 = 0, GP3 = 0 i
GP2 = 1).

56

S-ar putea să vă placă și