Documente Academic
Documente Profesional
Documente Cultură
Anexa B
I. INTRODUCERE
n aceast Anex B ne propunem s ilustrm un mod specific de elaborare a
programului n asamblare pentru realizarea automatelor finite cu microcontrolere. Vom
exemplifica acest lucru pe automatul finit analizat n Anexa B, a crei diagram de stare este
prezentat n figura B.1.
109
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
110
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
S TA RT
S TATE _ M AC HINE
Su brutina
BU TTO N_ PR E SS
Nu Nu State1 Nu Nu State3
State0 State2
State2 Da State4
State1 a,b=0,0?
Nu State3
State5
Reguli generale
Reamintim c n editarea programului surs se va ine cont de cteva reguli generale
pe care trebuie s le respecte orice fiier surs n asamblare:
Partea de nceput a fiierului trebuie s conin directivele de definire a PIC-ului
utilizat (LIST, #INCLUDE), de definire a unor variabile specifice, registre
(coninut i adrese) sau date (#DEFINE, CBLOCK, BANKSEL), de configurare a
hardware-ului (__CONFIG).
Urmeaz apoi corpul programului care ncepe cu directiva ORG <adresa de
start> i conine instruciuni specifice aplicaiei, structurate pe subrutine i/sau
secvene de program, recunoscute prin Etichete.
Ultima linie de program trebuie s fie directiva END.
Comentariile (necesare pentru o mai bun nelegere a liniilor de program) se vor
face numai dup separatorul ; .
111
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
Subrutina
BUTTON PRESS
Nu Da DEBOUNCE_1
DEBOUNCE_2
STATE_DEBOUNCE=0?
Nu Da Da Nu
GP3=1? GP3=0?
TEMP
Iniializarea registrelor
COUNT H, COUNT L
Da Nu
TEMP=10ms?
Nu Da
STATE_DEBOUNCE=0?
RETURN
Precizri necesare
La elaborarea programului n limbaj de asamblare, conform organigramei
automatului, se vor avea n vedere urmtoarele detalii:
Pentru contorizarea strilor automatului se va defini un registru,
STATE_COUNTER, cu directiva CBLOCK, al crui coninut va fi actualizat n
modulul software a strii precedente;
Selectarea modulului de program propriu unei stri se face prin incrementarea
registrului PCL (PCLOW). Dup executarea secvenei de incrementare, n
program se introduce o list cu instruciuni goto (computed goto) care conduce
execuia programului ctre una din cele 6 stri ale automatului.
Temporizarea de 10 ms se va obine cu un program bucl de ntrziere n care
pentru contorizarea ciclilor main se vor defini dou registre: CountH i CountL.
Ieirea din subrutina Button_Press se va executa numai dup apsarea butonului
SW1, urmnd unei stri de relaxare, iar pentru memorarea strii curente a lui
SW1 se va defini un registru special, STATE_BEBOUNCE.
La citirea lui SW1, starea de apsare nseamn 0 logic, iar cea de relaxare este 1
logic, conform cablrii de pe kit.
Pentru semnalizri se vor utiliza LED-urile D6 i D7 a cror comand se face cu
semnalele de pe pinii GP1 i GP2, astfel: GP1=0 , GP2=1 pentru D6_ON i
GP1=1, GP2=0 pentru D7_ON.
112
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
113
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
114
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
;
State1
;Execut citire Inputb1
;Seteaz trecerea la starea urmtoare dac Inputb1 = 1, sau rmne n STATE1 dac este 0
bsf STATUS,RP0
movlw b'00111111'
movwf TRISIO ;Configurarea pinilor I/O ca intrri
bcf STATUS,RP0
btfss GPIO,5 ;citete Inputb1
goto State_Machine
incf STATE_COUNTER,f ;Seteaz State2
goto State_Machine
;
State2
;Execut citire Inputa1, Inputb1.
;Seteaz State3 dac Inputa1 = 0 i Inputb1 = 0, rmne n State2 pentru Inputa1 = 1 i Inputb1 = 0
;Seteaz STATE5 (ERR) pentru alte valori
bsf STATUS,RP0
movlw b'00111111'
movwf TRISIO
bcf STATUS,RP0
movlw 0x5
movwf STATE_COUNTER ;Preseteaz State5 (ERR)
btfsc GPIO,5 ;Citete Inputb1
goto State_Machine
btfsc GPIO,4 ;Citete Inputa1
goto Interm
movlw 0x2
subwf STATE_COUNTER,f ;Seteaz State3
goto State_Machine
Interm
movlw 0x2
movwf STATE_COUNTER
goto State_Machine
;
State3
;Execut citire Inputb1
;Seteaz trecerea la starea urmtoare (OK) dac Inputb1 = 0 sau rmne n State3 dac este 1
bsf STATUS,RP0
movlw b'00111111'
movwf TRISIO ;ncarc valoarea binar din instruciunea precedent n TRISIO
bcf STATUS,RP0
movlw 0x4
movwf STATE_COUNTER ;Preseteaz State4 (OK)
btfss GPIO,5 ;Citete Inputb1
goto State_Machine
decf STATE_COUNTER,f ;Seteaz State3
goto State_Machine
;
State4
;Stare OK: aprinde LED6 i seteaz State0
bsf STATUS, RP0 ;Selectare Bank 1
movlw TRIS_D6_D7
movwf TRISIO ;ncarc valoarea binar definit pentru TRIS_D6_D7 n TRISIO
bcf STATUS, RP0 ;Selectare Bank 0
movlw D6_ON
movwf GPIO ;ncarc valoarea definit pentru D6_ON n GPIO
clrf STATE_COUNTER
goto State_Machine
115
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
;
State5
;Stare ERR: aprinde LED7 i seteaz State0
bsf STATUS, RP0 ;Bank 1
movlw TRIS_D6_D7
movwf TRISIO ;ncarc valoarea definit pentru TRIS_D6_D7 n TRISIO
bcf STATUS, RP0 ;Bank 0
movlw D7_ON
movwf GPIO ;ncarc valoarea definit pentru D7_ON n GPIO
clrf STATE_COUNTER
goto State_Machine
;
;Button_Press: testeaz starea microswitch-ului (SW), execut temporizarea de 10 ms
; la schimbarea strii i se ntoarce n programul principal la sesizarea strii de apsare a lui
;
Button_Press
btfss STATE_DEBOUNCE,0
goto Debounce_1
goto Debounce_2
Debounce_1
bcf STATUS,RP0
btfsc GPIO,3 ;SW este apsat?
goto Debounce_1 ;Nu, salt la Debounce_1
incf STATE_DEBOUNCE, f ;Da, incrementeaz STATE_DEBOUNCE
;
Temp
movlw 0x21 ;ncepe iniializarea registrelor folosite pentru temporizare
movwf CountH ;Se ncarc registrul CountH cu constanta 33D
M1
movlw 0x63
movwf CountL ;Se ncarc registrul CountL cu constanta 99D
M2
decfsz CountL,f ;Se execut decrementarea registrului CountL
;Cnd coninutul acestuia ajunge la 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
;Temporizarea obinut cu aceast secven de program este
; Temp = 2 + 33*(5+3*99) us
btfss STATE_DEBOUNCE,0
goto Button_Press
retlw 0 ;ntoarce n programul principal cu coninutul acumulatorului egal 0
Debounce_2
bcf STATUS,RP0
btfss GPIO,3 ;SW este relaxat?
goto Debounce_2 ;Nu, salt la Debounce_2
clrf STATE_DEBOUNCE ;Da, reseteaz registrul STATE_DEBOUNCE
goto Temp
end ;directiva 'end' a programului
116
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
117
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
Se cableaz intrrile a i b la pinii GP4, respectiv GP5, conform cu shema din figura
B.5.
Aa cum se vede din figur, butonul relaxat (are contact normal nchis ntre 1 i 3,
respectiv 2 i 4) va genera semnal 1 logic pe intrarea GP4 sau GP5 a microcontroller-
ului, prin legarea terminalelor 3, respectiv 4 la +5V prin rezistena de 51 K. n
starea buton apsat (se face contact ntre 1 i 5, respectiv 2 i 6) va genera 0 logic
prin legarea la mas a terminalelor 5 respectiv 6.
Se conecteaz prin cablu USB kit-ul cu calculatorul gazd.
c.n.d
5 1 3 c.n.
51K
6 2 4
+5V
510
GP4(5)
Pasul 2 Se ncarc fiierul direct executabil (cu extensie .HEX) creat n MPLAB, n
programul PICkit 1 Flash Starter Kit. Aceast operaie se execut cu comanda File
Import HEX.
Pasul 3 Se scrie programul n PIC-ul din soclul de pe kit, cu comanda Write Device
din meniul Programmer sau cu butonul Write Devices.
Aciunea acestei comenzi este urmtoarea:
programul existent n memoria de program a PIC-ului este ters,
este scris n memoria de program a PIC-ului fiierul HEX ncrcat la pasul 1.
Pot aprea dou situaii distincte:
Nu au aprut probleme n timpul scrierii, caz n care Status bar din partea de jos a
ferestrei de lucru va afia Write successful pe fond de culoare verde, situaie n
care se trece la pasul urmtor.
Operaia de scriere a fost executat cu erori, caz n care Status bar va afia pe
fond rou un mesaj de eroare. n aceast situaie, se va cuta sursa erorii, se vor
aplica coreciile care se impun i se repet comanda pn la execuia ei cu succes.
Conform configurrii fcute n programul surs, resetarea microcontroller-ului se
poate face la punerea sub tensiune prin cablu USB a kit-ului sau la activarea butonului
Device Power (din fereastra de interfa a programului PICkit 1 Flash Starter Kit). n
momentul imediat urmtor resetrii, programul din memoria FLASH a PIC-ului va fi lansat
n execuie. Se va executa secvena de iniializare, dup care se ateapt prima apsare a lui
SW1.
Este important de reinut c pentru rularea programelor este necesar ca opiunea
Device Power din zona Board Controls s fie selectat, iar pentru oprirea lor, aceasta
trebuie s fie deselectat.
118
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
Reamintim c opiunile Device Power i 2.5kHz Osc din zona Board Controls au
urmtoarele funcii:
Device Power alimenteaz PIC-ul din soclul de evaluare atunci cnd este selectat.
2.5kHz Osc conecteaz un semnal dreptunghiular la pinul 3 al soclului (GP4 pentru
microcontroler), atunci cnd este selectat.
119
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Anexa B
Recomandare: Nu este indicat tergerea memoriei din PIC (cu comanda Erase)
deoarece, n mod normal, tergerea se face la comanda de scriere. Cu att mai mult
este contraindicat comnada Full Erase ntruct aceasta terge i coninutul
registrului OSCCAL i biii de calibrare a pragurilor de tensiune (Bandgap
Calibration Value Bits). Dac n urma acestor verificri nu s-au semnalat erori,
nseamn c exist erori de logic n programul surs i acestea pot fi depistate doar
utiliznd programul Debugger al mediului de programare MPLAB.
120