Sunteți pe pagina 1din 12

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

Lecia nr. 6

PROGRAME APLICATIVE

Scopul acestei lecii este familiarizarea studenilor cu rularea unor aplicaii pe PICkit
1 FLASH Starter Kit i cu modul de utilizare al interfeei de programare.

6.1. INTRODUCERE
Comunicaia cu calculatorul gazd al sistemului PICkit 1 FLASH Starter Kit se face
prin cablu USB iar programul de interfa, care gestioneaz resursele hardware ale kit-ului,
are implementate comenzi care permit urmtoarele faciliti de lucru:
Importul unui fiier executabil, obinut n MPLAB;
Programarea PIC-ului din soclul de evaluare;
Operaii de citire, verificare, tergere a memoriei program;
Vizualizarea coninutului memoriei program (FLASH) i a celei de date
(EEPROM);
Aplicarea unui semnal dreptunghiular de 2,5 KHz pe pinul 3 al circuitului din
soclu (GP4 pentru PIC 12F629/675 sau RA4 pentru PIC 16F630/676);
Afiarea valorilor unor variabile specifice: Configuration Word, OSCCAL,
Bandgap;
Afiarea unor mesaje despre operaia care se execut la un momentul dat.

Figura 6.1. Fereastra de lucru a programului

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

Lansarea n execuie a programului va deschide fereastra de ntmpinare din figura


6.1.
Aceasta conine:
1. Dou ferestre de vizualizare n care pot fi urmrite coninuturile memoriei de
program (Program Memory) i a memoriei de date (EEDATA);
2. O zon Board Controls pentru setarea opiunii de alimentare a PIC-ului (Device
Power) i de generare/vizualizare a unui semnal de 2,5 KHz pe pinul 3 al
microcontrolerului;
3. O bar de butoane, al cror text este sugestiv, i care dubleaz unele dintre
comenzile din meniul Programmer i Tools;
4. O zon text Device Configuration n care sunt afiai parametrii principali de
configurare ai circuitului.
5. Un Status Bar n partea de jos a ferestrei, pentru afiarea mesajelor generate de
program.
Descrierea comenzilor din bara de meniuri i butoane va fi fcut n paragraful
urmtor, n cadrul rulrii pe kit a unor aplicaii specifice.

6.2. PROGRAME APLICATIVE


n aceast lucrare vor fi rulate pe PICkit 1 FLASH Starter Kit trei aplicaii: prima
aplicaie realizeaz clipirea unui LED, cu o frecven de 1 Hz, a doua, citirea valorii logice
pe un pin de port i aprinderea/stingerea unui LED cnd aceast valoare este 0 logic, iar a
treia aplicaie va aprinde succesiv cele 8 LED-uri de pe plac.. Aceste aplicaii presupun
cunoaterea structurii hardware a kit-ului i a cerinelor de programare a portului GPIO al
microcontrolerului PIC 12F675.
Reamintim c fiecare pin de intrare/ieire al microcontrolerului are funcii multiple
de comunicare cu exteriorul, depinznd de modulul periferic intern care este activ la un
moment dat, aa cum rezult i din figura 1.3 din lecia 1 i din prezentarea structurii
hardware a portului, fcut n lecia 5. Astfel, pinii GP0, GP1, ... GP5 sunt utilizai pentru:
1. Transferul bidirecional general de date binare (pinii GP0, GP1, GP2, GP4, GP5).
Pinul GP3 accept doar semnale binare de intrare;
2. Intrri analogice, n cazul funcionrii convertorului A/D (pinii GP0, GP1, GP2,
GP4);
3. Intrri analogice (semnal de intrare - GP0, GP1- i semnal de referin extern
GP2), i ieire logic (GP2) n cazul funcionrii comparatorului analogic;
4. Intrri/ieiri semnale de tact (pinii GP4, GP5) ale microcontrolerului;
5. Intrri de date, de tact (pinii GP0, GP1) i de tensiune VPP (pinul GP3) n procesul
de programare serial;
6. Intrri de comand a funcionrii timerelor TMR0 i TMR1 (pinii GP2, GP4,
GP5);
7. Resetare de baz (MCLR) a microcontrolerului (pinul GP3).
Aceste funcii nu pot fi executate simultan, ci numai n regim multiplexat.
Astfel, dac de exemplu, GP1 este folosit ca intrare binar, funciile sale analogice
trebuie inhibate. Aceasta se realizeaz prin dezactivarea modulelor respective, adic, n
cazul de fa, a convertorului A/D i a comparatorului analogic.

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

Pentru realizarea acestor operaii de programare, utilizatorul procesorului are la


ndemn registre cu funcii speciale asociate portului general de intrare/ieire (GPIO) care
au fost descrise n lecia precedent.

APLICAIA 1
Prin realizarea acestei aplicaii ne propunem s comutm starea unui LED
aprins/stins cu o frecven de 1 Hz, folosind LED-ul D0 i un program tip bucl de
ntrziere.
Lund n considerare faptul c la 1 Hz perioada este de 1s, nseamn c LED-ul va fi
aprins timp de 500 ms, dup care va fi stins, stare n care va rmne pentru o durat de timp
tot de 500 ms. Cu alte cuvinte, pentru a face LED-ul s clipeasc, trebuie ca bucla de
ntrziere s genereze, repetitiv, temporizri de 500 ms.
1. Elaborarea programului de realizare a aplicaiei
n elaborarea programului trebuie avute n vedere particularitile setului de
instruciuni ale microcontrolerului i ale schemei de cablare a LED-urilor pe kit.
Reamintim c cele 8 LED-uri sunt comandate de 4 pini ai portului de intrare/ieire
(GP1, GP2, GP4,. GP5). Schema de legturi realizat pe plac nu permite comanda
simultan a dou LED-uri, cu alte cuvinte, la un moment dat nu poate fi aprins dect un
singur LED, iar programarea aprinderii, respectiv stingerii lor se va face conform cu tabelul
de comand multiplexat de mai jos:
Pin D0 D1 D2 D3 D4 D5 D6 D7
GP4 HI LOW HI LOW Z Z Z Z
GP5 LOW HI Z Z HI LOW Z Z
GP2 Z Z LOW HI LOW HI HI LOW
GP1 Z Z Z Z Z Z LOW HI

Astfel, pentru comanda de aprindere a LED-ului D0, trebuie ca:


GP4 s fie HIGH,
GP5 LOW,
GP2, GP1 s fie n stare de impedan mare (High Z)
Comanda de stingere a LED-ului D0 trebuie s asigure nivele inversate pe GP4 i
GP5 sau ca acestea s fie configurate ca intrri, adic s fie n High Z.
Pentru a folosi pinii de port GP4 i GP5 ca ieiri logice, este necesar ca, prin program,
modulele analogice (convertor A/D i comparator) s fie dezactivate.
Pentru obinerea unei temporizri de 0,5 s vor trebui folosite trei registre, definite cu
directiva Cbloc n memoria RAM, n spaiul de adrese 0x20, 0x60, cu numele, de
exemplu: CountVH, CountH i CountL.
Pentru recunoaterea n program a strii LED-ului, vom defini un registru de 8 bii de
condiie, denumit Flags, n care pe poziia bit 0 va fi nscris valoarea bitului de condiie
a LED-ului: 0 pentru LED stins (Led-off) i 1 pentru LED aprins (Led-on)
Pentru a evita repetarea unor secvene de program, vom defini dou subrutine, i anume:
ToggleLED (execut comanda on/off a LED-ului) i Temp_500mS (pentru obinerea
temporizrii de 0,5 s).

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

Cu aceste precizri suplimentare, programul scris n limbaj de asamblare este


urmtorul:
;Program pentru aprinderea/stingerea Led-ului D0 cu o temporizare de 0,5 s
; D0 este conectat ntre GP4, GP5 (vezi schema de cablare)
list p=12f675 ;Directiva pentru definirea procesorului
#include <p12f675.inc> ;Directiva pentru definirea variabilelor specifice procesorului
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _CPD_OFF
;Directiva '__CONFIG' pentru configurarea perifericelor n fiierul surs
cblock 0x20
CountVH ;Registru numrtor - Very MS Byte - va avea alocat adresa 20H
CountH ;Registru numrtor - MS Byte - va avea alocat adresa 21H
CountL ;Registru numrtor - LS Byte - va avea alocat adresa 22H
FLAGS ;Registrul Flags (conine flag-urile de stare a Led-urilor)
; are alocat adresa 23H
endc
ORG 0x005

Init
bsf STATUS,RP0 ;Selectare bank 1
movwf OSCCAL ;Actualizare factor de calibrare a oscilatorului - frecvena minim
movlw 0xcf
movwf TRISIO ;Setare GP0, 1, 2, 3 - intrri, GP4, 5 - ieiri
; (Led-ul D0 este conectat intre GP4 si GP5)
clrf ANSEL ;Configurarea intrrilor/ieirilor convertorului A/D ca I/O digitale
bcf STATUS,RP0 ;Selectare bank 0
movlw 0x07
movwf CMCON ;Configurarea biilor de mod de lucru al comparatorului pentru
; comparator off
clrf FLAGS ;Resetarea registrului de stare (stare iniial a Led-urilor: stinse)
Bucla
call ToggleLED ;Apelarea subrutinei Toggle LED
call Temp_500mS ;Apelarea subrutinei Temp_500mS
goto Bucla ;Salt la Bucla pentru un nou ciclu
;Subrutina ToggleLED - subrutina de comand a Led-ului D0
ToggleLED
btfss FLAGS,0 ;Testare flag de stare LED0 - dac este 1 (LEDOn)
; se sare instruciunea urmtoare i se execut TurnLedOff
goto TurnLedOn ; dac este 0, nseamn LEDoff (stins) i se execut aceasta
; salt la TurnLedOn
TurnLedOff
bcf FLAGS,0 ;Se reseteaz flagul de stare al lui D0
movlw 00
movwf GPIO ;<W> trece n <GPIO>, GP4 devine 0, deci Led-ul D0 va fi stins
return ;ntoarcere la instruciunea care urmeaz dup "call TogleLED"
; din programul principal
TurnLedOn
bsf FLAGS,0 ;Se seteaz flag-ul LEDOn
movlw 0x10 ;Se ncarc W cu 00010000B
movwf GPIO ;<W> trece n <GPIO>, GP4 devine 1 i Led-ul D0 va fi aprins
return ;ntoarcere la instruciunea care urmeaz dup "call TogleLED"
; din programul principal

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

;Subrutina Temp_500ms - de ntrziere - pentru asigurarea temporizrii de 1 S


; ntrzierea este calculat cu formula: T=6+C0(2+C1(2+(C2*3)))
; unde C0 - const VeryHighByte, C1 - constanta HighByte, C2 constanta LowByte
Temp_500mS
movlw 0x58
movwf CountVH ;Se ncarc registrul CountVH cu constanta C0 = 88D
M0
movlw 0x13
movwf CountH ;Se ncarc registrul CountH cu constanta C1 = 19D
M1
movlw 0x63
movwf CountL ;Se ncarc registrul CountL cu constanta C2 = 99D
M2
decfsz CountL,f ;Se execut decrementarea registrului CountL - cnd coninutul
; acestuia ajunge 00H, se sare instruciunea urmtoare "goto M2"
goto M2 ;Dac coninutul lui CountL este diferit de 0, se execut salt la M2
decfsz CountH,f ;Decrementare CountH pn cnd coninutul acestui registru este
; 00H, situaie n care se sare instruciunea urmtoare "goto M1"
goto M1
decfsz CountVH,f ;Decrementare CountVH pn cnd coninutul acestui registru este
;00H, situaie n care se sare instruciunea urmtoare "goto M0"
goto M0
return
end

2. Se lanseaz n execuie MPLAB IDE, se editeaz fiierul surs de mai sus i se


construiete proiectul aplicaiei urmnd procedura de acum cunoscut. Se obine fiierul
n format executabil (nume.hex).
3. Se cupleaz placa PICkit 1 FLASH Starter Kit pe intrarea USB a calculatorului.
4. Se lanseaz n execuie programul PICkit 1 FLASH Starter Kit n care se execut
succesiv, urmtoarele operaii de programare:
Se import fiierul direct executabil IntelHEX creat n etapa precedent. Aceast
operaie se execut cu comanda:
File Import HEX
n fereastra deschis de aceast comand, se selecteaz fiierul nume.hex din folderul
proiectului i se valideaz cu Open.
Se nscrie fiierul executabil n PIC-ul din soclul de pe kit, cu comanda Write Device
din meniul Programmer sau cu butonul Write Device. Pentru execuia acestei
comenzi trebuie dezactivat microcontrolerul din soclul de evaluare prin deselectarea
opiunii Device Power din zona Board Controls, deoarece toate operaiile de
programare se vor executa conform unui protocol implementat n PIC 16C745.
Aciunile acestei comenzi sunt urmtoarele:
o Programul existent n memoria program a PIC-ului este ters;
o Este nscris n memoria program a PIC-ului fiierul HEX ncrcat anterior.
Pot aprea dou situaii distincte:
Nu au aprut probleme n timpul scrierii, situaie n care, n Status bar se va
afia Write successful pe fond de culoare verde. n acest caz se poate trece la
operaia urmtoare.
Operaia de scriere nu a fost executat, situaie n care Status bar se va afia
pe fond rou un mesaj de eroare. n acest caz se va cuta sursa erorii, se vor

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

aplica coreciile care se impun i se repet comanda pn la execuia ei cu


succes.
Posibile cauze de eroare:
Conexiune calculator kit defectuoas,
Format de fiier Intel HEX necorespunztor,
Defeciune hardware pe kit.
Observaie: Dac la scrierea programului se dorete protecia memoriei de program
trebuie ca naintea comenzii Write Device s se selecteze din meniul Tools opiunea
Code Protect Device.
5. Lansarea n execuie a programului se va face numai dup activarea PIC-ului din soclu
cu butonul Device Power, sau, dac placa se deconecteaz de la calculator, imediat dup
alimentarea ei prin USB la o nou conectare.
Aceasta este posibil, deoarece conform configurrii fcute n fiierul surs, resetarea
microcontrolerului se va face la punerea sub tensiune a microcontrolerului, nu prin
comand extern pe MCLR (GP3).
6. Se urmrete efectul rulrii acestui program: aprinderea/stingerea LED-ului D0 la
intervale regulate de 1/2 secund.
7. Dac n rularea programului apar erori semnalizate prin aprinderea necorespunztoare a
LED-ului D0, se va depista sursa erorii, care poate fi pe suportul hardware sau n logica
programului aplicaiei. Aceasta se realizeaz executnd cteva operaii de verificare pe
kit, i anume:
Se verific dac coninutul memoriei de cod, ncepnd cu adresa de start a
programului, este identic cu fiierul executabil creat de MPLAB. Pentru aceasta, se
apas butonul Verify, comand care determin compararea tuturor zonelor de
memorie ale microcontrolerului (Program, EEDATA i configurri) cu fiierul HEX
generat de MPLAB i generarea uneia din cele dou mesaje explicate mai jos:
o Verified successfully pe fond de culoare verde, dac se potrivesc. nseamn c
eroarea este datorat unor alte cauze dect suportul hardware.
o Verify Failed. Error in program memory pe fond de culoare roie, dac apar
diferene ntre fiierul executabil martor i memoria program a PIC-ului.
n situaia n care apar erori la verificarea executat anterior, se citete memoria
circuitului din soclu de pe kit. Operaia se execut cu comanda Read Device din
meniul Programmer sau cu butonul Read Device. n urma executrii acestei
comenzi, n ferestrele Program Memory i EEDATA Memory vor fi afiate codurile
hexa ale programului, a datelor i variabilelor din program din microcontroler.
Observaie: Operaia de citire poate fi executat doar dac scrierea s-a fcut fr
protecie de cod. Dac se apas Read Device dup scrierea cu protecie de cod,
ferestrele memoriei de program i EEDATA vor afia zero.
Se vizualizeaz simultan fiierul executabil creat de MPLAB, vizibil n fereastra
Disassembly Listing, i cel din fereastra de memoria program a kit-ului i se compar.
Poate fi depistat astfel locaia sau locaiile de memorie defecte.

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

APLICAIA 2
La nchiderea sau deschiderea unui microswitch apare fenomenul care se cheam
contact imperfect (bouncing). Acesta se manifest prin oscilaii electrice n schem, de
perioad variabil i pentru o durat de timp depinznd de o serie de factori, cum ar fi:
imperfeciunile i impuritile de pe suprafeele de contact, timpii de rspuns ai materialelor,
modul de ncapsulare, puterea pe care o poate suporta suprafaa de contact .a. Pentru
microswitch-uri de tipul celui de pe kit, aceast durat este n general mai mic dect 10 ms.
Numai dup aceast perioad contactul realizat este sigur.
Deoarece aceste contacte imperfecte pot produce modificri nsemnate n
funcionarea normal a schemei n care apar, este necesar eliminarea lor (debouncing).
Acest lucru se poate realiza hardware, prin introducerea unui filtru RC sau a unui CBB tip
R-S sau D ca n figura 6.2, sau prin metode software.

Figura 6.2. Metode hardware de eliminare a oscilaiilor parazite

Una din metodele software folosite n acest scop presupune introducerea unei bucle
de temporizare de cca 10 ms din momentul citirii strii modificate, apsat, respectiv relaxat.
Aplicaia pe care o vom realiza pentru citirea strii unui comutator folosete
microswitch-ul de pe plac, SW1, cablat la pinul GP3 al microcontrolerului i semnalizeaz
starea apsat prin bascularea strii Led-ului D1, adic dac acesta este aprins n momentul
apsrii, se va stinge, iar dac este stins, se va aprinde dup apsarea microswitch - ului.
Considerentele avute n vedere la elaborarea fiierului surs pentru aceast aplicaie
sunt urmtoarele:
SW1 este astfel cablat nct la starea relaxat va genera semnal logic 1, iar atunci
cnd este apsat va genera 0 logic.
Vom defini o secven de program (MAIN) n care se testeaz starea lui SW1 i o
subrutin de basculare a strii Led-ului D1 (TOGGLE LED), n care se testeaz
starea unui bit de condiie (flag), numit LEDOn, dintr-un registru special definit:
dac flag-ul LEDOn este 1 (LED-ul este aprins) se va comanda stingerea LED-
ului, iar dac acelai flag este 0 (adic LED-ul este stins) se va comanda
aprinderea lui.
Se definete o a doua subrutin, SWITCH DEBOUNCE, care execut o ntrziere
de cca 10 ms la fiecare relaxare a lui SW1. Ieirea din aceast subrutin se face
doar la starea relaxat a lui SW1, urmnd unei stri de apsare.

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

Folosirea n instruciuni a registrelor cu funcii speciale ale microcontrolerului i a


celor generale definite de utilizator trebuie precedat de setarea bancului de
memorie RAM n care se afl aceste registre (Bank 0 sau Bank 1).
Pentru setarea pinilor de port ca pini I/O digital, trebuie invalidat funcionarea
modulelor analogice ale microcontrolerului, convertor A/D i comparator, prin
resetarea registrului ANSEL i setarea ultimilor trei bii din registrul CMCON.
Configurarea pinilor de port ca intrri sau ieiri se face n registrul TRISIO iar
citirea sau scrierea comenzii de basculare a strii LED-ului se face din/n registrul
GPIO.
Cnd un pin de port este configurat ca intrare este recomandabil ca bitul
corespunztor din registrul WPU s fie setat.
Se vor defini dou registre, CountH i CountL pentru ncrcarea constantelor
folosite n secvena de temporizare de 10 ms.
Cu aceste precizri, programul surs al aplicaiei este urmtorul:
list p=12F675
#include <p12f675.inc>
errorlevel -302
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _CPD_OFF
;Definiii
#define Bank0 0x00 ;Selecteaz Bank0
#define Bank1 0x80
#define SWITCH GPIO,3 ;Se definete SWITCH pe pinul GP3 (bitul 3 din registrul GPIO)
#define D0_1Tris B'11001111'
#define D1On B'00000000'
#define D1Off B'00100000'
#define LEDOn Flags,1
cblock 0x20
Flags ;LED flags
CountH ;registru numrtor - MS Byte, adresa 21h
CountL ;registru numrtor - LS Byte, adresa 22h
Endc
ORG 0x005 ;vector de resetare a procesorului
Init
; call 0x3FF ;Restabilirea valorii factorului de calibrare
; Instruciune obligatorie n cazul utilizrii simulatorului
BANKSEL Bank1 ;Selecteaz bancul 1
movwf OSCCAL ;Actualizarea coninutului registrului OSCCAL
; cu factorul de calibrare
movlw D0_1Tris
movwf TRISIO ;n TRISIO, GP4 i GP5 (la care se leag D0 i D1)
; sunt ieiri digitale
clrf ANSEL
banksel Bank0 ;Selecteaz bancul 0
movlw CM2 | CM1 | CM0
movwf CMCON ;Se dezactiveaz comparatorul analogic
clrf Flags ;Seteaz stare iniial LED stins
call ToggleLED ;Aprinde LED
Main
btfsc SWITCH ;Ateapt n bucl apsarea SWITCH-ului
goto Main
call SwitchDebounce
call ToggleLED ;A fost sesizat apsarea SWITCH-ului, basculeaz starea LED-ului
goto Main

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

;SwitchDebounce - Ateapt relaxarea butonului i realizeaz temporizarea n cazul apsrii lui


SwitchDebounce
movlw 0x14
movwf CountH ;ncarc CountH cu 20D
SD1
movlw 0x63
movwf CountL ;ncarc CountL cu 99D
SD2
btfss SWITCH ;Testeaz intrarea SWITCH
goto SwitchDebounce
;SWITCH relaxat - ateapt
decfsz CountL,f ;ncepe temporizarea
goto SD2
decfsz CountH,f
goto SD1
;Temporizarea realizat: (2+20*(5+(99*5)))*1s = 10.000 s
return ;ntoarcere n programul principal
;Subrutina ToggleLED - Basculeaz starea LED-ului D1 on/off
ToggleLED
btfss LEDOn ;testarea bitului de condiie LEDOn
goto TurnLedOn ;dac LED-ul este stins, se d comand de aprindere
TurnLedOff
bcf LEDOn ;Dac este aprins, se comand stigerea
movlw D1Off
movwf GPIO
return ;ntoarcere n program
TurnLedOn
bsf LEDOn ;Setare flag pentru a indica LED aprins
movlw D1On
movwf GPIO ;ncarc n GPIO comanda de aprindere
return ;ntoarcere n program
end

1. Se editeaz i se salveaz fiierul surs cu nume.asm n folderul de proiect, dup care se


construiete proiectul aplicaiei. n urma acestor operaii de programare rezult fiierul
executabil nume.hex.
2. Se import fiierul nume.hex n fereastra deschis a programului de interfa PICkit1
Flash Starter Kit cu File Import HEX.
3. Se dezactiveaz Device Power i se nscrie n memoria program a PIC-ului fiierul
executabil al aplicaiei cu comanda Write Device.
4. Se activeaz butonul Device Power care are ca afect activarea PIC-ului din soclu de pe
plac i lansarea n execuie a programului.
5. Se va urmri bascularea strii LED-ului D1 on/off (aprins/stins) la fiecare apsare a lui
SW1.

APLICAIA 3
Prin realizarea acestei aplicaii se urmrete aprinderea succesiv a celor 8 LED-uri
de pe plac D0, D1, , D7. Momentul aprinderii primului LED este determinat de
apsarea lui SW1, celelalte se vor aprinde succesiv, cu o ntrziere de 100 ms.
Pentru elaborarea fiierului surs se va lua n considerare, pe lng necesitile de
programare descrise n aplicaiile precedente, i schema de cablare a LED-urilor.

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

;Acest program aprinde cte un LED la fiecare 100ms, dup apsarea lui SW1experimentnd astfel
; aprinderea/stingerea LED-urilor D0, D1, D7
list p=12f675
#include <p12f675.inc>
errorlevel -302 ;suprim mesajele de eroare tip 302 din lista de erori
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_ON &
_PWRTE_ON & _INTRC_OSC_NOCLKOUT
cblock 0x20
CountH ;registru folosit n temporizare, pentru constanta high
CountL ;registru de temporizare, constanta low
endc
#define SW1 GPIO,3 ;microswitch definit pe GP3
#define TRIS_D0_D1 B'00001111' ;setare registru TRISIO pentru aprindere LED D0 i D1
#define TRIS_D2_D3 B'00101011' ;TRISIO pentru D2 si D3
#define TRIS_D4_D5 B'00011011' ;TRISIO pentru D4 si D5
#define TRIS_D6_D7 B'00111001' ;TRISIO pentru D6 si D7
;Definirea valorilor din GPIO pentru aprinderea LED-urilor
#define D0_ON B'00010000' ;LED D0
#define D1_ON B'00100000' ;LED D1
#define D2_ON B'00010000' ;LED D2
#define D3_ON B'00000100' ;LED D3
#define D4_ON B'00100000' ;LED D4
#define D5_ON B'00000100' ;LED D5
#define D6_ON B'00000100' ;LED D6
#define D7_ON B'00000010' ;LED D7
;Start of Program
org 0x005
Initialize
; call 0x3FF ;Restabilirea valorii factorului de calibrare
; Instruciune obligatorie n cazul utilizrii simulatorului
bsf STATUS,RP0 ;Bank 1
movwf OSCCAL ;Actualizarea registrului cu valoarea factorului de calibrare
movlw B'00111111' ;Setarea tuturor pinilor I/o ca intrri, pentru stingerea LED-urilor
movwf TRISIO
clrf ANSEL
bcf STATUS,RP0 ;Bank 0
movlw 0x07
movwf CMCON ;dezactivare comparator
clrf GPIO
clrf CountH
clrf CountL
Main
btfsc SW1 ;Ateapt n bucl apsarea SWITCH-ului
goto Main
movlw 0x14
movwf CountH ;ncarc CountH cu 20D
N0
movlw 0x63
movwf CountL ;ncarc CountL cu 99D
N1
decfsz CountL,f ;ncepe temporizarea de 10 ms pentru eliminarea oscilaiilor
goto N1
decfsz CountH,f
goto N0
bsf STATUS,RP0
movlw TRIS_D0_D1
movwf TRISIO

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

bcf STATUS,RP0
movlw D0_ON
movwf GPIO ;Aprinderea LED-ului D0
call temp_100mS
movlw D1_ON
movwf GPIO ;Aprinderea LED-ului D1
call temp_100mS
bsf STATUS,RP0
movlw TRIS_D2_D3
movwf TRISIO
bcf STATUS,RP0
movlw D2_ON
movwf GPIO ;Aprinderea LED-ului D2
call temp_100mS
movlw D3_ON
movwf GPIO ;Aprinderea LED-ului D3
call temp_100mS
bsf STATUS,RP0
movlw TRIS_D4_D5
movwf TRISIO
bcf STATUS,RP0
movlw D4_ON
movwf GPIO ;Aprinderea LED-ului D4
call temp_100mS
movlw D5_ON
movwf GPIO ;Aprinderea LED-ului D5
call temp_100mS
bsf STATUS,RP0
movlw TRIS_D6_D7
movwf TRISIO
bcf STATUS,RP0
movlw D6_ON
movwf GPIO ;Aprinderea LED-ului D6
call temp_100mS
movlw D7_ON
movwf GPIO ;Aprinderea LED-ului D7
call temp_100mS
goto Main
temp_100mS
movlw 0x8a
movwf CountH ;ncarc CountH cu 138D
M0
movlw 0x0f0
movwf CountL ;ncarc CountL cu 240D
M1
decfsz CountL,f ;ncepe temporizarea de 100 mS
goto M1
decfsz CountH,f
goto M0
;Temporizarea realizat: (2+138*(2+(240*3)))*1s = 99.636 s
return ;ntoarcere n programul principal
end
1. Se editeaz i se salveaz fiierul surs, cu nume.asm n folderul de proiect, dup care se
construiete proiectul aplicaiei.
2. Se import fiierul nume.hex n fereastra deschis a programului de interfa PICkit1
Flash Starter Kit.

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

3. Se dezactiveaz Device Power i se nscrie n memoria program a PIC-ului fiierul


executabil al aplicaiei cu comanda Write Device.
4. Se activeaz butonul Device Power care are ca afect activarea PIC-ului din soclu de pe
plac i lansarea n execuie a programului.
5. Se va verifica aprinderea succesiv a LED-urilor D0, ..., D7 atta timp ct SW1 este
apsat.

68

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