Documente Academic
Documente Profesional
Documente Cultură
Lecia nr. 7
7.1. INTRODUCERE
n numeroase aplicaii apare necesitatea generrii unor impulsuri cu perioad i factor
de umplere variabile sau de a numra impulsuri generate de traductoare diverse, eventual n
intervale de timp presetabile. Funciile mai sus menionate sunt realizate cu circuite
cunoscute sub numele de timer.
Un astfel de circuit conine n esen un registru numrtor care poate fi ncrcat cu o
valoare iniial. n funcie de aceast valoare, circuitul va realiza factorul de divizare dorit.
Pe intrarea registrului se aplic tactul (intern pentru generare de impulsuri, sau
extern pentru numrare de impulsuri) i cnd coninutul lui atinge capacitatea maxim, la
urmtorul tact este emis o cerere de ntrerupere.
Microcontrolerul PIC 12F675 are n structura sa dou circuite timer (Timer0 i
Timer1) a cror funcionare este cea standard.
7.2. TIMER0
Circuitul Timer0 are urmtoarele caracteristici:
Are implementat funcia de generator de impulsuri (Timer) i de numrtor de
impulsuri (Counter);
Registrul numrtor, TMR0 (adresa 01H), este de 8 bii i poate fi citit sau scris
(cu o valoare iniial) prin soft;
Are un circuit de prescalare programabil de 8 bii;
Tactul aplicat pe intrarea registrului numrtor poate fi setat intern sau extern, iar
pentru cel extern se poate selecta frontul activ al impulsului de tact;
Genereaz ntrerupere la depirea capacitaii registrului numrtor, adic la
trecerea din starea FFH n 00H.
69
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
70
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
Funcia Timer
Acest mod de lucru este activat prin resetarea bitului T0CS (INTCON.2). n acest
caz, registrul numrtor TMR0 numr impulsurile ceasului intern (FOSC/4). n cazul n care
se dorete ca n acest mod de lucru s fie folosit i circuitul de divizare programabil
(Prescaler), atunci bitul de selectare PSA (OPTION_REG.3) trebuie resetat iar cu biii de
selectare a factorului de divizare PS2, PS1, PS0 (OPTION_REG.<2, 1, 0>) se alege factorul
de divizare dorit.
71
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
Funcia Counter
Acest mod de lucru este selectat prin setarea bitului T0CS (INTCON.2) iar
numrtorul TMR0 va contoriza impulsurile aplicate din exterior pe pinul GP2/T0CKI, cu
sau fr prescalare, n funcie de valorile biilor PSA, PS2, PS1, PS0.
Cu ajutorul bitului T0SE (OPTION_REG.4) putem alege frontul activ al impulsului
numrat.
Observaia 1: Pentru a putea folosi pinul GP2 (T0CKI) pentru aplicarea
impulsurilor externe, este necesar dezactivarea funciilor sale analogice i definirea
lui ca pin de port de intrare digital.
Observaia 2: n cazul n care circuitul de prescalare nu este utilizat, este necesar
sincronizarea impulsului extern aplicat pe pinul GP2 (T0CKI) cu tactul intern.
Pentru ca acest lucru s se poat produce, trebuie ca impulsul extern s fie pe nivel
logic 1 pentru cel puin 2TOSC i pe nivel logic 0, de asemenea pentru cel puin 2TOSC.
Watchdog Timer
Circuitul de prescalare este utilizat n comun pentru funciile de Timer, Counter
respectiv Watchdog Timer. Cu bitul de selecie PSA = 1 (OPTION_REG.3), circuitul de
prescalare este alocat circuitului Watchdog Timer. Schimbarea alocrii circuitului de
prescalare ntre cele dou circuite poate conduce la generarea de comenzi de RESET
nedorite. Pentru a evita o astfel de situaie este recomandat ca respectivele treceri s se fac
cu nserarea n program a secvenelor de mai jos:
Timer Watchdog Timer
bcf STATUS, RP0 ;Selectare banc 0
clrwdt ;Resetare WDT
clrf TMR0 ;Resetarea registrului TMR0 i a prescalerului
bsf STATUS,RP0 ;Selectare banc 1
movlw b00101111 ;ncrcarea registrului W cu constanta 2FH
movwf OPTION_REG ;Se aloc prescalerul circuitului WDT
clrfwdt
movlw b00101xxx
movwf OPTION_REG ;Se seteaz factorul de divizare la valoarea dorit
bcf STATUS, RP0
72
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
7.3. TIMER1
Microcontrolerul PIC 12F675 are un circuit Timer1 de 16 bii cu urmtoarele
caracteristici:
Are dou registre de numrare, TMR1H (adresa 0EH) i TMR1L (adresa 0FH),
de cte 8 bii care pot fi citite i/sau ncrcate cu o valoare iniial;
Tactul de pe intrare poate fi selectat: intern (funcionare n mod timer) sau extern
(funcionare n mod counter);
n mod counter poate funciona sincron sau asincron cu clock-ul intern;
Genereaz o cerere de ntrerupere la tactul urmtor depirii capacitii registrului
numrtor (la trecerea din FFFFH n 0000H);
Poate fi selectat funcia de activare extern a funcionrii timerului (Gate
Control);
Poate fi selectat funcionarea n mod timer cu oscilator LP (Low Power) extern
pe intrarea de tact.
73
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
Facem precizarea c vor fi descrii doar biii care intervin n programarea circuitului
Timer1 (celulele editate pe fond alb).
Avnd n vedere importana cunoaterii biilor de comand din registrul T1CON
(adresa 10H) aceti bii vor fi comentai n continuare.
T1CON Registru de control al circuitului Timer1
Bit 7 Neimplementat: se citete 0
Bit 6 TMR1GE: Bit de activare a porii circuitului Timer1
Valoarea cestui bit conteaz doar dac TMR1ON = 1, i anume:
1 = Timer1 este pornit dac pinul T1G este 0 logic
0 = Timer1 este pornit
Dac TMR1ON = 0, bitul TMR1GE este ignorat
Bit 54 T1CKPS1
T1CKPS0: Bii de selectare a factorului de prescalare a impulsului de tact
11 = 1:8
10 = 1:4
01 = 1:2
00 = 1:1
74
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
Bit 3 T1OSCEN: Bit de activare a oscilatorului LP; valoarea acestui bit conteaz
doar dac microcontrolerul este configurat cu INTOSC activ i fr
CLKOUT:
1 = este activat oscilatorul LP pe intrarea de tact a circuitului Timer1
0 = oscilatorul LP este dezactivat
Bit 2 T1SYNC : Bit de control al sincronizrii impulsului de tact extern
Valoarea acestui bit conteaz doar dac TMR1CS = 1, i anume:
1 = tactul extern nu se sincronizeaz cu ceasul intern
0 = tactul extern se sincronizeaz cu ceasul intern
Dac TMR1CS = 0, bitul T1SYNC este ignorat
Bit 1 TMR1CS: Bit de selectare a sursei impulsului de tact
1 = tact extern aplicat pe pinul GP5 (T1CKI/T1OSC1)
0 = tact intern (FOSC/4)
Bit 0 TMR1ON: Bit de activare a circuitului Timer1
1 = Timer1 este activat
0 = Timer1 este dezactivat
Funcia Timer
n acest mod de lucru sunt numrate impulsurile ceasului intern (FOSC/4) sau ale unui
oscilator extern de putere mic (LP Oscillator) de frecven 37 KHz. Selectarea uneia sau a
celeilalte surse de impulsuri se face cu bitul TMR1CS (T1CON.1) iar factorul de prescalare
se alege cu biii T1CKPS1 i T1CKPS0 (T1CON.<5, 4>).
Impulsurile externe pot fi sincronizate sau nu cu tactul intern, n funcie de valoarea
bitului T1SYNC (T1CON.2). Cnd se lucreaz cu FOSC/4, adic TMR1CS = 0, valoarea
bitului T1SYNC este ignorat.
Funcia Counter
Circuitul permite implementarea funciilor de numrare (Counter) sincron sau
asincron de 16 bii. Impulsurile care urmeaz a fi numrate se aplic pe pinul GP5 (T1CKI)
i vor incrementa numrtorul TMR1L, respectiv TMR1H pe frontul cresctor al acestor
impulsuri.
Acest mod de lucru este selectat cu TMR1CS = 1 (T1CON.1). Impulsurile sunt
prescalate cu 1, 2, 4 respectiv 8 n funcie de valorile biilor T1CKPS<1, 0>
(T1CON.<5, 4>), iar funcia de numrare sincron sau asincron este selectat cu bitul
T1SYNC (T1CON.2).
n ambele moduri de funcionare, intervalul pe care se face numrarea impulsurilor
poate fi controlat din exterior cu un impuls aplicat pe pinul GP4 ( T1G ). n cazul n care
circuitul Timer1 este activat TMR1ON = 1 (T1CON.0) i controlul funcionrii din
exterior validat TMR1GE = 1 (T1CON.6), atunci pe durata nivelului logic cobort al
75
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
7.4. APLICAII
76
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
77
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
movwf TRISIO
bcf STATUS,RP0
movlw D0_ON
movwf GPIO
RET_I
BANK1
bcf INTCON,T0IF ;Se reseteaz flagul de ntrerupereTMR0
retfie ;Revenire n programul principal
Init
; call 0x3FF
BANK1
movwf OSCCAL
BANK0
clrf GPIO ;Resetare port I/O
BANK1
clrf ANSEL ;PIC12F675 Only
movlw 0xFF
movwf TRISIO ;Toate intrrile sunt puse n high Z - stingere LED-uri
clrf VRCON ;Vref Off
BANK0
movlw 0x07
movwf CMCON ;Comparator Off
BANK1
movlw b'10000111'
movwf OPTION_REG ;Setare funcie Timer (T0CS=0), cu prescaler
;(PSA=0), factor de divizare=1/256 (PS2 = PS1 = 1 = PS0 = 1)
bsf INTCON,PEIE ;Activare ntreruperi generate de periferice
bsf INTCON,T0IE ;Activare ntreruperi generate de depire Timer0
bcf INTCON,T0IF ;Resetare flag de ntreruperi Timer0
bsf INTCON,GIE ;Activare ntreruperi generale
BANK0
clrf TMR0 ;Resetarea coninutului registrului numrtor
Main
goto Main
end
78
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
impulsuri de ceas (cu tact de 1 s), este necesar ca valoarea iniial a registrului
TMR1 s fie:
FFFFH + 1 0C350H = 3CB0H.
TMR1H se va ncrca cu 3CH iar TMR1L cu constanta 0B0H. n aceast situaie,
factorul de divizare introdus de circuitul de prescalare trebuie s fie 1/1.
Pentru elaborarea programului care s realizeze aceasta, trebuie avute n vedere
cteva considerente de programare, i anume:
Selectarea opiunilor de lucru ale circuitului Timer1 se face prin setarea/resetarea
valorii unor bii din registrul T1CON, astfel:
o TMR1ON = 1 activare Timer1;
o TMR1CS = 0 pe intrarea de tact a registrului TMR1 se aplic oscilatorul
intern a crui frecven este divizat cu 4 (fOSC/4);
o T1OSCEN = 0 Oscilatorul de putere mic (LP oscillator) este dezactivat;
o T1CKPS1 = T1CKPS0 = 0 la ieirea circuitului de prescalare se va obine
un factor de divizare egal cu 1/1;
o TMR1GE = 0 Pornire Timer1. Reamintim c intrarea TMR1GE este activ
pe 0 logic i c valoarea acestui bit conteaz doar dac TMR1ON = 1.
Validarea ntreruperilor generate de Timer1 se face prin setarea valorii unor bii
din registrul INTCON, ca la Timer0, i din registrul PIE1:
o PEIE = 1 validare ntreruperi generate de oricare dintre perifericele
microcontrolerului;
o GIE = 1 validare ntreruperi generale;
o TMR1IE = 1 validare ntreruperi generate de Timer1.
Setarea flagului de ntreruperi a circuitului Timer1 se face hardware, dar resetarea
lui se face numai prin program. Este deci necesar ca n subrutina de tratare a
ntreruperii generate de timer s fie introdus o secven de program pentru
resetarea acestui flag (bitul TMR1IF din registrul PIR1).
Vectorul de ntreruperi are adresa 04H n memoria RAM a microcontrolerului.
Deoarece aplicaia const doar din programarea timer-ului, secvena principal a
programului va fi o bucl de ateptare a generrii ntreruperii iar secvena de
comand a LED-ului D1 se va gsi n subrutina de servire a ntreruperii.
Pentru recunoaterea n program a strii LED-ului D1, vom defini un registru de 8
bii de condiie, denumit Flags, n care pe poziia bitului 1 va fi nscris valoarea
bitului de condiie a LED-ului: 0 pentru LED stins (Ledoff) i 1 pentru LED
aprins (Ledon).
Cu aceste precizri suplimentare, programul aplicaiei este urmtorul:
;Program cu TIMER1 pentru comanda LED-ului D1 cu o frecven de 10 Hz
list p=12F675
#include <p12f675.inc>
errorlevel -302
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF &
_PWRTE_ON & _INTRC_OSC_NOCLKOUT
cblock 0x20
FLAGS
endc
79
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
80
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
movlw 0x0B0
movwf TMR1L
movlw b'10000001'
movwf T1CON ;Activare Timer1 (TMR1ON = 1), setare funcie Timer
; (TMR1CS = 0), cu factor de divizare a impulsului intern de 1/1
; (T1CKPS1 = T1CK PS0 = 0)
; i dezactivarea oscilatorului LP (T1OSCEN = 0)
Main
goto Main
end
81
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
82
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
83
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 7
84