Sunteți pe pagina 1din 10

NIVEL 1

Laboratorul 5
Lucrarea 1: Operarea cu modulul ECCP n modul captur
Obiective:
1. Operarea cu modulul ECCP n modul captur (Capture)
2. Generarea de ntreruperi la evenimente externe de tip apsare de buton

PIC16F684
VDD

ICSP

PIC16F684
R2
10K

D1
1N4148

VPP
VDD
P1A

R3
10K

SW1

VSS
ICSPDAT

C1
100nF

RC2

ICSPCLK

VPP
VDD
GND
PGD
PGC

LED1
R1
330R

Etape:
- conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului
- crearea unui proiect nou n MikroC, alegnd modelul PIC16F684 si frecventa ceasului intern la alegere
- setarea n Edit Project a sursei de ceas de tip INTERNAL RC No Clock
- dezactivarea n Edit Project a optiunii Monitor Clock Fail-Safe
- scrierea codului
- compilarea codului pentru obtinerea fisierului de tip HEX
- importarea fisierului HEX cu programul PICkit2
- scrierea fisierului HEX n memoria program a microcontrolerului prin apsarea butonului Write
- alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
- verificarea succesiva a celor patru moduri diferite de functionare:
a) captur la fiecare front descresctor
b) captur la fiecare front cresctor
c) captur la fiecare al 4-lea front ccresctor
d) captur la fiecare al 16-lea front cresctor

Exemplu de conectare:

A
SIL5

K1

K2

K1

K2

K1

K2

List de componente:
LED 20 mA
x1
R1 = 330R
x1
C1 = 100nF
x1
R2, R3 = 10K
x2
D1 = 1N4148
x1
IC1 = PIC16F684 x1
Pushbutton Switch x1

PIC16F684

.10

Registrii specifici:
CCP1CON
CCPR1H
CCPR1L
PIE1
PIR1

31

NIVEL 1

Laboratorul 5
Lucrarea 1: Operarea cu modulul ECCP n modul captur
Exemple de cod:
1. Generare de ntrerupere la fiecare front descresctor
void interrupt(){
PORTC.RC2=!PORTC.RC2;
PIR1.CCP1IF=0;
}
void main() {
OSCCON.SCS=0;
OSCCON.IRCF2=1;
OSCCON.IRCF1=1;
OSCCON.IRCF0=1;
ANSEL=0;
TRISC.RC5=1;
TRISC.RC2=0;
CCP1CON.CCP1M3=0;
CCP1CON.CCP1M2=1;
CCP1CON.CCP1M1=0;
CCP1CON.CCP1M0=0;
INTCON.GIE=1;
INTCON.PEIE=1;
PIE1.CCP1IE=1;
PIR1.CCP1IF=0;
}

// Inversare stare logic port RC3


// Revenire din ntrerupere

// Surs de ceas definit prin FOSC2:FOSC0


// Ceas intern de 8 MHz

//
//
//
//

Toate porturile n modul digital


Setare port RC5/P1A n mod intrare
Setare port RC2 n mod ieire
Operare n mod captur, la fiecare front descresctor

//
//
//
//

Activare
Activare
Activare
Resetare

ntreruperi globale
ntreruperi periferice
ntrerupere modul CCP
flag ntrerupere modul CCP

2. Generare de ntrerupere la fiecare al 4-lea front cresctor


void interrupt(){
PORTC.RC2=!PORTC.RC2;
PIR1.CCP1IF=0;
}
void main() {
OSCCON.SCS=0;
OSCCON.IRCF2=1;
OSCCON.IRCF1=1;
OSCCON.IRCF0=1;
ANSEL=0;
TRISC.RC5=1;
TRISC.RC2=0;
CCP1CON.CCP1M3=0;
CCP1CON.CCP1M2=1;
CCP1CON.CCP1M1=1;
CCP1CON.CCP1M0=0;
INTCON.GIE=1;
INTCON.PEIE=1;
PIE1.CCP1IE=1;
PIR1.CCP1IF=0;
}

32

// Inversare stare logic port RC3


// Revenire din ntrerupere

// Surs de ceas definit prin FOSC2:FOSC0


// Ceas intern de 8 MHz

//
//
//
//
//

Toate porturile n modul digital


Setare port RC5/P1A n mod intrare
Setare port RC2 n mod ieire
Operare n mod captur,
la fiecare al 4-lea front cresctor

//
//
//
//

Activare
Activare
Activare
Resetare

ntreruperi globale
ntreruperi periferice
ntrerupere modul CCP
flag ntrerupere modul CCP

NIVEL 1

Laboratorul 5
Lucrarea 2: Operarea cu modulul ECCP n modul comparare
Obiective:
1. Operarea cu modulul ECCP n modul comparare (Compare)
2. Generarea unei ntreruperi si modificarea strii unui port la un interval predefinit dup apsarea unui buton

PIC16F684
VDD

ICSP

PIC16F684
R2
10K

D1
1N4148

VPP
VDD
INT

R3
10K

SW1

VSS
ICSPDAT

C1
100nF

P1A

ICSPCLK

VPP
VDD
GND
PGD
PGC

LED1
R1
330R

Etape:
- conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului
- crearea unui proiect nou n MikroC, alegnd modelul PIC16F684 si frecventa ceasului intern de 500 kHz
- setarea n Edit Project a sursei de ceas de tip INTERNAL RC No Clock
- dezactivarea n Edit Project a optiunii Monitor Clock Fail-Safe
- scrierea codului
- compilarea codului pentru obtinerea fisierului de tip HEX
- importarea fisierului HEX cu programul PICkit2
- scrierea fisierului HEX n memoria program a microcontrolerului prin apsarea butonului Write
- alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On

Registrii specifici:
CCP1CON
CCPR1H
CCPR1L
PIE1
PIR1

Formul de calcul a duratei:


K1

K2

TCCP1 = 4 TOSC T1CKPS (1+CCPR1L) (1+CCPR1H)

Exemplu de conectare:

SIL5

K2

K1

K2

PIC16F684

.10

K1

List de componente:
LED 20 mA
x1
R1 = 330R
x1
C1 = 100nF
x1
R2, R3 = 10K
x2
D1 = 1N4148
x1
IC1 = PIC16F684 x1
Pushbutton Switch x1

33

NIVEL 1

Laboratorul 5
Lucrarea 2: Operarea cu modulul ECCP n modul comparare
Exemplu de cod:
1. Aprinderea sau stingerea unui LED conectat la portul P1A la o perioad de timp scurs de la apsarea unui buton conectat la portul INT
void interrupt(){
if (INTCON.INTF==1){
PIE1.CCP1IE=1;
CCP1CON.CCP1M3=1;
CCP1CON.CCP1M0=!CCP1CON.CCP1M0;
T1CON.TMR1ON=1;
}
if (PIR1.CCP1IF==1){
PIE1.CCP1IE=0;
T1CON.TMR1ON=0;
}
PIR1.CCP1IF=0;
INTCON.INTF=0;
}
void main() {
OSCCON=0b00110000;
ANSEL.RA2=0;
TRISA.RA2=1;
TRISC.RC5=0;
PORTC.RC5=0;
T1CON.T1CKPS1=1;
T1CON.T1CKPS0=1;
T1CON.TMR1ON=0;
CCPR1H=249;
CCPR1L=249;
CCP1CON=0b00000001;
INTCON=0b11010000;
}

//
//
//
//
//

Verificare apsare buton la portul INT


Activare ntrerupere a modulului CCP
Setare CCP n modul Compare
Alternare setare sau resetare stare port P1A
Pornire Timer 1

// Verificare ntrerupere generat de CCP


// Dezactivare ntrerupere a modulului CCP
// Oprire Timer 1
// Resetare flag ntrerupere modul CCP
// Resetare flag ntrerupere INT

//
//
//
//

Ceas intern
Setare port
Setare port
Setare port

kHz
modul digital
mod intrare
mod ieire

// Setare prescaler Timer1 la 1:16


// Timer 1 oprit
// Setare valori regitrii de comparare
// Modulul CCP oprit
// Activare ntreruperi globale, periferice i INT

Exemplu de calcul:
TCCP1 = 4 TOSC T1CKPS (1+CCPR1L) (1+CCPR1H) = 4 / 500000 8 (1+249) (1+249) = 4 s

34

de 500
INT n
INT in
P1A in

NIVEL 1

Laboratorul 5
Lucrarea 3: Operarea cu modulul ECCP n modul PWM cu o singur iesire
Obiective:
1. Operarea cu modulul ECCP n modul generator de semnal PWM cu iesire simpl
2. Generarea unei semnal PWM cu perioad de 20 ms si durata impulsului ntre 1.2 si 1.8 ms pentru comanda unui motor servo

PIC16F684
ICSP

PIC16F684
Hitec HS-422

VDD

VPP

VDD
P1A

VSS
ICSPDAT
ICSPCLK

VPP
VDD
GND
PGD
PGC

Etape:
- conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului
- crearea unui proiect nou n MikroC, alegnd modelul PIC16F684 si frecventa de 0.125 MHz
- setarea n Edit Project a sursei de ceas de tip INTRC -OSC2 as RA6
- dezactivarea n Edit Project a optiunii Fail-Safe Clock Monitor Enable
- scrierea codului
- compilarea codului pentru obtinerea fisierului de tip HEX
- importarea fisierului HEX cu programul PICkit2
- scrierea fisierului HEX n memoria program a microcontrolerului prin apsarea butonului Write
- alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
- verificarea pe osciloscop a semnalelor PWM generate

Registrii specifici:
CCP1CON
CCPR1L
T2CON
PR2

perioada impulsurilor PWM:

TPWM = 4 TOSC T2CKPS (1+PR2)

durata Impulsurilor PWM:

TDC = TOSC T2CKPS (DC1B9:DC1B0)

Exemplu de conectare:

SIL5

PWM
VDD
GND

Formule de calcul:

List de componente:
IC1 = PIC16F684 x1
Servo Hitec HS-422 x1

PIC16F684

35

NIVEL 1

Laboratorul 5
Lucrarea 3: Operarea cu modulul ECCP n modul PWM cu o singur iesire
Exemple de cod:
1. Generarea unui semnal PWM cu perioada de 20 ms (50 Hz) si durata impulsului de 1.2 ms (factor de umplere 6%)
void main() {
OSCCON=0b00010000;
TRISC.RC5=0;
T2CON.T2CKPS1=0;
T2CON.T2CKPS0=1;
T2CON.TMR2ON=1;
PR2=155;
CCPR1L=0b00001001;
CCP1CON.P1M1=0;
CCP1CON.P1M0=0;
CCP1CON.DC1B1=1;
CCP1CON.DC1B0=0;
CCP1CON.CCP1M3=1;
CCP1CON.CCP1M2=1;
}

// Ceas intern de 125 kHz


// Setare P1A in mod iesire
// Setare prescaler Timer 2 la 1:4
//
//
//
//

Pornire Timer 2
Setare valoare registru PR2
Setare primii 8 bii DB1B9:DB1B2
Setare CCP n mod de lucru PWM cu ieire simpl pe P1A

// Setare ultimii 2 bii DB1B1:DB1B0


// Setare CCP n mod de lucru PWM cu ieire simpl

2. Generarea unui semnal PWM cu perioada de 20 ms (50 Hz) si durata impulsului de 1.8 ms (factor de umplere 9%)
void main() {
OSCCON=0b00010000;
TRISC.RC5=0;
T2CON.T2CKPS1=0;
T2CON.T2CKPS0=1;
T2CON.TMR2ON=1;
PR2=155;
CCPR1L=0b00001110;
CCP1CON.P1M1=0;
CCP1CON.P1M0=0;
CCP1CON.DC1B1=0;
CCP1CON.DC1B0=0;
CCP1CON.CCP1M3=1;
CCP1CON.CCP1M2=1;
}

Exemplu de calcul pentru TPWM = 20 ms si TDC = 1.2 ms:


a) determinarea produsului 4 TOSC
4 TOSC = 4 /125000 = 0.000032 s
b) determinarea raportului n
n = TPWM / 4 TOSC = 0.02 / 0.000032 = 625
c) alegerea prescalerului PS
PS = 1:4
d) determinarea valorii registrului PR2

//
//
//
//

Pornire Timer 2
Setare valoare registru PR2
Setare primii 8 bii DB1B9:DB1B2
Setare CCP n mod de lucru PWM cu ieire simpl pe P1A

// Setare ultimii 2 bii DB1B1:DB1B0


// Setare CCP n mod de lucru PWM cu ieire simpl

Exemplu de calcul pentru TPWM = 20 ms si TDC = 1.8 ms:


a) determinarea produsului 4 TOSC
4 TOSC = 4 /125000 = 0.000032 s
b) determinarea raportului n
n = TPWM / 4 TOSC = 0.02 / 0.000032 = 625
c) alegerea prescalerului PS
PS = 1:4
d) determinarea valorii registrului PR2

(PR2+1) = n / PS = 625 / 4 = 156.25 156


PR2 = 156 - 1 = 155

(PR2+1) = n / PS = 625 / 4 = 156.25 156


PR2 = 156 - 1 = 155

f) determinarea valorii registrului DC1B9:DC1B0

f) determinarea valorii registrului DC1B9:DC1B0

DC1B9:DC1B0 = TDC / TOSC / PS = 0.0012 125000 / 4 = 37.5 38


DC1B9:DC1B0 = 0b0000100110 = 0b [00001001] [10]
e) verificarea rezultatului
TPWM = 4 TOSC PS (PR2+1) = 4 / 125000 4 155 = 0.01984 s
TDC = TOSC PS DC1B9:DC1B0 = 1 / 125000 4 38 = 0.001216 s
36

// Ceas intern de 125 kHz


// Setare P1A in mod iesire
// Setare prescaler Timer 2 la 1:4

DC1B9:DC1B0 = TDC / TOSC / PS = 0.0018 125000 / 4 = 56.25 56


DC1B9:DC1B0 = 0b0000111000 = 0b [00001110] [00]
e) verificarea rezultatului
TPWM = 4 TOSC PS (PR2+1) = 4 / 125000 4 155 = 0.01984 s
TDC = TOSC PS DC1B9:DC1B0 = 1 / 125000 4 56 = 0.001792 s

NIVEL 1

Laboratorul 5
Lucrarea 4: Operarea cu modulul ECCP n modul PWM n semipunte H
Obiective:
1. Operarea cu modulul ECCP n modul generator de semnal PWM n semipunte
2. Generarea unei semnal PWM de 200 kHz si factor de umplere ntre 20% si 80% ms pentru comanda unui motor de c.c cu perii

PIC16F684
VMOT

VDD

L293D

ICSP

PIC16F684

DC Motor
VCC1

1Y

VPP

VPP
VDD
GND
PGD
PGC

VDD
VCC2

C1
100nF

2Y
GND

1,2EN

RA0

1A

P1A

ICSPDAT

2A

P1B

ICSPCLK

VSS

Etape:
- conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului
- crearea unui proiect nou n MikroC, alegnd modelul PIC16F684 si frecventa de 8 MHz
- setarea n Edit Project a sursei de ceas de tip INTRC -OSC2 as RA6
- dezactivarea n Edit Project a optiunii Fail-Safe Clock Monitor Enable
- scrierea codului
- compilarea codului pentru obtinerea fisierului de tip HEX
- importarea fisierului HEX cu programul PICkit2
- scrierea fisierului HEX n memoria program a microcontrolerului prin apsarea butonului Write
- alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
- verificarea celor dou sensuri de rotaie pentru diferite turaii ale motorului

Registrii specifici:
CCP1CON
CCPR1L
T2CON
PR2

Formule de calcul:
perioada impulsurilor PWM:

TPWM = 4 TOSC T2CKPS (1+PR2)

durata Impulsurilor PWM:

TDC = TOSC T2CKPS (DC1B9:DC1B0)


L293DNE

Exemplu de conectare:

SIL5

6-12V DC

L293DNE

.10

DC Brushed Motor

1,2EN
1A
1Y
GND
GND
2Y
2A
Vcc2

Vcc1
4A
4Y
GND
GND
3Y
3A
3,4EN

List de componente:
C1 100 nF
x1
IC1 = PIC16F684 x1
IC2 = L293DNE
x1
DC Motor Brushed x1

PIC16F684

L293DNE

37

NIVEL 1

Laboratorul 5
Lucrarea 4: Operarea cu modulul ECCP n modul PWM n semipunte H
Exemple de cod:
1. Comanda unui motor de curent continuu cu perii la 20% din turatia nominal
void main() {
OSCCON=0b01110000;
TRISC.RC5=0;
TRISC.RC0=0;
PORTC.RC0=1;
T2CON.T2CKPS1=0;
T2CON.T2CKPS0=0;
T2CON.TMR2ON=1;
PR2=9;
CCPR1L=0b00000010;
CCP1CON.P1M1=0;
CCP1CON.P1M0=0;
CCP1CON.DC1B1=0;
CCP1CON.DC1B0=0;
CCP1CON.CCP1M3=1;
CCP1CON.CCP1M2=1;
}

//
//
//
//
//

Ceas intern de 8 MHz


Setare P1A in mod iesire
Setare RC0 in mod iesire
Setare RC0 in stare 1 logic
Setare prescaler Timer 2 la 1:1

//
//
//
//

Pornire Timer 2
Setare valoare registru PR2
Setare primii 8 bii DB1B9:DB1B2
Setare CCP n mod de lucru PWM cu ieire simpl pe P1A

// Setare ultimii 2 bii DB1B1:DB1B0


// Setare CCP n mod de lucru PWM cu ieire simpl

2. Comanda unui motor de curent continuu cu perii la 80% din turatia nominal
void main() {
OSCCON=0b01110000;
TRISC.RC5=0;
TRISC.RC0=0;
PORTC.RC0=1;
T2CON.T2CKPS1=0;
T2CON.T2CKPS0=0;
T2CON.TMR2ON=1;
PR2=9;
CCPR1L=0b00001000;
CCP1CON.P1M1=0;
CCP1CON.P1M0=0;
CCP1CON.DC1B1=0;
CCP1CON.DC1B0=0;
CCP1CON.CCP1M3=1;
CCP1CON.CCP1M2=1;
}

Exemplu de calcul pentru TPWM = 5 s si TDC = 1 s:


a) determinarea produsului 4 TOSC
4 TOSC = 4 / 8000000 = 0.0000005 s
b) determinarea raportului n
n = TPWM / 4 TOSC = 0.000005 / 0.0000005 = 10
c) alegerea prescalerului PS
PS = 1:1

Ceas intern de 8 MHz


Setare P1A in mod iesire
Setare RC0 in mod iesire
Setare RC0 in stare 1 logic
Setare prescaler Timer 2 la 1:1

//
//
//
//

Pornire Timer 2
Setare valoare registru PR2
Setare primii 8 bii DB1B9:DB1B2
Setare CCP n mod de lucru PWM cu ieire simpl pe P1A

// Setare ultimii 2 bii DB1B1:DB1B0


// Setare CCP n mod de lucru PWM cu ieire simpl

Exemplu de calcul pentru TPWM = 5 s si TDC = 4 s:


a) determinarea produsului 4 TOSC
4 TOSC = 4 / 8000000 = 0.0000005 s
b) determinarea raportului n
n = TPWM / 4 TOSC = 0.000005 / 0.0000005 = 10
c) alegerea prescalerului PS
PS = 1:1

d) determinarea valorii registrului PR2

d) determinarea valorii registrului PR2

(PR2+1) = n / PS = 10 / 1 = 10
PR2 = 10 - 1 = 9

(PR2+1) = n / PS = 10 / 1 = 10
PR2 = 10 - 1 = 9

f) determinarea valorii registrului DC1B9:DC1B0


DC1B9:DC1B0 = TDC / TOSC / PS = 0.000001 8000000 / 1 = 8
DC1B9:DC1B0 = 0b0000001000 = 0b [00000010] [00]

38

//
//
//
//
//

f) determinarea valorii registrului DC1B9:DC1B0


DC1B9:DC1B0 = TDC / TOSC / PS = 0.000001 8000000 / 1 = 32
DC1B9:DC1B0 = 0b0000100000 = 0b [00001000] [00]

NIVEL 2

Laboratorul 5
Lucrarea 5: Frecventmetru numeric cu afisaj digital 2x16 caractere LCD
Obiective:
1. Operarea cu modulul ECCP pentru msurarea duratelor de timp
2. Operarea cu un display 2x16 caractere LCD cu comand serial

PIC16F882
VDD

NetMedia 2x16 Serial LCD

ICSP

PIC16F882
Rx*

TX

5V

VPP

VPP
VDD
GND
PGD
PGC

VDD

LED+

VSS
ICSPDAT

GND

VIN

CCP1

ICSPCLK

Algoritm:
- setarea modulului CCP n mod de lucru captur la fiecare al 16-lea front cresctor
- setarea prescalerului timerului 1 pentru durata maxim de timp msurabil fr overflow
- activarea ntreruperii modulului CCP
- la fiecare ntrerupere:
- msurarea valorii curente de timp (T2) prin registrul CCPR1 (CCPR1H i CCPR1L)
- determinarea numrului de impulsuri TTMR1 prin calculul diferenei dintre valoarea curent (T2) i cea anterioar (T1) a CCPR1
- memorarea valorii curente a registrului CCPR1 (T1 T2)
- resetarea flagului de ntrerupere a modulului CCP
- afiarea rezultatului curent pe display
VIN
Formule de calcul:

Registrii specifici:
CCP1CON
CCPR1H
CCPR1L
T1CON

16T
perioada impulsurilor TTMR1:

TTMR1 = 4 / FOSC T1CKPS

nr. impulsuri pt. valoarea curent de timp T2:

N2 = 256 CCPR1H+CCPR1L

perioada T:

T = (N2 - N1) TTMR1 / 16

frecvena:

F = 1 / T = 16 / (N2 - N1) FOSC / 4 / T1CKPS

CCP1IF
T1

T2
TTMR1

VTMR1
NetMedia
2x16
Serial LCD
Exemplu de conectare:

SIL5

VIN

LED+
Rx*
Rx
5
GND

List de componente:
NetMedia 2x16
x1
IC1 = PIC16F882 x1
IC2 = DS32kHz
x1

PIC16F882

39

NIVEL 2

Laboratorul 5
Lucrarea 5: Frecventmetru numeric cu afisaj digital 2x16 caractere LCD
Exemplu de cod:
unsigned int N1,N2,N=0;

// Variabile pe 16 bii

void interrupt(){
N2=(unsigned int)(256*CCPR1H+CCPR1L);
N=N2-N1;
N1=N2;
PIR1.CCP1IF=0;
}

// Calcul valoare curent registru TMR1


// Calcul interval de timp scurs ntre dou ntreruperi
// Memorare valoare curent

void scrie(char m, char n, char tasta){


UART1_Write(17);
UART1_Write(m);
UART1_Write(n);
UART1_Write(tasta);
}

//
//
//
//
//

Funcie scriere caracter la o anumit poziie


Cod comand display scriere la poziie
Alegere rnd
Alegere coloan
Scriere caracter

void display(unsigned int val){


scrie(0,8,48+val/10000);
val=val%10000;
scrie(0,9,48+val/1000);
val=val%1000;
scrie(0,10,48+val/100);
val=val%100;
scrie(0,11,48+val/10);
val=val%10;
scrie(0,12,48+val);
}

// Descompunere numr n digii i afiare


// Digitul zecilor de mii
// Digitul miilor
// Digitul sutelor
// Digitul zecilor
// Digitul unitilor

void main() {
OSCCON=0b01110000;

// Ocilator intern de 8 MHZ

TRISC.RC6=0;
TRISC.RC2=1;

// Portul TX ca port de ieire


// Portul CCP1 ca port de intrare

UART1_Init(9600);
UART1_Write(14);
delay_ms(1000);
UART1_Write(20);
UART1_Write(255);
UART1_Write(12);
UART1_Write(13);
UART1_Write_Text("Frecv.:

//
//
//
//
//
//
//
//

Hz");

Iniializare comunicaie serial pe 9600 bauds


Resetare display
Ateptare resetare
Setare backlight display
Valoare backlight display
Clear screen
Carriage return
Text iniial

T1CON.T1CKPS1=1;
T1CON.T1CKPS0=1;
T1CON.TMR1ON=1;

// Setare prescaler Timer 1

CCP1CON=0b00000111;

// CCP n mod captur la al 16-lea front cresctor

INTCON=0b11000000;
PIE1.CCP1IE=1;
PIR1.CCP1IF=0;

// Activare ntreruperi globale i periferice


// Activare ntrerupere modul CCP
// Resetare flag ntrerupere modul CCP

while(1){
display(4000000/N);
}

// Calcul i afiare frecven

// Pornire Timer 1

Exemplu de calcul pentru TTMR1 MAX = 0.2 s:


a) determinarea produsului 4 TOSC
4 TOSC = 4 / 8000000 = 0.0000005 s
b) determinarea raportului n
n = TTMR1 MAX / 4 TOSC = 0.2 / 0.0000005 = 400000

40

c) determinarea prescalerului PS
T1CKPS = n / 65536 = 400000 / 65536 = 6.103515625 (se alege 8)
d) determinarea noii valorii maxime a TTMR1 MAX
TTMR1 MAX = 4 TOSC T1CKPS 65536 = 0.262144 s

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