Sunteți pe pagina 1din 39

3.

PORTURILE UNIVERSALE DE INTRARE/IEIRE I AFIAREA CU LED-URI

Scopul leciei: Prezentarea pe scurt a structurii i funcionalitii porturilor universale de intrare/ieire ale microcontrolerului 18F4520. Familiarizarea cu tehnicile elementare de iniializare, configurare i programare a porturilor folosind limbajul de asamblare i limbajul C.

3.1. Introducere
Porturile universale de intrare/ieire ale microcontrolerului sunt cele mai simple circuite cu care sunt echipate microcontrolerele. Porturile permit realizarea unor interaciuni simple cu mediul exterior, ca de exemplu citirea strii unui push-button sau comanda unei diode electroluminescente, prin urmtoarele aciuni principale: transfer bidirecional de date numerice; aplicarea unei comenzi din exterior; generarea unei comenzi sau semnal ctre exterior; cuplarea unor semnale analogice din exterior la blocul de conversie analog-numeric. Datorit multiplelor utilizri ale porturilor universale, proiectanii microcontrolerelor prevd mai multe porturi pentru fiecare tip de dispozitiv. Microcontrolerul PIC 18F4520 este prevzut cu cinci astfel de porturi (denumite A, B, C, D i E, primele patru de 8 bii i ultimul de 1 sau 4 bii n funcie de capsula utilizat) care vor fi descrise pe scurt n continuare. Pentru detalii suplimentare legate de structura, funcionarea, iniializarea i programarea porturilor, consultai foaia de catalog a microcontrolerului PIC 18F4520, fiierul LAB Picdem 2 Plus\Datasheets\ PIC18F4520 Data Sheet, i manualul de referin al familiei de microcontrolere PIC 18, fiierul LAB Picdem 2 Plus\Datasheets\PICmicro 18C MCU Reference Manual. Schema tipic a unui port de intrare/ieire este prezentat n Fig. 3.1. Fiecrui port i sunt asociate urmtoarele trei registre care vor asigura ndeplinirea funciilor acestuia: Registrul TRIS (Data Direction Register) cu care se poate controla direcia fluxului de date prin port. Pentru a defini un pin al portului ca fiind de intrare sau de ieire, se va seta sau reseta bitul corespunztor din registrului TRIS asociat portului (pe 1 l asociem cu Input iar pe 0 cu Output). Registrul LAT de memorie a portului (Output Data Latch) care este folosit pentru transmiterea paralel a datelor ctre ieire i este foarte util n operaii de tipul readmodify-write asupra valorilor de ieire ale portului. Registrul PORT care este folosit pentru a citi valorile semnalelor electrice de pe pinii portului. O operaie de citire a unui registru PORT nseamn citirea valorilor logice ale semnalelor prezente pe pinii portului, iar o operaie de scriere n registru PORT nseamn de fapt o scriere n registrul Output Data Latch al portului.

Fig. 3.1. Schema tipic a unui port de intrare/ieire Din considerente tehnologice i de cost, microcontrolerele sunt asamblate n capsule cu un numr finit de terminale (28, 40 sau 44 pentru PIC18F4520). Numrul limitat de terminale i numrul mare de componente dintr-un microcontroler care reclam conlucrarea cu exteriorul au impus o utilizare multiplexat a terminalelor. Acest lucru este posibil datorit faptului c diversele resurse ale microcontrolerului sunt folosite consecutiv i nu n acelai timp. La microcontrolerele din familia 18C, pe acelai pin pot fi multiplexate urmtoarele periferice/funcii: Convertor analog-digital, Temporizator/numrtor (Timer/Counter), Captur/Comparare/Modulare n durat a impulsurilor (Capture/Compare/Pulse Width Modulation CCP), ntrerupere extern, ntrerupere la schimbarea strii logice pe pin (Intrerupt on Change), Port paralel slave (Paralel Slave Port PSP), Programator serial n circuit (In Circuit Programmer), Oscilator de sistem, Port serial sincron (Synchronous Serial Port SSP) de tipul SPI (Serial Peripheral Interface) sau I2C (Inter-Integrated Circuit), Port serial sincron master (Master Synchronous Serial Port MSSP) de tipul SPI sau I2C cu suport hardware complet pentru modul master, Receptor/transmitor universal sincron/asincron adresabil (Universal Synchronous Asynchronous Receiver Transmitter USART), Modul bus CAN (Controller Area Network), Comparator, Generator de tensiune de referin, Detector de tensiune redus (Low Voltage Detect LVD). Datorit multifuncionalitii lor, fiecare pin de port are asociat o schem hardware particularizat corespunztoare funciilor pe care acesta trebuie s le ndeplineasc. 2

3.2. Portul A
Portul A este un port bidirecional de 8 bii. Pinii portului ndeplinesc funcii multiple aa cum rezult din Tabelul 3.1. Tabelul 3.1. Funciile pinilor portului A

Fig. 3.2. Schema bloc a pinilor RA0 RA3 i RA5

Fig. 3.3. Schema bloc a pinului RA4

Pinii RA0 RA3 mpreun cu RA5 pot fi folosii i ca intrri analogice ale convertorului A/D, pentru tensiunile de referin VREF+ i VREF i, respectiv, pentru intrri sau ieiri ale comparatoarelor analogice. n aceste cazuri, funciile lor vor fi controlate de registrul de control al blocului convertor A/D (ADCON1), respectiv al comparatoarelor analogice (CMCON). Schema bloc a pinilor RA0 RA3 i RA5 este prezentat n Fig. 3.2. Pinul RA4 al portului A are o structur diferit, aa cum se vede n Fig. 3.3, care-i permite o funcionare multiplexat (RA4/T0CK1/C1OUT), ndeplinind urmtoarele funcii: intrare/ieire digital, intrare de tact a Timer-ului 0 i ieire a unui comparator analogic. Pinii RA6 i RA7 sunt multiplexai cu oscilatorul principal al microcontrolerului. Toi pinii portului A au intrri TTL i ieiri CMOS cu excepia pinului RA4 care are intrare de tip Trigger Schmitt. Observaii: La pornire (Power on Reset) sau la resetare, pinii RA0 RA3 i RA5 sunt configurai ca intrri analogice i o citire a intrrii digitale va ntoarce valoarea 0. n cazul utilizrii pinilor RA0 RA3 i RA5 ca intrri sau ieiri digitale, funciile analogice alternative (convertor A/D respectiv comparatoarele analogice) vor fi dezactivate. La pornire sau la resetare, pinul RA4 este configurat ca intrare digital. Modul de iniializare a portului A este urmtorul:
CLRF PORTA ; CLRF LATA MOVLW MOVWF MOVWF MOVWF MOVLW 07h ADCON1 07h CMCON 0CFh ; ; ; ; ; ; ; ; ; ; ; Initializare PORTA prin stergerea registrelor de date de iesire (output data latch) Metoda alternativa de stergere a registrelor de date de iesire (output data latch) Configurare pini asociati convertorului A/D ca intrari digitale Configurare pini asociati comparatoarelor ca intrari digitale Valoare utilizata pentru initializarea directiei de transfer a datelor Setare RA<3:0> ca intrari si RA<5:4> ca iesiri

MOVWF TRISA

n Tabelul 3.2 sunt prezentate, n rezumat, registrele asociate portului A (pagina pentru valorile de reset din ultima coloan se refer la fiierul LAB Picdem 2 Plus\ Datasheets\PIC18F4520 Data Sheet). Tabelul 3.2. Registrele asociate portului A

3.3. Portul B
Portul B este un port bidirecional de 8 bii avnd pini cu funcii multiple (vezi Tabelul 3.3). Tabelul 3.3. Funciile pinilor portului B

Fig. 3.4. Schema bloc a pinilor RB0 RB3

Fig. 3.5. Schema bloc a pinilor RB4 RB7 7

Pinii RB2 RB0 sunt folosii i ca intrri pentru sursele externe de ntreruperi. Aceste ntreruperi sunt generate pe frontul cresctor sau descresctor (selectabil din registrul de control corespunztor) al impulsului aplicat din exterior. Schema bloc a pinilor RB0 RB3 este prezentat n Fig. 3.4. Semnalele Q1 i Q3 reprezint fazele 1 respectiv 3 ale unui ciclu main. Patru din pinii portului B (RB4 RB7) au implementat facilitatea de a genera cereri de ntrerupere la schimbarea strii logice a pinului (Interrupt on Change). Acest lucru se realizeaz prin compararea valorii vechi a semnalului de pe port (ultima valoare citit) cu noua valoare (valoarea curent) i n cazul unei anticoincidene (XOR) se genereaz o cerere de ntrerupere. Schema bloc a pinilor RB4 RB7 este prezentat n Fig. 3.5. Toi pinii portului B pot fi conectai printr-un rezistor la tensiunea VDD. Pentru activarea rezistenelor, se seteaz biii corespunztori din registrul TRIS i se terge bitul RBPU din registrul de comand INTCON2. Observaii: La pornire (Power on Reset), pinii RB0 RB4 sunt configurai ca pini analogici de intrare, iar pinii RB5 RB7 ca pini digitali de intrare. Prin resetarea bitului de configurare PBADEN, pinii RB0 RB4 pot fi configurai automat la pornire ca intrri digitale. Secvena recomandat de iniializare a portului B este urmtoarea:
CLRF PORTB ; CLRF LATB MOVLW 0Fh MOVWF ADCON1 MOVLW 0CFh MOVWF TRISB ; ; ; ; ; ; ; ; ; ; ; ; Initializare PORTA prin stergerea registrelor de date de iesire (output data latch) Metoda alternativa de stergere a registrelor de date de iesire (output data latch) Setare RB<4:0> ca pini digitali de intrare/iesire (necesara daca bitul de configurare PBADEN este setat) Valoare utilizata pentru initializarea directiei de transfer a datelor Setare RB<3:0> ca intrari RB<5:4> ca iesiri RB<7:6> ca intrari

n Tabelul 3.4 sunt prezentate, n rezumat, registrele asociate portului B (pagina pentru valorile de reset din ultima coloan se refer la fiierul LAB Picdem 2 Plus\ Datasheets\PIC18F4520 Data Sheet). Tabelul 3.4. Registrele asociate portului B

3.4. Registrele LATx i TRISx


Dup cum s-a precizat n introducere, fiecare port are asociate trei registre: Registrul pentru configurarea direciei de transfer (Data Direction Register) sau registrul TRISx, cu care poate fi configurat n mod individual fiecare pin al unui port ca fiind de ieire (TRISx bit = 0) sau de intrare (TRISx bit = 1). Registrul PORTx care este folosit pentru a citi valorile semnalelor electrice de pe pinii portului. Registrul LATx de memorie asociat portului (Output Data Latch) care este folosit pentru transmiterea datelor ctre ieire. O operaie de scriere n port nseamn de fapt o scriere n acest registru de memorie LATx. n cazul n care pinii portului sunt configurai, prin biii registrului TRISx, ca fiind de ieire i sunt neutilizai de alte componente interne, atunci coninutul acestui registru de memorie (LATx) va fi disponibil pe pinii portului. Exemplul urmtor demonstreaz c scrierea n PORTx nseamn de fapt scrierea n registrul de memorie LATx:
; LATB = 1100 0011 ; RB<7:0> = 1001 0011 ; TRISB = 1111 0000 (1=input 0=output) ; W_REG = 0010 1110 ; Scrie W_REG in PORTB ; datele sunt scrise in LATB ; LATB = 0010 1110 ; RB<7:0> = 1001 1110 ; Semioctetul superior nu se modifica ; (in TRISB fiind configurat ca intrare)

movwf PORTB

Observaie: Registrul de memorie LATx asociat portului poate fi scris i citit n mod direct. Pentru citirea unui port exist dou variante posibile: Citirea coninutului registrului de memorie LATx fr a ine seama dac pinii portului sunt sau nu configurai ca pini de ieire. Cuvntul de cod citit nu are nicio legtur cu valoarea efectiv a semnalelor din acel moment de pe pinii portului. Citirea efectiv a valorilor din acel moment ale semnalelor electrice existente pe pinii portului (valoare asociata registrului PORTx) cu excepia situaiei cnd un periferic foreaz citirea unei stri (valori) fixe. Diferena dintre cele dou variante de citire, citirea PORTB i citirea LATB, este ilustrat n exemplul urmtor:
; RB<7:0> = 1001 0101 ; LATB = 0111 0101 ; TRISB = 1111 0000 (1=input 0=output) ; Citeste starea pinilor PORTB ; W_REG = 1001 0101 ; Citeste continutul registrului de memorie LATB ; W_REG = 0111 0101

movf PORTB,W movf LATB,W

Pentru o mai bun nelegere a efectului de scriere n port sunt prezentate urmtoarele dou exemple:

Scrierea n PORTB
; TRISB = ; W_REG = ; LATB = ; RB<7:0> = ; Scrie W_REG ; LATB = ; RB<7:0> = ; 1111 0000 1011 0110 1100 0011 1001 0011 in LATB 1011 0110 1001 0110 (1=input 0=output)

movwf PORTB

doar semioctetul inferior apare pe pinii portului

Scrierea n LATB
; TRISB = ; W_REG = ; LATB = ; RB<7:0> = ; Scrie W_REG ; LATB = ; RB<7:0> = ; 1111 0000 1011 0110 1100 0011 1001 0011 in LATB 1011 0110 1001 0110 (1=input 0=output)

movwf LATB

acelasi rezultat ca la movwf PORTB

Orice instruciune care execut o scriere pe bit opereaz intern ca o instruciune de tipul read-modify-write. Atunci cnd astfel de instruciuni sunt utilizate asupra unui port la care pinii sunt comutai din intrri n ieiri, trebuie avute n vedere unele precauii. Urmtorul exemplu demonstreaz cum o instruciune de scriere pe bit a PORTB urmat de trecerea bitului RB7 din intrare n ieire determin o stare greit (neateptat) a bitului RB7 la ieire:
; RB<7:0> = 0001 0110 ; LATB = 1001 0110 ; TRISB = 1100 0000 ; Operatie citete modific scrie ; LATB = 0011 0110 bitul 7 este sters ; RB<7:0> = 1011 0110 RB7 se schimba in 1 ; RB7 este schimbat din intrare in iesire ; TRISB = 0100 0000 ; RB<7:0> = 0011 0110 RB7 este comandat cu 0

bsf PORTB,5 bcf TRISB,7

O soluie mai bun este utilizarea registrului de memorie LATx n locul PORTx n cazul instruciunilor de tipul citete-modific-scrie. Aa cum demonstreaz urmtorul exemplu, nu mai exist pericolul schimbrii nedorite a strii logice a bitului care este comutat din intrare n ieire:
; RB<7:0> = 1001 0110 ; LATB = 1001 0110 bitul 7 este 1 ; TRISB = 1100 0000 ; Operatie citete modific scrie ; LATB = 1011 0110 bitul 7 nu este modificat ; RB<7:0> = 1011 0110 ; RB7 este schimbat din intrare in iesire ; TRISB = 0100 0000 ; RB<7:0> = 1011 0110 RB7 ramane 1

bsf LATB,5 bcf TRISB,7

3.5. Portul C
Portul C este un port bidirecional de 8 bii avnd toi biii implementai cu intrri avnd buffere cu histerezis (Schmitt Trigger input buffers). Terminalele acestui port sunt multiplexate i ele cu cele ale unor periferice interne ale microcontrolerului, aa cum se vede n Tabelul 3.5.

10

Tabelul 3.5. Funciile pinilor portului C

11

Fig. 3.6. Schema bloc a unui pin al portului C Schema bloc a unui pin al portului C este prezentat n Fig. 3.6. Cnd sunt activate componentele periferice ale microcontrolerului, se va acorda o atenie special biilor registrului TRISC afereni fiecrui pin. Unele componente periferice interne configureaz automat pinul, neinnd cont de valorilor din registrul TRISC, ca fiind de intrare sau de ieire, iar alte componente periferice interne presupun programarea corespunztoare de ctre utilizator a valorilor biilor afereni din registrul TRISC. Pentru detalii suplimentare recomandm citirea foi de catalog a microcontrolerului (fiierul LAB Picdem 2 Plus\ Datasheets\PIC18F4520 Data Sheet). O citire din registrul TRISC va ntoarce ntotdeauna valoarea din registrul de memorie TRISC indiferent dac un periferic a configurat sau nu altfel pinii de ieire. Aceasta permite utilizatorului s citeasc statusul biilor din registrul TRISC n orice moment de timp. Ct timp ignorarea biilor din TRIS este n efect pe timpul validrii unui periferic, instruciunile de tipul citete-modific-scrie (BSF, BCF i altele) cu TRIS ca destinaie trebuie folosite cu grij. Aceste instruciuni nu vor avea nici un efect asupra strii curente a pinului. Cu toate acestea, nainte de invalidarea perifericului i redarea pinului pentru o utilizare general, utilizatorul trebuie s se asigure c bitul din registrul TRIS este corect setat pentru pinul respectiv. Registrele cu care lucreaz n mod uzual portul C sunt prezentate n Tabelul 3.6 (pagina pentru valorile de reset din ultima coloan se refer la fiierul LAB Picdem 2 Plus\ Datasheets\PIC18F4520 Data Sheet).

12

Tabelul 3.6. Registrele asociate portului C

Secvena de program recomandat pentru iniializarea portului C este urmtoarea:


CLRF PORTC ; CLRF LATC MOVLW 0CFh MOVWF TRISC ; ; ; ; ; ; ; ; ; Initializare PORTC prin stergerea registrelor de date de iesire (output data latch) Metoda alternativa de stergere a registrelor de date de iesire (output data latch) Valoare utilizata pentru initializarea directiei de transfer a datelor Setare RC<3:0> ca intrari RC<5:4> ca iesiri RC<7:6> ca intrari

Observaie: La pornire, pinii portului C sunt configurai ca intrri digitale.

3.6. Portul D
Portul D este un port bidirecional de 8 bii avnd toi biii implementai avnd pe intrri buffere Trigger Schmitt. Fiecare pin poate fi configurat n mod individual ca fiind de intrare sau de ieire. Schema bloc a unui pin al portului D este prezentat n Fig. 3.7. O operaie de citire a portului nseamn de fapt citirea strii electrice a pinilor portului, pe cnd o operaie de scriere nseamn scrierea n registrul Output Data Latch a portului. Secvena de iniializare a portului este urmtoarea:
CLRF PORTD ; CLRF LATD MOVLW 0xCF MOVWF TRISD ; ; ; ; ; ; ; ; ; Initializare PORTC prin stergerea registrelor de date de iesire (output data latch) Metoda alternativa de stergere a registrelor de date de iesire (output data latch) Valoare utilizata pentru initializarea directiei de transfer a datelor Setare RD<3:0> ca intrari RD<5:4> ca iesiri RD<7:6> ca intrari

Observaie: La pornire, pinii portului D sunt configurai ca intrri digitale.

13

Trei pini ai portului D sunt multiplexai cu ieirile P1B, P1C i P1D ai modulului Enhanced CCP. Portul D poate fi configurat i ca un port paralel de 8 bii (Paralel Slave Port PSP) prin setarea bitului de configurare PSPMODE localizat n registrul TRISE (TRISE<4>). Semnificaia pinilor portului D este dat n Tabelul 3.7. Tabelul 3.7. Funciile pinilor portului D

14

Fig. 3.7. Schema bloc a unui pin al portului D n Tabelul 3.8 sunt prezentate, n rezumat, registrele asociate portului D. Tabelul 3.8. Registrele asociate portului D

3.7. Portul E
Portul E este un port de patru bii (vezi Tabelul 3.9). Dintre cei patru bii, trei pot fi configurai pentru a fi de intrare sau de ieire (RE0/ RD /AN5, RE1/ WR /AN6 i RE2/ CS /AN7), iar cel de-al patrulea pin al portului (RE3/ MCLR /VPP) este doar de intrare. Acest ultim pin nu are bii asociai n registrele TRISE i LATE. Funciile acestui pin sunt controlate de bitul de 15

configurare MCLR. Pentru MCLR = 0, pinul poate fi utilizat doar ca intrare digital, altfel este folosit ca intrare de Master Clear. n ambele situaii, pinul mai poate fi utilizat ca intrare pentru tensiunea de programare n procesul de programare.
Tabelul 3.9. Funciile pinilor portului E

Registrul TRISE este folosit n dou scopuri: biii inferiori (RE<2:0>) controleaz direcia fluxului de date pe pinii portului E, iar biii superiori sunt utilizai ca bii de control i stare n cazul regimului de lucru Paralel Slave Port al portului D (vezi Tabelul 3.10).
Tabelul 3.10. Registrele asociate portului E

16

Secvena de program recomandat pentru iniializarea portului E este urmtoarea:


CLRF PORTE ; CLRF LATE MOVLW 0Ah MOVWF ADCON1 MOVLW 03h MOVWF TRISE ; ; ; ; ; ; ; ; ; ; ; Initializare PORTC prin stergerea registrelor de date de iesire (output data latch) Metoda alternativa de stergere a registrelor de date de iesire (output data latch) Configurare pini asociati convertorului A/D ca intrari digitale Valoare utilizata pentru initializarea directiei de transfer a datelor Setare RE<0> ca intrare RE<1> ca iesiri RE<2> ca intrare

Observaie: La pornire, RE<2:0> sunt configurai ca intrri analogice.

La pornire, RE3 este configurat ca intrare digital numai dac funcia Master Clear este invalidat. Schema bloc a unui pin asociat portului E este prezentat n Fig. 3.8.

Fig. 3.8. Schema bloc a unui pin tipic al portului E

3.8. Portul paralel slave


La microcontrolerul PIC18F4520 este implementat i funcia de port paralel slave (Paralel Slave Port PSP) folosind portul D, pentru a asigura transferul bidirecional de date pe 8 bii, mpreuna cu biii superiori ai registrului E, care asigur comenzile necesare controlului unui asemenea transfer (comenzile RD, WR i CS).

17

Schema bloc a pinilor PORTD i PORTE n funcionarea ca PSP este prezentat n Fig. 3.9. Alegerea acestui mod de lucru se face prin setarea bitului PSPMODE (TRISE<4>). Biii TRISE<7:5> sunt folosii pentru a indica stri asociate funciei PSP (vezi Tabelul 3.10). n modul de lucru PSP, portul D poate lucra direct cu o magistral de date de 8 bii a unui microprocesor. Microprocesorul extern poate scrie sau citi registrul de memorie asociat portului D (PORTD Data Latch) folosind n acest scop comenzile RD, WR, respectiv CS accesibile prin pinii RE0, RE1 i RE2 ai portului E. Pentru aceast funcionalitate, biii TRISE<2:0> trebuie setai pentru a configura pinii respectivi ca pini de intrare. De asemenea, biii de configurare PFCG<3:0> (ADCON1<3:0>) ai pinilor A/D trebuie setai la o valoare cuprins ntre 1010 i 1111. Formele de und care ilustreaz o operaie de scriere sunt prezentate n Fig. 3.10. O operaie de scriere n PSP apare atunci cnd se detecteaz pentru prima oar ambele linii CS i WR pe nivel logic 0 i se termin cnd cel puin una trece pe nivel logic 1. La terminarea operaiei de scriere, biii de stare PSPIF (din registrul PIR1) i IBF (din registrul TRISE) vor fi setai. Formele de und care ilustreaz o operaie de citire sunt prezentate n Fig. 3.11.

Fig. 3.9. Schema bloc a pinilor PORTD i PORTE n funcionarea ca PSP

Fig. 3.10. Formele de und pentru o operaie de scriere PSP

18

Fig. 3.11. Formele de und pentru o operaie de citire PSP

O operaie de citire apare atunci cnd ambele semnale CS respectiv RD sunt simultan detectate pentru prima oar pe nivel logic 0. Datele din registrul PORTD sunt citite concomitent cu resetarea bitului OBF (din registrul TRISE). Dac utilizatorul scrie o nou dat n PORTD pentru a seta OBF, datele sunt imediat citite, dar bitul OBF nu mai este setat. Dac unul din semnalele CS sau RD trece pe nivel logic 1, pinii portului D devin de intrare i se seteaz bitul PSPIF. Aplicaia utilizatorului trebuie s atepte ca bitul PSPIF s fie setat, nainte de a fi ntreprins o aciune asupra funciei PSP. Aciunea poate fi hotrt dup examinarea strilor biilor IBF i OBF. n Tabelul 3.11 sunt prezentate registrele asociate funciei PSP ale porturilor D i E.
Tabelul 3.11. Registrele porturilor D i E asociate funciei PSP

19

3.9. Desfurarea leciei


ACTIVITATEA 3.1 CITIREA STRII UNUI NTRERUPTOR I COMANDA UNUI LED N LIMBAJ DE ASAMBLARE
Nu uitai c modul de pornire a sistemului de dezvoltare este foarte important pentru corecta funcionare a sa. Dac la un moment dat sistemul nu execut comenzile date sau nu funcioneaz aa cum v ateptai, chiar dup o pornire corect, probabil va trebui s reinstalai driverul pentru MPLAB ICD 2, conform instruciunilor de la Activitatea 2.1. Activitatea 3.1 are ca scop realizarea unui program n limbaj de asamblare pentru ilustrarea citirii strii unui ntreruptor mecanic i comanda comutrii strii unui LED. La pornirea programului, LED-ul RB3 trebuie s clipeasc de dou ori, iar dup aceasta, LED-ul RB2 trebuie s i schimbe starea aprins/stins la fiecare apsare a butonului RB4 (S2). 1.1. Pornii sistemul de dezvoltare executnd paii urmtori: Conectai modulul MPLAB ICD 2 la o intrare USB a PC-ului folosind cablul USB. Ateptai cteva secunde pentru ncrcarea driver-ului de ctre sistemul de operare. Conectai alimentatorul la mufa de alimentare a MPLAB ICD 2. Conectai dup alte cteva secunde placa de demonstraie PICDEM 2 Plus la MPLAB ICD 2 folosind cablul ICD. Lansai programul MPLAB IDE dac nu este deja pornit. Verificai c LED-ul Power de pe placa PICDEM 2 Plus s-a aprins. 1.2. tergei coninutul microcontrolerului de pe placa de demonstraie astfel: Selectai dispozitivul de programare prin selectarea Programmer > Select Programmer > MPLAB ICD2. Acesta trebuie s se conecteze n mod normal automat. Dac nu se realizeaz acest lucru, executai manual conectarea dispozitivului de programare cu comanda Programmer > Connect. tergei coninutul microcontrolerului cu comanda Programmer > Erase Part. Verificai tergerea cu succes a microcontrolerului cu comanda Programmer > Blank Check. Dac toate operaiile anterioare au fost executate corect, n fereastra Output tab-ul MPLAB ICD 2 nu trebuie s apar niciun mesaj de eroare sau avertisment. Pentru a v asigura c microcontrolerul a fost ters complet, ncercai s pornii programul nscris n el folosind comanda Programmer > Release from Reset. n acest moment nu trebuie s vedei nici un text afiat pe LCD sau vreun LED clipind. Oprii microcontrolerul din execuie folosind comanda Programmer > Hold in Reset. 1.3. Construii proiectul programului care ilustreaz citirea strii unui ntreruptor mecanic (apsat/relaxat) i comanda comutrii strii (aprins/stins) a unui LED parcurgnd urmtorii pai: Creai un director pentru noul proiect, de exemplu My Projects\LED_ASM. Copiai n aceast nou locaie, din directorul LAB PICDEM 2 Plus\CDsel PICDEMO 2 Plus\PICDEM_2_Plus\pic18, fiierul 18f4520.lkr. Din fereastra programului MPLAB IDE lansai vrjitorul de creare a unui nou proiect cu comanda: Project > Project Wizard. Dai un click pe Next pentru a continua. n pasul 1 selectai pentru Device: PIC18F4520. Continuai cu Next. n pasul 2 selectai pentru Active Toolsuite: Microchip MPASM Toolsuite i bifai csua Store tool locations in project. Continuai cu Next. n pasul 3 selectai la Create New Project File locaia aleas i numele proiectului folosind butonul Browse, de exemplu, dac ai urmat sugestiile anterioare, My Documents\My Project\LED_ASM\LED. Continuai cu Next.

20

n pasul 4 adugai la proiect fiierul copiat anterior n directorul proiectului. Pentru aceasta, n zona din stnga ferestrei nou deschise selectai fiierul dorit din directorul proiectului i apoi apsai butonul Add>>. Continuai cu Next. Terminai crearea noului proiect cu un click pe butonul Finish i comanda Project > Save Project pentru a salva proiectul nou creat. Creai un nou fiier surs cu comanda File > New (Ctrl + N). n fereastra care apare editai urmtorul program al aplicaiei:
;PROGRAMUL LED - utilizarea porturilor: ; Citirea starii unui intrerupator si comutarea starii unui LED list #include #define scroll #define select _PBADEN_OFF_3H EQU p=18f4520 p18f4520.inc PORTA,4 PORTB,0 H'FD' ;Seteaza dispozitivul target ;Defineste dispozitivul target ;Push-button RA4 pe PCB ;Push-button RB0 pe PCB

;PORTB<4:0> pinii sunt configurati ; ca intrari/iesiri digitale la ; Reset ;Sectiune definire variabile

variables temp_1 temp_2 temp_3 PROGRAM start: bsf movlw movwf bsf call bcf call bsf call bcf

UDATA RES 1 RES 1 RES 1 CODE TRISA,4 B'00000001' TRISB PORTB,3 delay_1s PORTB,3 delay_1s PORTB,3 delay_1s PORTB,3

;Sectiune program ;Seteaza RA4 ca Input (switch S2) ;Seteaza RB0 ca Input (switch S3) ;Seteaza bit 3 port B aprinde LED-ul RB3 ;Intirziere 1 secunda ;Sterge bit 3 port B stinge LED-ul RB3

;---------------- LED ---------------stinge: bcf PORTB,2 ;Stinge LED-ul RB2 call delay_100ms ;Intirziere 100 milisecunde btfss scroll ;Testeaza scrool si daca este unu executa ; salt peste instructiunea urmatoare bra $-2 ;Salt inapoi la instructiunea anterioara call delay_100ms btfsc scroll ;Testeaza scrool si daca este zero executa ; salt peste instructiunea urmatoare bra $-2 aprinde: bsf PORTB,2 call delay_100ms btfss scroll bra $-2 call delay_100ms btfsc scroll bra $-2 goto stinge

21

;---------------- 100ms Delay ---------------delay_100ms: movlw 0xFF ;Incarca registrul W cu FFh movwf temp_1 ;Incarca temp_1 cu valoarea din W movlw 0x83 movwf temp_2 d100l1: decfsz temp_1,F ;Decrementeaza temp1 si daca este zero ; executa salt peste instructiunea urmatoare bra d100l1 ;Salt neconditionat la d10011 decfsz temp_2,F bra d100l1 return ;---------------- 1s Delay ----------------delay_1s: movlw 0xFF movwf temp_1 movwf temp_2 movlw 0x05 movwf temp_3 d1l1: decfsz temp_1,F bra d1l1 decfsz temp_2,F bra d1l1 decfsz temp_3,F bra d1l1 return end

Salvai fiierul cu numele LED.ASM n directorul proiectului My Projects\LED_ASM folosind comanda File >Save (Ctrl + S). nchidei fereastra fiierului surs. Adugai n proiect fiierul creat, editat i salvat anterior, folosind comanda Project > Add Files to Project. Trecei dispozitivul MPLAB ICD 2 n regim de debugger selectnd comanda Debugger > Select Tool > MPLAB ICD 2. Acesta trebuie s se conecteze n mod normal automat. Dac nu se realizeaz acest lucru, executai manual conectarea dispozitivului de programare la dispozitivul target cu comanda Debugger > Connect. Verificai c n Project > Build Configuration este bifat opiunea Debug pentru a putea executa programul n mod de lucru depanare. Construii ntregul proiect cu comanda Project > Build All (Ctrl + F10). Dac apar unele avertismente, selectai butonul corespunztor pentru ca MPLAB IDE s fac singur setrile necesare pentru a putea continua. Urmrii mesajele afiate n fereastra Output tab-ul Build ca s nu apar erori i ultimul mesaj s fie BUILD SUCCEEDED. n cazul apariiei unor erori n timpul construirii ntregului proiect, acestea vor fi afiate n fereastra Output tab-ul Build prin menionarea tipului erorii i a liniei program n care aceasta a aprut. Dup corectarea fiierului surs, va trebui s reconstruii proiectul i s corectai, dac este cazul, n mod asemntor, i restul erorilor aprute, pn la obinerea mesajului BUILD SUCCEEDED. 1.4. Programai microcontrolerul i lansai n execuie programul LED, pe care tocmai l-ai construit, astfel: Programai microcontrolerul folosind comanda Debugger > Program. Dac apar unele avertismente, selectai butonul corespunztor pentru a putea continua. Dac nu apare nici un mesaj de eroare, nseamn c dispozitivul este programat i putei utiliza comenzile debugger-ului pentru execuia programului. 22

Verificai funcionarea programului. Selectai Debugger > Run (F9) pentru a executa programul. La pornirea lui, LED-ul RB3 trebuie s clipeasc de dou ori, iar dup aceasta, LED-ul RB2 trebuie s i schimbe starea aprins/stins la fiecare apsare a butonului RB4 (S2). Selectai Debugger > Halt (F5) pentru a opri execuia programului. Pentru a putea relua execuia programului, trebuie ca nainte de comanda Run s resetai procesorul cu comanda Debuger > Reset > Processor Reset (F6). 1.5. Editai, reasamblai, reprogramai i rulai aplicaia modificnd comportarea sa la lansarea n execuie astfel: Deschidei fiierul surs al programului principal printr-un dublu click n fereastra proiectului (LED.mcw) pe fisierul LED.ASM. Identificai poriunile de cod care comand aprinderea i stingerea LED-ului RB3 n poriunea de start a programului, precum i codul de realizare a temporizrilor ntre aceste aciuni. Modificai programul astfel nct, la pornirea sa, LED-ul RB3 s clipeasc de 3 ori. Salvai i nchidei fiierul surs. Reconstruii proiectul modificat cu comanda Project > Build All. Programai microcontrolerul cu comanda Debugger > Program. Executai programul cu comanda Debugger > Run. Verificai funcionarea corect a programului. Oprii execuia programului cu comanda Debugger > Halt. 1.6. Editai, reconstruii, reprogramai i executai aplicaia modificat pentru aprinderea altui LED astfel: Deschidei fiierul surs al programul principal (LED.ASM). Identificai poriunile de cod care comand aprinderea i stingerea LED-ului. Modificai programul astfel nct la apsarea butonului RA4 s se aprind LED-ul RB1 de pe placa demonstrativ PICDEM 2 Plus. Salvai i nchidei fiierul surs. Reconstruii proiectul modificat (Ctrl + F10). Reprogramai microcontrolerul. Executai programul (F9). Verificai funcionarea corect a aplicaiei. Oprii execuia programului (F5). 1.7. Modificai aplicaia anterioar pentru utilizarea butonului RB0 (S3) pentru comanda aprinderii LED-ului: Deschidei fiierul surs pentru editare. Identificai poriunile de cod care definesc, respectiv iniializeaz, porturile la care sunt conectate cele dou ntreruptoare S2 i S3. Modificai programul astfel nct la apsarea butonului RB0 s se aprind LED-ul RB1 de pe placa demonstrativ PICDEM 2 Plus. Reconstruii proiectul modificat. Reprogramai microcontrolerul. Executai programul, verificai funcionarea corect a sa i apoi oprii-l din execuie. 1.8. Modificai aplicaia anterioar astfel nct prin apsarea lui S3 s se aprind alternativ LEDurile RB1 i RB2. Executai i verificai aplicaia modificat. 1.9. Modificai aplicaia anterioar astfel nct aprinderea i stingerea LED-urilor s aib loc la 100 de milisecunde dup eliberarea butonului de comand.

ACTIVITATEA 3.2 CITIREA STRII UNUI NTRERUPTOR I COMANDA UNUI LED N LIMBAJ C
Aceast activitate va realiza aceeai funcionalitate cu cea de la Activitatea 3.1, dar folosind limbajul de programare C. 2.1. tergei coninutul microcontrolerului de pe placa de demonstraie (vezi punctul 1.2 din Activitatea 3.1).

23

2.2. Construii proiectul programului care ilustreaz citirea strii unui ntreruptor i comanda unui LED n limbaj C parcurgnd urmtorii pai: nchidei proiectul anterior cu comanda Project > Close. Creai un director pentru noul proiect, de exemplu My Projects\LED_C; Din fereastra programului MPLAB IDE lansai vrjitorul de creare a unui nou proiect cu comanda: Project > Project Wizard. Dai un click pe Next pentru a continua. n pasul 1 selectai pentru Device: PIC18F4520. Continuai cu Next. n pasul 2 selectai pentru Active Toolsuite: MicrochipC18 Toolsuite i bifai csua Store tool locations in project. Continuai cu Next. n pasul 3 selectai la Create New Project File locaia aleas i numele proiectului folosind butonul Browse, de exemplu My Documents\My Project\LED_C\LED. Continuai cu Next. Continuai cu Next pentru a sri peste pasul 4. Terminai crearea noului proiect cu un click pe butonul Finish i comanda Project > Save Project pentru a salva proiectul nou creat. Creai un nou fiier surs cu comanda File > New. n fereastra care apare editai urmtorul program n limbaj C:
//PROGRAMUL LED - utilizarea porturilor: // Citirea starii unui intrerupator si comutarea starii unui LED #include #include // Configurare #pragma config OSC = HS /* Setare mod High Speed Crystal/Resonator (Domeniu: 4-25 MHz) */ #pragma config PWRT = ON //OFF-ON pentru modul Debugger/Programmer /* Power-up Timer (PWRT) este un numarator de 11 biti care utilizeaza sursa INTRC ca intrare de ceas. Acesta genereaza un interval de timp de aproximativ 2048 x 32 s = 65.6ms. Cat timp PWRT numara, dispozitivul este mentinut in Reset. Intirzierea la alimentare (power-up) depinde de ceasul INTRC si variaza de la chip la chip datorita temperaturii si variatiilor in procesul de fabricatie. Vezi parametrul de curent continuu 33 pentru detalii. Temporizatorul PWRT este validat prin stergerea bitului de configurare PWRTEN. */ #pragma config PBADEN = ON /* Setare PORTB<4:0> ca INTRARI ANALOGICE la RESET */ #pragma config WDT = OFF, WDTPS = 1 /* Watchdog Timer */ #pragma config LVP = OFF /* ICSP cu o sursa de alimentare */ #pragma config DEBUG = OFF #pragma config CP0 = OFF,CP1 = OFF,CP2 = OFF,CP3 = OFF,CPB = OFF,CPD = OFF /* Protectia codului: bitii CPn invalideaza citirea/scrierea din exterior */ #pragma config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF, WRT3 = OFF,WRTB = OFF,WRTC = OFF,WRTD = OFF /* Protectie la sciere */ #pragma config EBTR0 = OFF,EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF,EBTRB = OFF /* External Block Table Read: bitii EBTRn controleaza citirile din tabel */ <p18f4520.h> <delays.h> //Descriere controller conform datasheet //Definire functii de intirziere

24

#define SWITCH PORTAbits.RA4 /* PORTA/PORTB este un port bidirectional avand latimea de 8 biti. Registrul corespunzator pentru directia datelor este TRISA/TRISB. Setarea unui bit in TRISA/TRISB (=1) va face ca pinul corespunzator din PORTB/PORTA sa fie intrare (adica va pune etajul de iesire corespunzator in starea de impedanta ridicata). Stergerea unui bit in TRISA/TRISB (=0) va face ca pinul corespunzator din PORTB/PORTA sa fie iesire */ void main(void) { ADCON1=0x0F; /* 0x0f=00001111 Modulul convertor Analog/Digital are 10 intrari pentru dispozitivul cu 28 de pini si 13 intrari pentru dispozitivul cu 40/44 pini. Acest modul permite conversia unui semnal analogic de intrare intr-un numar binar de 10 biti corespunzator. Modulul are cinci registre: A/D Result High Register (ADRESH) A/D Result Low Register (ADRESL) A/D Control Register 0 (ADCON0) A/D Control Register 1 (ADCON1) A/D Control Register 2 (ADCON2) Registrul ADCON0 controleaza operarea modulului A/D. Registrul ADCON1 configureaza functiile pinilor portului.Registrul ADCON2 configureaza sursa ceasului convertorului A/D, programarea timpului de achizitie si justificarea. (vezi pagina 224 din foaia de catalog a PIC18F4520) */ PORTB=0b00000000; PORTA=0b00000000; TRISB=0b00000001; TRISA=0b00010000; PORTBbits.RB3=1; Delay10KTCYx(100); PORTBbits.RB3=0; Delay10KTCYx(100); PORTBbits.RB3=1; Delay10KTCYx(100); PORTBbits.RB3=0; //Sterge PORTB //Sterge PORTA //Pinul RB0-S3 al PORTB este INTRARE //Pinul RA4-S2 al PORTA este INTRARE, // restul sunt IESIRI //Se aprinde Led-ul RB3 //Intirziere multiplu de 10000 ciclii // instructiune (pentru ceas de 4MHz, // 1 ciclu corespunde la 1us) //Se stinge Led-ul RB3 //Intirziere 1s=100x10000x1us

while(1) { while(SWITCH==1) {} PORTBbits.RB2=1; Delay1KTCYx(100); while(SWITCH==1) {} PORTBbits.RB2=0; Delay1KTCYx(100);

//Se iese din bucla cand // SWITCH este apasat (=0) //Se aprinde Led-ul RB2 //Intirziere multiplu de 1000 ciclii // instructiune (pentru ceas de // 4MHz, corespunde la 1us) //Se stinge Led-ul RB2 //Intirziere 100ms=100x1000x1us

} }

25

Salvai fiierul cu numele LED.C n directorul proiectului My Projects\LED_C folosind comanda File > Save. Bifai n fereastra Save As caseta Add File To Project pentru a aduga automat fiierul n proiect. Dup salvare, nchidei fereastra fiierului surs. Trecei dispozitivul MPLAB ICD 2 n regim de depanator selectnd comanda Debugger > Select Tool > MPLAB ICD 2. La nevoie, conectai-l manual cu comanda Debugger >Connect. Verificai c n Project > Build Configuration este bifat opiunea Debug pentru a putea executa programul n modul depanare. Construii ntregul proiect cu comanda Project > Build All. Dac apar unele avertismente, selectai butonul corespunztor pentru ca MPLAB IDE s fac singur setrile necesare pentru a putea continua. Urmrii mesajele afiate n fereastra Output tab-ul Build ca s nu apar erori i ultimul mesaj s fie BUILD SUCCEEDED. Dac apar erori, corectai-le n fiierul surs folosind tipul erorii i linia de program care a generat-o afiate n fereastra Output tab-ul Build. Dup corectarea fiierului surs, reconstruii proiectul. Repetai editarea fiierului surs i reconstruirea proiectului pn la obinerea mesajului BUILD SUCCEEDED. 2.3. Programai microcontrolerul i lansai n execuie programul LED, pe care tocmai l-ai construit, astfel: Programai microcontrolerul cu comanda Debugger > Program. Dac apar unele avertismente, selectai butonul corespunztor pentru a putea continua. Dac nu apare nici un mesaj de eroare, nseamn c dispozitivul este programat i putei utiliza comenzile debugger-ului pentru execuia programului. Verificai funcionarea programului. Selectai Debugger > Run pentru a executa programul. La pornirea lui, LED-ul RB3 trebuie s clipeasc de dou ori, iar dup aceasta, LED-ul RB2 trebuie s i schimbe starea aprins/stins la fiecare apsare a butonului RA4 (S2). Selectai Debugger > Halt pentru a opri execuia programului. Nu uitai c pentru a putea relua execuia programului, trebuie ca nainte de comanda Run s resetai procesorul cu Debugger > Processor Reset. Observaie: Comenzile uzuale n modul de lucru Debugger sau Programmer pot fi accesate mai uor fie prin utilizarea comenzilor scurte (shortcut-uri), listate n meniurile text corespunztoare, fie printr-un click cu mouse-ul pe icoana corespunztoare din bara de instrumente (oprind cursorul peste o icoana din bara de instrumente, v este afiat denumirea funciei din meniul text pe care o execut).

2.4. Aa cum ai constatat prin verificarea execuiei programului editat anterior, cum S2 nu are hardware debounce i cum n codul surs nu este prevzut un procedeu sigur de eliminare a oscilaiilor care apar la comutarea mecanic a ntreruptorului, comportarea sistemului la acionarea sa nu este perfect previzibil (funcioneaz corect doar pentru apsri scurte sub 100 ms a ntreruptorului). Editai, reconstruii, reprogramai i executai aplicaia modificat astfel nct s corectai acest neajuns parcurgnd urmtorii pai: Concepei un algoritm eficient de eliminare a oscilaiilor aprute la comutarea mecanic a ntreruptorului (software debounce) sau folosii-l pe cel utilizat anterior n programul scris n limbaj de asamblare. Deschidei fiierul surs LED.C pentru editare. Editai codul care implementeaz algoritmul conceput anterior. Salvai fiierul surs. Reconstruii proiectul modificat. Reprogramai microcontrolerul. Executai programul, verificai funcionarea corect a sa i apoi oprii-l din execuie. 2.5. Editai, reconstruii, reprogramai i executai aplicaia modificat astfel nct, la lansarea n execuie, LED-ul RB1 s se aprind de trei ori. 2.6. Modificai aplicaia anterioar pentru utilizarea butonului RB0 (S3) pentru comanda aprinderii LED-ului RB3. Executai i verificai aplicaia modificat.
26

2.7. Modificai aplicaia anterioar astfel nct prin apsarea lui S3 s se aprind alternativ LEDurile RB3 i RB2. Executai i verificai aplicaia modificat. 2.8. Modificai aplicaia anterioar astfel nct aprinderea i stingerea LED-urilor s aib loc la 100 de milisecunde dup eliberarea butonului de comand.

ACTIVITATEA 3.3 COMANDA DIRECT A UNUI AFIOR CU 7 SEGMENTE CU LED-URI N LIMBAJ C


Aceast activitate va ilustra, folosind limbajul C, comanda direct prin pinii portului C a unui afior cu 7 segmente cu LED-uri cu anod comun, utilizat n mod obinuit pentru afiarea cifrelor zecimale. Pentru acest scop, se va utiliza afiorul MDE 2101V (cu carcas alb) ale crui conexiuni sunt prezentate n Fig. 3.12. Alocarea segmentelor afiorului la pinii portului C este urmtoarea: RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 a b c d e f g Dp

Fig. 3.12. Conexiunile afiorului cu 7 segmente cu LED-uri verzi cu anod comun tip MDE 2101V (vedere de sus)

Schema circuitului de comand direct a afiorului cu 7 segmente cu LED-uri cu anod comun este prezentat n Fig. 3.13. 3.1. tergei coninutul microcontrolerului de pe placa de demonstraie. 3.2. Deconectai placa demonstrativ PICDEM 2 Plus de la programatorul/depanatorul MPLAB ICD 2 scond cablul special ICD din mufa plcii demonstrative. IMPORTANT: pe perioada realizrii montajelor practice i mai ales la realizarea conexiunilor la placa demonstrativ, acesta nu trebuie s fie alimentat (LED-ul PWR trebuie s fie stins), nici prin intermediul lui MPLAB ICD 2, nici direct prin sursa universal de alimentare de 9 V/0,75 A conectat la PICDEM 2 Plus.

27

Fig. 3.13. Schema circuitului de comand direct a afiorului cu 7 segmente cu LED-uri cu anod comun

3.3. Mutai jumper-ul J9 de pe placa demonstrativ PICDEM 2 Plus pe poziia deschis. Acest lucru este necesar pentru deconectarea buzzer-ului existent pe plac de la pinul RC2 (vezi schema din Fig. 2.4), pin care va fi folosit pentru alte scopuri n aceast aplicaie. 3.4. Construii montajul practic, conform schemei din Fig. 3.13, folosind o plac de test universal. Lsai la urm conexiunile la pinii portului C prin intermediul conectorului PICtail de pe placa de demonstraie. Realizarea tuturor celor trei montaje practice din aceast lecie pe aceeai plac de test universal este ilustrat n Fig. 3.14. 3.5. Reconectai placa demonstrativ PICDEM 2 Plus la programatorul/depanatorul MPLAB ICD 2 folosind cablul special ICD. 3.6. Construii proiectul programului care ilustreaz comanda direct, prin pinii portului C, a unui afior cu 7 segmente cu LED-uri cu anod comun, n limbaj C, parcurgnd urmtorii pai: nchidei proiectul anterior cu comanda Project > Close. Creai un director pentru noul proiect, de exemplu My Projects\7Sac_C; Din fereastra programului MPLAB IDE lansai vrjitorul de creare a unui nou proiect cu comanda: Project > Project Wizard. Dai un click pe Next pentru a continua. n pasul 1 selectai pentru Device: PIC18F4520. Continuai cu Next. n pasul 2 selectai pentru Active Toolsuite: MicrochipC18 Toolsuite i bifai csua Store tool locations in project. Continuai cu Next. n pasul 3 selectai la Create New Project File locaia aleas i numele proiectului folosind butonul Browse, de exemplu My Documents\My Project\7Sac_C\7Stest. Continuai cu Next. Continuai cu Next pentru a sri peste pasul 4. Terminai crearea noului proiect cu un click pe butonul Finish i comanda Project > Save Project pentru a salva proiectul nou creat.
28

Fig. 3.14. Montajul pe placa de test universal i legturile la conectorul PICtail Creai un nou fiier surs cu comanda File > New (Ctrl + N). n fereastra care apare editai urmtorul program n limbaj C:
//PROGRAMUL 7Stest - utilizarea porturilor: // Testarea prin comanda directa // a segmentelor unui afisor cu 7 segmente cu anod comun #include #include // Configurare #pragma #pragma #pragma #pragma #pragma #pragma #pragma #pragma config OSC = HS config PWRT = OFF //OFF/ON pentru modul Debugger/Programmer config PBADEN = ON config WDT = OFF, WDTPS = 1 config LVP = OFF config DEBUG = OFF config CP0 = OFF,CP1 = OFF,CP2 = OFF,CP3 = OFF,CPB = OFF,CPD = OFF config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF, WRT3 = OFF,WRTB = OFF,WRTC = OFF,WRTD = OFF #pragma config EBTR0 = OFF,EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF,EBTRB = OFF #define SWITCH PORTAbits.RA4 <p18f4520.h> <delays.h> //Descriere controller conform datasheet //Definire functii de intirziere

29

void main(void) { ADCON1=0x0F; PORTC=0b11111111; PORTB=0b00000000; PORTA=0b00000000; TRISC=0b00000000; TRISB=0b00000001; TRISA=0b00010000; PORTBbits.RB3=1; Delay10KTCYx(100); PORTBbits.RB3=0; Delay10KTCYx(100); PORTC=0b00000000; //Initializeaza PORTC // (stinge toate segmentele) //Sterge PORTB //Sterge PORTA //Pinii RC0-RC7 ai PORTC sunt IESIRI //Pinul RB0-S3 al PORTB este INTRARE //Pinul RA4-S2 al PORTA este INTRARE, // restul sunt IESIRI //Se aprinde Led-ul RB3 //Intirziere multiplu de 10000 ciclii // instructiune (pentru ceas de 4MHz, // 1 ciclu corespunde la 1us) //Se stinge Led-ul RB3 //Intirziere 1s=100x10000x1us //Sterge PORTC (aprinde toate segmentele)

while(1) { if (PORTC==255) PORTC=0b01111111; //Daca s-au stins toate segmentele // atunci se aprinde primul (a) while(SWITCH==1) {} //Se iese din bucla cand // SWITCH este apasat (=0) PORTC=PORTC/2+128; //Se aprinde urmatorul segment // (deplasare spre dreapta si // umplere cu 1 a MSB) Delay1KTCYx(200); //Intirziere de 200ms } }

Salvai fiierul cu numele 7Stest.C n directorul proiectului My Projects\7Sac_C folosind comanda File > Save (Ctrl + S). Bifai n fereastra Save As caseta Add File To Project pentru a aduga automat fiierul n proiect. Dup salvare, nchidei fereastra fiierului surs. Trecei dispozitivul MPLAB ICD 2 n regim de depanator selectnd comanda Debugger > Select Tool > MPLAB ICD 2. Verificai c n Project > Build Configuration este bifat opiunea Debug pentru a putea executa programul n modul depanare. Construii ntregul proiect cu comanda Project > Build All (Ctrl + F10). Dac apar unele avertismente, selectai butonul corespunztor pentru ca MPLAB IDE s fac singur setrile necesare pentru a putea continua. Urmrii mesajele afiate n fereastra Output tab-ul Build ca s nu apar erori i ultimul mesaj s fie BUILD SUCCEEDED. Dac apar erori, corectai-le n fiierul surs folosind tipul erorii i linia de program care a generat-o afiate n fereastra Output tab-ul Build. Dup corectarea fiierului surs, reconstruii proiectul. Repetai editarea fiierului surs i reconstruirea proiectului pn la obinerea mesajului BUILD SUCCEEDED. 3.7. Programai microcontrolerul i lansai n execuie programul 7Stest, pe care tocmai l-ai construit, astfel: Programai microcontrolerul cu comanda Program. Dac nu apare nici un mesaj de eroare, nseamn c dispozitivul este programat i putei utiliza comenzile debugger-ului pentru execuia programului. Verificai funcionarea programului. Lansai n execuie programul cu comanda Run (F9). La pornirea lui, LED-ul RB3 trebuie s clipeasc o dat, iar dup aceasta, segmentele i punctul zecimal al afiorului trebuie s se aprind. n continuare, la fiecare apsare a butonului RA4 30

(S2), segmentele afiorului se sting pe rnd n ordinea a, b, g, d, e, f, g, Dp. Dup stingerea lui Dp i continuarea apsrii repetate a lui S2, se aprind pe rnd LED-urile afiorului n aceeai ordine prezentat anterior. Selectai Halt (F5) pentru a opri execuia programului. Putei continua execuia programului cu comanda Run. Pentru a relua de la nceput execuia programului, trebuie ca nainte de Run s resetai procesorul cu comanda Processor Reset (F6). 3.8. Rulai pas cu pas programul anterior urmrind modificrile biilor din registrele aferente porturilor A, B i C ntr-o fereastr Watch astfel: Oprii execuia programului i resetai procesorul. n fereastra programului surs 7Stest.C, introducei un punct de ntrerupere (breakpoint) naintea primei instruciuni din programul principal dnd un dublu-click cu mouse-ul pe linia de program ADCON1=0x0F;. Prezena acestui punct de ntrerupere este marcat de MPLAB printr-un simbol liter B ntr-un cerc rou poziionat n stnga liniei de program. Deschidei o fereastr de vizualizare a registrelor i a simbolurilor (fereastr Watch) cu comanda Edit > Watch; Selectai din lista prezent n bara de instrumente registrul TRISC i adugai-l n lista vizualizrilor cu un click pe butonul Add SFR. Adugai similar i registrele PORTC i LATC. Fereastra de vizualizare trebuie s arate ca cea din Fig. 3.15.

Fig. 3.15. Fereastra Watch cu registrele asociate portului C Adugai ntr-un mod asemntor registrele asociate porturilor B i A. Redimensionai fereastra ca s vedei simultan coninutul tuturor celor 9 registre i aranjai pe ecran fereastra surs i fereastra Watch pentru a nu fi obturate una de alta sau de alte ferestre deschise ale MPLAB. Pornii execuia programului cu comanda Run. El se va ntrerupe la breakpoint-ul poziionat anterior. n fereastra surs a programului, urmtoarea linie instruciune care va fi executat este marcat cu o sgeat verde. Executai linie cu linie programul folosind repetat comanda Debugger > Step Into (F7). Urmrii de fiecare dat efectul execuiei instruciunilor asupra valorilor din SFR-urile vizualizate i asigurai-v c ai neles funcionarea i rolul celor trei registre asociate porturilor. Fii ateni, mai ales n cazul porturilor care au simultan bii definii ca intrri i ca ieiri, i ncercai s v explicai diferenele ntre valorile din registrele LATx i PORTx. Executai liniile care apeleaz funciile de ntrziere (Delay) folosind comanda Debugger > Step Over (F8) pentru a nu intra n rularea pas cu pas a acestor funcii, pe care nu dorii s le depanai sau s le verificai deoarece necesit mult timp. Dac ai fcut-o cumva, deoarece terminarea execuiei funciei cu comanda Debugger > Step Out nu este permis, resetai procesorul i reluai execuia de la nceput a programului n modul descris anterior. n orice moment, putei alege execuia continu a programului (pn la urmtorul punct de ntrerupere pe care l-ai setat) folosind comanda Run. 31

Observaie: Rularea pas cu pas, fereastra Watch i un osciloscop sau voltmetru numeric pot fi utilizate mpreun pentru depanarea hard-soft a aplicaiilor.

3.9. Modificai programul de la punctul 3.6 astfel nct afiorul s afieze succesiv, la fiecare apsare, toate cifrele zecimale (0, 1, , 9). Editai, reconstruii, reprogramai i executai programul astfel modificat. 3.10. Deconectai placa demonstrativ PICDEM 2 Plus de la programatorul/depanatorul MPLAB ICD 2 scond cablul special ICD din mufa plcii demonstrative, asigurndu-v c procesorul nu mai este alimentat (LED-ul PWR este stins). Mutai jumper-ul J9 de pe placa demonstrativ PICDEM 2 Plus pe poziia nchis i deconectai montajul de pe placa de test scond firele de legtur care duc la conectorul PICtail.

ACTIVITATEA 3.4 COMANDA PRIN DECODOR A UNUI AFIOR CU 7 SEGMENTE CU LEDURI N LIMBAJ C
Folosind limbajul C, Activitatea 3.4 va ilustra comanda printr-un decodor BCD 7 segmente a unui afior cu LED-uri cu catod comun, utiliznd pinii portului D. Pentru acest scop, se vor utiliza afiorul MDE 2111R (cu carcas roie) ale crui conexiuni sunt prezentate n Fig. 3.16 i decodorul MOS HEF4511B pentru care schema bloc funcional, diagrama pinilor (vedere de sus) i modul de afiare a cifrelor sunt prezentate n Fig. 3.17 iar tabela de funcionare a sa este prezentat n Tabelul 3.12. Alocarea semnalelor pentru comanda decodorului la pinii portului D este urmtoarea: RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 NC -EL -BI -LT D C B A

Fig. 3.16. Conexiunile afiorului cu 7 segmente cu LED-uri roii cu catod comun tip MDE 2111R (vedere de sus)

32

Fig. 3.17. Schema bloc funcional, diagrama pinilor (vedere de sus) i afiarea cifrelor pentru decodorul HEF4511B

Schema circuitului de comand printr-un decodor BCD 7 segmente a unui afior cu LEDuri cu catod comun este prezentat n Fig. 3.18.

Fig. 3.18. Schema circuitului de comand printr-un decodor BCD 7 segmente a afiorului cu LED-uri cu catod comun

33

Tabelul 3.12. Tabela de funcionare a decodorului HEF 4511B

4.1. Construii montajul practic, conform schemei din Fig. 3.18, folosind aceeai plac de test universal (vezi Fig. 3.14). 4.2. Reconectai placa demonstrativ PICDEM 2 Plus la programatorul/depanatorul MPLAB ICD 2 folosind cablul special ICD. 4.3. Construii proiectul programului care ilustreaz, n limbaj C, comanda printr-un decodor BCD 7 segmente a unui afior cu LED-uri, cu catod comun, folosind pinii portului C, astfel: nchidei proiectul anterior. Creai un director pentru noul proiect, de exemplu My Projects\7Skc_C; Folosind vrjitorul din MPLAB IDE, creai un nou proiect numit, de exemplu, My Documents\My Project\7Skc_C\7Sdecod. Alegei pentru Device PIC18F4520 iar pentru Active Toolsuite: MicrochipC18 Toolsuite. Creai un nou fiier surs i editai urmtorul program n limbaj C:
//PROGRAMUL 7Sdecod - utilizarea porturilor: // Comanda unui afisor cu 7 segmente // folosind un decodor BCD - 7 segmente #include #include <p18f4520.h> <delays.h> //Descriere controller conform datasheet //Definire functii de intirziere

34

// Configurare #pragma #pragma #pragma #pragma #pragma #pragma #pragma #pragma config OSC = HS config PWRT = OFF //OFF/ON pentru modul Debugger/Programmer config PBADEN = ON config WDT = OFF, WDTPS = 1 config LVP = OFF config DEBUG = OFF config CP0 = OFF,CP1 = OFF,CP2 = OFF,CP3 = OFF,CPB = OFF,CPD = OFF config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF, WRT3 = OFF,WRTB = OFF,WRTC = OFF,WRTD = OFF #pragma config EBTR0 = OFF,EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF,EBTRB = OFF #define SWITCH PORTAbits.RA4 void main(void) { ADCON1=0x0F; PORTD=0b00000000; PORTB=0b00000000; PORTA=0b00000000; TRISD=0b10000000; TRISB=0b00000001; TRISA=0b00010000; PORTBbits.RB3=1; Delay10KTCYx(100); PORTBbits.RB3=0; Delay10KTCYx(100); PORTD=0b00100000; Delay10KTCYx(100); PORTD=0b00110000; //Sterge PORTD //Sterge PORTB //Sterge PORTA //Pinii RD0-RD6 ai PORTD sunt IESIRI //Pinul RB0-S3 al PORTB este INTRARE //Pinul RA4-S2 al PORTA este INTRARE, // restul sunt IESIRI //Se aprinde Led-ul RB3 //Intirziere multiplu de 10000 ciclii // instructiune (pentru ceas de 4MHz, // 1 ciclu corespunde la 1us) //Se stinge Led-ul RB3 //Intirziere 1s=100x10000x1us //Aprinde toate segmentele LT=0) //Intirziere 1s //Initializare afisor // (Bit7=0,EL=0,LT=1,BI=1,BCD=0000)

while(1) { if (PORTD==0b00111011) PORTD=0b00110000; //Daca BCD=1011 // atunci se reia de la la BCD=0000 while(SWITCH==1) {} //Se iese din bucla cand // SWITCH este apasat (=0) PORTD=PORTD+1; //Se incrementeaz codul BCD Delay1KTCYx(200); //Intirziere de 200ms } }

Salvai fiierul cu numele 7Sdecod.C n directorul proiectului My Projects\7Skc_C. Dac la salvare nu ai bifat caseta Add File To Project, pentru a aduga fiierul surs n proiect, selectai Add files din meniul contextual (click dreapta) obinut pe obiectul Sources Files din fereastra proiectului 7Sdecod.mcw i alegei cu Open fiierul surs salvat anterior. Selectai MPLAB ICD 2 ca dispozitiv depanator utilizat pentru aceast activitate. Construii ntregul proiect urmrind mesajele afiate n fereastra Output. Dac apar erori, corectai-le i reconstruii proiectul pn la obinerea mesajului BUILD SUCCEEDED. 4.4. Programai microcontrolerul i lansai n execuie programul 7Sdecod, pe care tocmai l-ai construit, astfel: 35

Programai microcontrolerul. Dac comanda de programare nu este activ, conectai manual depanatorul la dispozitivul target. Lansai n execuie programul. Verificai funcionarea lui: dup aprinderea LED-ului RB3 pentru indicarea pornirii programului, se aprind toate segmentele timp de 1 secund pentru verificarea circuitului, dup care afiorul este iniializat cu cifra 0. La fiecare apsare a lui S2, se afieaz cifra corespunztoare codului BCD urmtor. Se afieaz inclusiv codul pentru 1010 (10 n zecimal) afiat prin blank (toate segmentele stinse) de decodorul utilizat, dup care se reia cu afiarea cifrei 0. Selectai Halt (F5) pentru a opri execuia programului. 4.5. Modificai programul de la punctul 4.3 astfel nct cele 10 coduri afiate s se succead automat n sensul descresctor, iar ct timp se apas butonul S2 cifra afiat s nu se mai modifice. Editai, reconstruii, reprogramai i executai programul astfel modificat. 4.6. Oprii execuia programului, nchidei proiectul i deconectai placa demonstrativ PICDEM 2 Plus de la programatorul/depanatorul MPLAB ICD 2. Observaie: Nu deconectai i desfacei montajul de pe placa de test universal deoarece l vei folosi i pentru activitatea urmtoare.

ACTIVITATEA 3.5 CITIREA SIMULTAN A STRILOR UNOR NTRERUPTOARE N LIMBAJ C


Scopul acestei activiti este exemplificarea, folosind limbajul C, a citirii simultane a strilor mai multor ntreruptoare mecanice i utilizarea acestora pentru diverse aciuni n program. Se vor utiliza patru ntreruptoare (fr memorare push-button) conectate printr-un circuit hardware debounce la pinii 0 3 ai portului B (RB0, RB1, RB2, RB3), aceeai la care sunt conectate i cele patru LED-uri de pe placa de demonstraie. Schema circuitului este prezentat n Fig. 3.19.

Fig. 3.19. Schema circuitului cu patru comutatoare i hardware debounce

36

5.1. Adugai montajul cu cele patru ntreruptoare, conform schemei din Fig. 3.19, alturi de montajul deja existent pe placa de test universal (vezi Fig. 3.14). 5.2. Reconectai placa demonstrativ PICDEM 2 Plus la programatorul/depanatorul MPLAB ICD 2 folosind cablul special ICD. 5.3. Construii proiectul programului care ilustreaz, n limbaj C, citirea simultan a strilor mai multor ntreruptoare mecanice i utilizarea acestora pentru diverse aciuni n program: nchidei proiectul anterior. Creai un director pentru noul proiect, de exemplu My Projects\7Staste_C; Folosind vrjitorul din MPLAB IDE, creai un nou proiect numit, de exemplu, My Documents\My Project\7Staste_C\7Staste. Alegei pentru Device PIC18F4520 iar pentru Active Toolsuite: MicrochipC18 Toolsuite. Creai un nou fiier surs i editai urmtorul program n limbaj C:
//PROGRAMUL 7Staste - utilizarea porturilor: // Citirea codului BCD de la patru switchuri // si afisarea cifrei zecimale corespunzatoare // pe afisor cu 7 segmente // folosind un decodor BCD - 7 segmente #include #include // Configurare #pragma #pragma #pragma #pragma #pragma #pragma #pragma #pragma config OSC = HS config PWRT = OFF //OFF/ON pentru modul Debugger/Programmer config PBADEN = ON config WDT = OFF, WDTPS = 1 config LVP = OFF config DEBUG = OFF config CP0 = OFF,CP1 = OFF,CP2 = OFF,CP3 = OFF,CPB = OFF,CPD = OFF config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF, WRT3 = OFF,WRTB = OFF,WRTC = OFF,WRTD = OFF #pragma config EBTR0 = OFF,EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF,EBTRB = OFF void main(void) { ADCON1=0x0F; PORTD=0b00000000; PORTB=0b00000000; TRISD=0b10000000; TRISB=0b00001111; PORTD=0b00100000; Delay10KTCYx(100); //Sterge PORTD // (stinge toate segmentele) //Sterge PORTB //Pinii RD0-RD6 ai PORTD sunt IESIRI //Pinii RB0-RB3 sunt INTRARI //Aprinde toate segmentele LT=0) //Intirziere 1s <p18f4520.h> <delays.h> //Descriere controller conform datasheet //Definire functii de intirziere

while(1) { PORTD=0b00110000; PORTD=PORTD+PORTB; Delay1KTCYx(200); } }

//Intirziere 200ms

Salvai fiierul cu numele 7Staste.C n directorul proiectului My Projects\7Skc_C. Asigurai-v c ai adugat fiierul surs editat n proiectul nou creat. 37

Selectai MPLAB ICD 2 ca dispozitiv depanator utilizat pentru aceast activitate. Construii ntregul proiect urmrind mesajele afiate n fereastra Output. Dac apar erori, corectai-le i reconstruii proiectul pn la obinerea mesajului BUILD SUCCEEDED. 5.4. Programai microcontrolerul i lansai n execuie programul 7Staste, pe care tocmai l-ai construit. Verificai funcionarea lui astfel: Pentru nceput, programul aprinde pentru o secund toate segmentele afiorului rou cu LEDuri cu catod comun utilizat i n Activitatea 3.4. Stabilii codul BCD pe care dorii s-l afiai prin apsarea corespunztoare a celor patru ntreruptoare. Nu uitai c ntreruptorul neapsat furnizeaz valoarea logic 1, iar cel apsat valoarea logic 0 (vezi schema din Fig. 3.19). De asemenea, inei cont c decodorul folosit nu afieaz nimic pentru codurile mai mari dect 9 n zecimal (1001 n BCD). 5.5. Oprii execuia programului, nchidei proiectul i deconectai placa demonstrativ PICDEM 2 Plus de la programatorul/depanatorul MPLAB ICD 2. 5.6. Deconectai montajul de pe placa de test scond firele de legtur care duc la conectorul PICtail. Demontai montajul de pe placa de test.

3.10.Activiti propuse
1. Studiai capitolul 10, cu informaii referitoare la porturile de intrare/ieire, din foaia de catalog a microcontrolerului pe care o gsii n fiierul LAB Picdem 2 Plus\ Datasheets\PIC18F4520 Data Sheet. Facei un tabel sintetic comparativ lund n considerare comportrile ca intrri i ieiri ale terminalelor porturilor microcontrolerului PIC18F4520. Reconstituii i desenai organigrama programului (schema logic) de la punctul 1.3. Folosii pentru a nelege operaiile executate de programul n asamblare descrierea setului de instruciuni a microcontrolerului PIC18F4520 pe care o gsii n Anexa A a acestei lucrri. Modificai programul de la punctul 1.5 astfel nct, la faza de pornirea a programului, s se aprind succesiv, cte o secund, cele patru LED-uri de pe placa demonstrativ PICDEM 2 Plus n ordinea RB3, RB2, RB1 i RB0. Modificai programul de la punctul 1.5 astfel nct temporizrile pentru aprinderea i stingerea LED-ului la pornirea programului s varieze astfel: 0,5 secunde la prima, 1 secund la a doua i 2 secunde la a treia aprindere/stingere a LED-ului. Modificai programul de la punctul 2.5 astfel nct la faza de pornirea a programului s se aprind succesiv, cte o secund, cele patru LED-uri de pe placa demonstrativ PICDEM 2 Plus n ordinea RB3, RB2, RB1 i RB0. Modificai programul de la punctul 3.7 astfel nct afiorul s afieze succesiv toate cifrele hexazecimale (0, 1, , 9, A, B, C, D, E, F). Facei o aplicaie, folosind montajul de la Activitatea 3.3, care s aprind succesiv, cu o anumit ntrziere, segmentele a, b, c, d, e, f, i din nou a, b, .a.m.d. Modificai durata de ntrziere la comutarea segmentelor pn cnd nu mai putei distinge rotirea segmentelor. Calculai cu ce frecven se rotesc segmentele n acest caz? Dar cnd afiorul nu mai clipete datorit aprinderii intermitente a segmentelor? Folosind ideea programului de la punctul 4.5, realizai un program avnd funcionalitatea unui zar electronic (numrare foarte rapid atta timp ct se apas un buton, eventual cu stingerea afiorului pe perioada numrrii).

2. 3.

4.

5.

6.

7. 8.

9.

38

10.

Folosind circuitele din Fig. 3.18 i Fig. 3.19 montate pe placa de test universal n cadrul acestei lecii, realizai un program care s simuleze funcionarea unui numrtor reversibil cu resetare i test de afior, la care ntreruptoarele s realizeze urmtoarele funciuni: RB0: iniializarea numrtorului cu valoarea 5; RB1: incrementare cu o unitate la fiecare apsare; RB2: decrementare cu o unitate la fiecare apsare; RB3: testarea afiorului (aprinderea tuturor segmentelor ct timp butonul este meninut apsat).

3.11.ntrebri
1. Ce se ntmpl dac, dup ce programul din microcontrolerul de pe placa demonstrativ PICDEM 2 Plus a fost ters, se pornete execuia programului folosind comanda Programmer > Release from Reset? Execut microcontrolerul vreo instruciune? Ce efect putei vedea pe perifericele cuplate la microcontroler? Pinii portului B pot fi conectai intern printr-un rezistor la tensiunea VDD. Cum trebuie s fie setat direcia de transfer a datelor la terminal pentru a putea face acest lucru? Care este utilitatea practic a acestei conectri a terminalului la VDD? Cum se configureaz automat biii porturilor de intrare/ieire dup un reset la pornirea alimentrii (Power on Reset)? Justificai de ce? Ce dezavantaj prezint programarea efecturii unei aciuni corespunztoare activrii unui buton la scurt timp dup relaxarea sa i nu dup apsarea sa? Ce funcii de ntrziere sunt incluse n fiierul delays.h i cum sunt realizate ele? (Indicaie: fiierul header se gsete n directorul C:\MCC18\h) Ce ntrziere realizeaz instruciunea Delay10KTCYx(1000)? Justificai. Cum putei implementa n C o subrutin de ntrziere cu un interval multiplu de 1 ms folosind instruciunea NOP, tiind c instruciunea NOP se execut ntr-un ciclu main care dureaz 4 cicluri de ceas, adic 1 microsecund la un microcontroler rulnd la 4 MHz? (Indicaie: n fiierul de descriere a microcontrolerului utilizat, C:\MCC18\h\p18f4520.h, n seciunea Some useful macros for inline assembly stuff este definit macro-ul Nop() pentru includerea execuiei unei instruciuni NOP n limbaj de asamblare) Explicai de ce n programul editat la punctul 2.2 este inclus instruciunea ADCON1=0x0F;? Ce se ntmpl dac excludei aceast instruciune (de exemplu, prin comentarea instruciunii) la rularea programelor de la punctele 2.2 i 2.6? Cum intervine valoarea setat a bitului PBADEN (pe care o putei vizualiza sau chiar modifica cu Configure > Configuration Bits)? (Indicaie: vezi nota de la pagina 108 LAB Picdem 2 Plus\Datasheets\PIC18F4520 Data Sheet) De ce scrierea unui 1 pe bitul 0 al portului B setat ca digital input nu are ca efect aprinderea LED-ului RB0? Care este soluia pentru aprinderea lui? (Indicaie: vezi capitolul 10.2 referitor la portul B din foaia de catalog a microcontrolerului) Ce rol are instruciunea Delay1KTCYx(200); n programul de la punctul 5.3? Se justific prezena ei? Cum funcioneaz programul cu aceast instruciune exclus de la execuie (comentat)?

2.

3. 4. 5. 6. 7.

8.

9.

10.

39