Sunteți pe pagina 1din 165

Microcontrolere PIC

De la A la Z
mikroe.com






2013
Microcontrolere PIC - De a A la Z

1


CAPITOLUL 1: MICROCONTROLER PIC16F887 -
DISPOZITIV DE ANSAMBLU ASUPRA

PIC16F887 este una dintre cele mai noi produse de Microchip. Conine toate componentele care au
actualizat n mod normal, microcontrolere. Pentru sale de pret scazut, gama larga de aplicare, de nalt
calitate i uor de disponibilitate, aceasta este o soluie ideal n aplicaii cum ar fi: de control a diferitelor
procese n industrie, masina de dispozitiv de control, de msurare a diferitelor valori etc Unele dintre
principalele sale caracteristici sunt enumerate dedesubt.
RISC, arhitectura
o Doar 35 pentru a afla instruciunile de
o Toate singur ciclu de instruciuni cu excepia sucursalelor
Frecvena de 0-20 MHz
Oscilatorul intern de precizie
o Fabrica de calibrat
o Produse de plastic selectabil de frecven larg de 8MHz la 31KHz
De putere de tensiune de alimentare 2,0-5.5V
o Consum: 220uA (2.0V, 4MHz), 11uA (2,0 V, 32 kHz) 50nA (stand-by mode)
Power-Saving modul sleep
Brown-out Reset (BOR), cu opiune de software de control
35 intrare / ieire-pin
o Surs de curent de inalta / chiuveta cu led-uri directe pentru unitate
o software i individual programabil trage n sus Rezistor
o ntreruperea-pe-Schimbare de aderen
8k ROM de memorie n tehnologia FLASH
o Chip poate fi reprogrammed pana la 100,000 de ori
In-Circuit Serial Programming Opiunea
o Chip poate fi programat chiar ncorporat n dispozitivul int
256 octei de memorie EEPROM
o Datele pot fi scrise mai mult de 1.000.000 de ori
368 octei de memorie RAM
Convertor A / D:
o 14-canale
o 10-bit Rezoluie
3 independente de timp / contoare
Watch-dog timer
Comparaie cu modul analogic
o Dou comparator analogic
o Fix de referin de tensiune (0.6V)
o Programabile on-chip de tensiune de referin
Microcontrolere PIC - De a A la Z

2

PWM de ieire direciei de control
Enhanced modul USART
o Sprijin RS-485, RS-232 i LIN2.0
o Auto-Detect baud
Master sincrone Serial Port (MSSP)
o sprijin I2C i SPI mode





Microcontrolere PIC - De a A la Z

3


PIN Descriere
Dup cum se vede n imaginea de mai sus, cea mai sunt multi-pin-funcional. De exemplu, calculatoare
RA3/AN3/Vref + / C1IN + pentru cea de-a cincea de aderen specific urmtoarele funcii:
RA3 Port A treia digitale de intrare / ieire
n al treilea rnd AN3 analogic de intrare
Vref + pozitive de tensiune de referin
C1IN + comparator C1positive intrare
Acest mic truc este folosit adesea pentru c face mai multe microprocesoare pachet compact, fr a afecta
funcionalitatea. Aceste diverse funcii de aderen nu pot fi utilizate simultan, dar poate fi modificat n
orice moment n timpul operaiunii.
n urmtoarele tabele, toate pin 'se refer la numerele de PDIP 40 microcontroler.
Microcontrolere PIC - De a A la Z

4


Microcontrolere PIC - De a A la Z

5


Microcontrolere PIC - De a A la Z

6


Unitatea Central Procesor (CPU)
Orice ncercare de a explica n detaliu modul de funcionare a procesorului ne-ar lua prea departe. Cine
este interesat de faptul c oricum?! Este important s spun c este fcut n Procesor RISC, tehnologie,
deoarece acest fapt poate afecta sa cumpere exact acest microcontroler.
RISC nseamn redus de instruciuni set de Calculator, care ofer PIC16F887 doua mari avantaje:
Procesor poate sa recunoasca si sa executa doar 35 instruciuni simple (n scopul de a programa alte
microcontrolere este necesar s se cunoasc mai mult de 200 de instruciuni de inima).
Timp de execuie este aceeai pentru toate acestea i dureaz 4 cicluri de ceas (oscilatorul a cror
frecven este stabilizat, cristal de cuar). Singurele excepii sunt instruciuni de salt i sucursale
Microcontrolere PIC - De a A la Z

7

ale cror timp de execuie este de dou ori mai lung. Aceasta nseamn c, dac microcontroller
de funcionare ale vitezei este 20MHz, timp de execuie din fiecare instruc ie va fi 200nS, i
anume, programul va fi executat la viteza de 5 milioane de instruciuni pe secund!


Memorie
Acest microcontroler are trei tipuri de memorie-ROM-ul, memoria RAM si EEPROM. Toate acestea vor
fi discutate separat, deoarece fiecare are anumite funcii, caracteristici i organizare.
Memorie ROM
ROM de memorie este folosit pentru a economisi permanent, programul fiind executat. De aceea este
deseori numit "Programul de memorie". PIC16F887 de a 8KB ROM (n total 8192 de locatii). Deoarece,
n acest caz, ROM este fcut n tehnologia FLASH, coninutul su poate fi schimbat prin furnizarea de
programare speciale de tensiune (13V).
Oricum, nu este nevoie s se explice, n detaliu, deoarece acesta este efectuat n mod automat, prin
intermediul unui program special de pe PC-ul i un simplu dispozitiv electronic numit programator (nu la
toate originale).
Microcontrolere PIC - De a A la Z

8



Memorie EEPROM
Similare cu programul de memorie, coninutul de EEPROM este permanent salvat, chiar si la puterea de
merge afara. Cu toate acestea, spre deosebire de ROM, coninutul de EEPROM poate fi schimbat n
timpul operaiunii de microcontroller. De aceea, acest memorie (256 locuri) este perfect pentru un
permanent rezultatele de economisire a creat i utilizat n timpul operaiei.
Memorie RAM
Aceasta este cea de-a treia si cea mai complexa parte din memoria microcontroler. n acest caz, este
alctuit din dou pri: cu scop general i registre speciale cu functie registre (SFR).
Chiar dac ambele grupuri de registre sunt eliminate atunci cand pleaca afara de putere i, chiar dac
acestea sunt fabricate n acelai mod i s acioneze n mod similar, funciilor lor, nu au multe lucruri n
comun.


Microcontrolere PIC - De a A la Z

9

Registrele cu scop general
Registrele cu scop general sunt folosite pentru stocarea temporar a datelor i rezultatelor create n timpul
operaiunii. De exemplu, n cazul n care programul efectueaz o numrtoare (de exemplu, contabilizare
produse de pe linia de montaj), este necesar de a avea un registru care este de la ceea ce noi numim n viaa
de zi cu zi "snt". Avnd n vedere c nu este microcontroler de creatie de la toate, este necesar s se
specifice adresa de unele registru n scop general i atribuii-i acestuia o nou funcie. Un program simplu
de a increment valoarea acestui registru, pn la 1, dup fiecare produs trece printr-un senzor, ar trebui s
fie creat.
Prin urmare, microcontroler se poate executa acel program, pentru c acum tie ce i unde suma pe care
trebuie s fie incremented este. Similare n acest exemplu simplu, fiecare program trebuie s fie variabil
preassigned unele din registru cu scop general.
Registrele SFR
Registre speciale cu functie de memorie RAM sunt de asemenea locaii, dar spre deosebire de registre cu
scop general, scopul lor este predeterminat, pe parcursul procesului de fabricaie i nu poate fi schimbat.
Deoarece biii lor sunt fizic conectate la circuite special pe chip (Convertor A / D, de serie modul de
comunicare, etc), orice modificare a coninutului lor afecteaz n mod direct funcionarea microcontroller
sau de la unele circuite. De exemplu, de a schimba registrul TRISA, n funcie de un PIN fiecare port poate
fi schimbat ntr-un mod pe care l acioneaz n calitate de intrare sau de ieire. O alt caracteristic a
acestor locaii de memorie este c au numele lor (i registrele lor de bii), care faciliteaz considerabil
programul de scris. Deoarece la nivel nalt, limbajul de programare poate utiliza lista de registre cu toate
adresele lor exacte, este suficient s se precizeze numele n registru, pentru a citi sau a schimba coninutul.
Memorie RAM Banci
Datele de memorie este partitioned n patru banci. nainte de a accesa unele registru n programul de scris
(pentru a citi sau a modifica coninutul su), este necesar s selectai bancar care conine acest registru.
Doi bii din registrul de stare sunt utilizate pentru selectarea bncii, care va fi discutat mai tarziu. n scopul
de a facilita operarea, cele mai frecvent utilizate SFRs au aceeai adres n toate bncile care s le permit
s fie uor de accesat.
Microcontrolere PIC - De a A la Z

10


Microcontrolere PIC - De a A la Z

11


Microcontrolere PIC - De a A la Z

12


Microcontrolere PIC - De a A la Z

13




STIV
O parte din RAM utilizat pentru stiva este format din opt 13-bit registre. nainte de a ncepe
microcontroler pentru a executa un subroutine (instruciunea CALL) sau cnd apare o ntrerupere, adresa de
lng primul curs de instruire n prezent este executat mpinse spre stiva, i anume, pe unul din registrele
sale. n acest fel, la subroutine ntrerupere sau de executie, microcontroller stie de unde regulate, pentru a
continua programul de executie. Aceast adres este golit la intoarcerea in principal de program, deoarece
nu este nevoie s salvai-l mai orice, i o locaie din stiva este automat disponibil pentru utilizarea
ulterioar.
Este important de tiut c de date este ntotdeauna circularly mpinse spre stiva. Aceasta nseamn c,
dup ce stiva a fost mpins de opt ori, a noua mpinge Suprascrie valoare care au fost stocate cu primul
Microcontrolere PIC - De a A la Z

14

impuls. A zecea mpinge mpinge suprascrie cel de-al doilea i aa mai departe. Date suprascrise n acest
mod nu este recuperabil. n plus, programator nu poate accesa aceste registre pentru a scrie sau a citi i nu
exist nici o Stare de bii pentru a indica stack overflow sau stiva underflow condiii. Din acest motiv, ar
trebui s o ia o ngrijire special a acestuia n timpul programului scris.
ntreruperea Sistem
Primul lucru pe care nu microcontroler la o cerere de ajunge este de a executa instruciunea curent i apoi
opri program regulat de executie. Imediat dup aceea, actualul program de adres de memorie este automat
mpinse spre stiva si implicit adresa (predefinite de ctre productor) este scris in program contra. De la
acea locaie n cazul n care continu programul de executie este denumit vectorul ntrerupere. n ceea ce
privete microcontroler PIC16F887, care este adresa 0004h. Dup cum se vede n figura de mai jos, ce
conine locaia interrupt vector este trecut peste program regulat n timpul de executie.
Parte a programului fiind activat la cerere de ntrerupere ajunge este numit de rutin. Primul instruire este
situat la vectorul ntrerupere. Ct timp aceast subroutine va fi si ce va fi ca depinde de abilitile de
programator, precum i a ntrerupe sursa virusului. Unii au mai multe microcontrolere ntrerup vectori (la
fiecare cerere de-a vectorului su), dar n acest caz nu exist dect o singur. n consecin, prima parte a
ntrerupe rutina de ntrerupere const n sursa de recunoatere.
La ultima, la surs de ntrerupere este recunoscut i rutina de ntrerupere este executat, microcontroler
ajunge la instruciunea RETFIE, pops adresa de la stiva de executie si continua programul de unde a rmas.


Cum s utilizai SFRs
Ai cumprat microcontroller si au o mare idee cum s l foloseasc ... Exist o lung list cu toate SFRs de
bii. Fiecare dintre ele unele controale de proces. All in all, se pare c este un mare control de mas cu o
mulime de instrumente i switch-uri. Acum, v ngrijoreaz dac va gestiona pentru a afla cum s
utilizai-le pe toate? Probabil c va nu, dar nu v facei griji, nu trebuie s! Cine are nevoie ca oricum?
Astfel de puternic, microcontrolere sunt similare la supermarket: pe care le ofer att de multe lucruri la
preuri mici i este numai pn la care s putei alege. Prin urmare, selectai domeniul in care sunteti
interesat de studiu i numai ceea ce trebuie s tii. Ulterior, cnd vei nelege complet exploatarea
hardware-ul, studiul de SFRs care se afl n control al ei (exist de obicei cteva dintre ele). La ultima, n
Microcontrolere PIC - De a A la Z

15

timpul programului scris, nainte de a modifica unele din aceste registre de bii, nu uitai s selectai bancar
este cazul. De aceea ele sunt enumerate n tabelele de mai sus.


















Microcontrolere PIC - De a A la Z

16


CAPITOLUL 2: CORE SFRS

Faciliti i funcia
n funcie de registre speciale pot fi clasificate n dou categorii:
Core (CPU) registre - controlul i monitorizarea proceselor n operarea i centrale de procesor.
Chiar dac sunt doar cteva dintre ele, modul de funcionare a ntregului microcontroler depinde de
coninutul lor.
Periferice SFRs de control al funcionrii de uniti periferice (serial de comunicaie modul,
Convertor A / D etc.) Fiecare din aceste registre este n principal de specialitate pentru un circuit i,
din acest motiv, ele vor fi descrise, mpreun cu acestea sunt n circuitul de control.
The Core (CPU) registre ale microcontroler PIC16F887 sunt descrise n acest capitol. Deoarece lor de bii
de control diferite n cadrul circuitelor cip, nu este posibil de a le clasifica, ntr-un grup special. Din cauza
c, ceea ce nseamn c biii sunt descrise acestea, mpreun cu procesele de control.
STARE Register

Fig. 2-1 STARE Register
Stare registru conine: aritmetice statutul de registru W, RESET de stare i de selectare a bancii de date
pentru biii de memorie. Unul ar trebui s fie ateni atunci cnd unele valoarea scris la acest registru pentru
c n caz de neglijen, rezultatele pot fi diferite dect de ateptat. De exemplu, dac o ncercare de a terge
toate bii, folosind CLRF STARE instruire, rezultat n registru va fi 000xx1xx n loc de ateptat 00000000.
Aceste erori apar pentru c unele biii din acest registru sunt stabilite sau eliminate n conformitate cu
hardware-ul, precum i datorit faptului c bii, 3 i 4 sunt doar de citit. Pentru aceste motive, n cazul n
care este necesar pentru a modifica coninutul (de exemplu, pentru a schimba bancar activ), este
recomandat s utilizai numai instruciuni care nu afecteaz nici Stare de bii (C, DC i Z). Consultai
"Rezumat set de instruciuni".
IRP - BIT selecteaza registrul bancar. Este utilizat pentru abordarea indirect.
o 1 - Banci 0 i 1 sunt active (locaia de memorie 00h-FFh)
o 0 - Banci 2 i 3 sunt active (locaia de memorie 100h-1FFh)
RP1, RP0 - Biti selectai registrul bancar. Acestea sunt utilizate pentru abordarea direct.
Microcontrolere PIC - De a A la Z

17

RP1 RP0 Banca active
0 0 Bank0
0 1 Bank1
1 0 Bank2
1 1 Bank3
SE - Time-out de bii.
o 1 - Dup ce puterea de-la sau dup executarea instruciunea CLRWDT care reiniializeaz
watch-dog timer Sleep sau de instruire care stabilete microcontroler n modul de consum
redus.
o 0 - Dup watch-dog timer-time-out a aprut.
PD - Power-down bit.
o 1 - Dup ce puterea de-la sau dup executarea instruciunea CLRWDT care reiniializeaz
watch-dog timer.
o 0 - Dup executarea de somn de instruire care stabilete microcontroler n modul de consum
redus.
Z - Zero bit
o 1 - Rezultatul o operaie aritmetic sau logic este zero.
o 0 - Rezultatul o operaie aritmetic sau logic este diferit de zero.
DC - Digitlis transporta / imprumuta de bii este schimbat n timpul Navigare plus i n cazul n
care un "peste" sau un "imprumuta" de la rezultat apar.
o 1 - Un transport de la a 4-redus de bii, pentru a rezultat a aprut.
o 0 - nr transporta-out de la a 4-redus de bii, pentru a rezultat a aprut.
C - Carry / Borrow bit este schimbat n timpul Navigare plus i n cazul n care un "peste" sau un
"imprumuta" de la rezultat apar, i anume, dac rezultatul este mai mare de 255 sau mai mic dect
0.
o 1 - Un transport de la cel mai semnificativ bit de acest rezultat sa produs.
o 0 - nr transporta-out de la cel mai semnificativ bit de acest rezultat sa produs.
OPTION_REG Register

OPTION_REG de registru conine biii de control diferite pentru a configura: Timer0/WDT prescaler,
Timer TMR0, ntrerupere extern i trage-up-uri de pe PORTB.
Microcontrolere PIC - De a A la Z

18


RBPU - Port B Tragei pn Activai bii.
o 1 - Porta trage B-up-uri sunt dezactivate.
o 0 - Porta trage B-up-uri sunt activate.

INTEDG - Interrupt Edge Select bit.
o 1 - ntreruperea n cretere pe marginea RB0/INT PIN.
o 0 - ntreruperea care se ncadreaz pe marginea RB0/INT PIN.

T0CS - TMR0 Clock Source Select bit.
o 1 - Timer TMR0 utilizeaz impulsurile de tranziie pe T0CKI PIN.
o 0 - Timer TMR0 utilizri interne ciclu de instruire impulsurile (fosc / 4).

Microcontrolere PIC - De a A la Z

19

T0SE - TMR0 Source Edge Select bit selecteaza marginea pulsul (sau care se ncadreaz n
cretere) de timer-numrate TMR0 prin RA4/T0CKI PIN.
o 1 - Increment cu grad ridicat de-a redus de tranziie pe TOCKI PIN.
o 0 - Increment pe sczut-nalt de tranziie pentru a-pe TOCKI PIN.

PSA - Prescaler Assignment bit atribuie prescaler (numai una exist) sau a timer watchdog timer.
o 1 - Prescaler este alocat pentru WDT.
o 0 - Prescaler este alocat la TMR0.
PS2, PS1, PS0 Rat Prescaler Selectai bii.
Prescaler rata este selectat prin combinarea acestor trei bii. In afara de aceasta, dup cum se arat n
tabelul de mai jos, prescaler rata prescaler rata depinde dac i este atribuit prescaler (TMR0) sau watch-
dog timer (WDT).
PS2 PS1 PS0 TMR0 WDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
n scopul de a atinge rata de 1:1 prescaler atunci cnd timer-TMR0 conteaz pn impulsurile, prescaler ar
trebui s fie repartizate pentru WDT. n consecin, din care, timer TMR0 nu folosete prescaler, direct,
dar conteaza impulsurile generate de oscilatorul, care a fost obiectivul!
ntreruperea Sistem Registre
Cnd o cerere de sosete nu nseamn c ntrerup va aprea n mod automat, deoarece trebuie s fi activat
de asemenea de ctre utilizator (din cadrul programului). Din cauza c, exist speciale de bii, utilizat
pentru a activa sau dezactiva ntrerupe. Este uor s recunoasc aceste biii de IE coninute n numele lor
(de la Interrupt Enable). In afara de aceasta, fiecare ntrerupere este asociat cu un alt pavilion numit de bii
care indic faptul c a sosit cerere, indiferent de faptul dac este sau nu este activat. De asemenea, ele
sunt uor de recunoscut de ultimele dou litere din numele lor-IF (Interrupt Flag).
Microcontrolere PIC - De a A la Z

20

Aa cum se vede, totul se bazeaz pe o idee simpla si eficienta. Cnd o cerere de sosete, drapelul de bii
este de a fi primul set.

Fig. 2-9 ntreruperea Sistem Registre
Dac este cazul IE bit nu este setat (0), acest eveniment va fi complet ignorate. Altfel, se produce o
ntrerupere! n cazul n care mai multe surse de ntrerupere sunt activate, este necesar de a detecta un activ,
nainte de rutina de ntrerupere ncepe executarea. Sursa de detecie este de control efectuate de pavilion
bii.
Este important de tiut c pavilion de bii nu sunt eliminate n mod automat, ci de ctre rutina de
ntrerupere software-ului n timpul de executie. Dac acest detaliu este neglijata, o alt ntrerupere va
aprea imediat la intoarcerea in program, chiar dac nu exist nici o cerere pentru mai multe su de
executie! Pur i simplu, de pavilion, precum i a rmas stabilit IE bii. Oricum, este o mare ans de a
cheltuielilor de somn o alt noapte ...
Toate sursele de ntrerupere tipic de microcontroler PIC16F887 sunt afiate pe pagina urmtoare. Not
mai multe lucruri:
GIE bii - permite tuturor unmasked ntrerupe ntrerupe i dezactiveaz toate simultan.
PEIE bii - permite tuturor unmasked periferice ntrerupe i dezactiveaz toate periferice interrupt
(Aceasta nu se refer Timer TMR0 i portul B, surse de ntrerupere).
Pentru a activa ntrerupere cauzat de a schimba logica de stat pe portul B, este necesar s o activm
pentru fiecare bit separat. n acest caz, biii din registru IOCB au funcia de a controla IE bii.
Microcontrolere PIC - De a A la Z

21


Fig. 2-10 ntreruperea SFRs
Registrul INTCON
n registrul INTCON contine diferite permite i pavilionul bii pentru registrul TMR0 overflow, PORTB
schimbare i externe, INT pin ntrerupe.

Fig. 2-11 Registrul INTCON
GIE - Global Interrupt Enable bit - toate controalele posibile surse de ntrerupere simultan.
o 1 - Activeaz toate unmasked ntrerupe.
o 0 - Dezactiveaz toate ntrerupe.
Microcontrolere PIC - De a A la Z

22

PEIE - periferice Interrupt Enable bit de acte similare, pentru a GIE, dar ntrerupe controalele
activat de periferice. Aceasta nseamn c nu afecteaz ntrerupe declanat de timer TMR0 sau prin
schimbarea de stat pe portul B sau RB0/INT PIN.
o 1 - Activeaz toate unmasked periferice ntrerupe.
o 0 - Dezactiveaz toate periferice ntrerupe.
T0IE - TMR0 overflow Interrupt Enable bit de control ntrerupere activat de ctre TMR0
overflow.
o 1 - Permite TMR0 intrerup.
o 0 - disables the TMR0 intrerup.
Inte - RB0/INT externe Interrupt Enable bit de control ntrerupere cauzat de a schimba logica
de stat pe RB0/IN pin (extern ntrerupere).
o 1 - Permite INT externe intrerup.
o 0 - Dezactiveaz INT externe de ntrerupere.
RBIE - RB Port Change Interrupt Enable bit. Cnd este configurat ca factori de producie, B-
pin port ntrerupere poate cauza, prin schimbarea lor logica de stat (indiferent dac este highto-
sczut de tranziie sau invers, faptul c ceva este schimbat numai probleme). Acest lucru determin
dac ntrerup bii este de a produce sau nu.
o 1 - Activeaz portul B privire la schimbarea intrerup.
o 0 - Dezactiveaz portul B privire la schimbarea intrerup.
T0IF - TMR0 overflow Interrupt Flag bit registre timer overflow TMR0 registru, atunci cnd
numrare a ncepe de la zero.
o 1 - TMR0 registru a overflowed (de bii trebuie s fie eliminate n software-ului).
o 0 - TMR0 registru nu a overflowed.
INTF - RB0/INT externe Interrupt Flag bit registrele de schimbare a logicii de stat pe RB0/INT
PIN.
o 1 - INT externe de ntrerupere a avut loc (trebuie s fie eliminate n software-ului).
o 0 - INT externe de ntrerupere nu a survenit.
RBIF - RB Port Change Interrupt Flag bit registrele de schimbare a logicii de stat a unor porturi
de intrare B-pin.
o 1 - Cel puin unul din portul B n scop general I / O-pin a fost schimbat de stat. La lectur
portB, RBIF (pavilion bii) trebuie s fie eliminate n software-ul.
o 0 - Nici unul din portul B n scop general I / O-pin a fost schimbat de stat.
PIE1 Register
PIE1 de registru conine periferice ntrerupere a permite bii.
Microcontrolere PIC - De a A la Z

23


Fig. 2-13 PIE1 registru
Adie - Convertor A / D Interrupt Enable bit.
o 1 - Permite ADC intrerup.
o 0 - disables the ADC intrerup.
RCIE - EUSART Receive Interrupt Enable bit.
o 1 - Permite EUSART primi intrerup.
o 0 - disables the EUSART primi intrerup.
TXIE - EUSART Transmisie Interrupt Enable bit.
o 1 - Permite EUSART transmite intrerup.
o 0 - disables the EUSART transmite intrerup.
SSPIE - Master sincrone Serial Port (MSSP) Interrupt Enable bit - permite o cerere de a fi
generat la fiecare transmisie de date prin intermediul modulului de comunicare sincron de serie
(SPI sau I2C mod).
o 1 - Permite MSSP intrerup.
o 0 - disables the MSSP intrerup.
CCP1IE - CCP1 Interrupt Enable bit permite o cerere de a fi generate n CCP1 modulul utilizat
pentru semnal PWM de prelucrare.
o 1 - Permite CCP1 intrerup.
o 0 - disables the CCP1 intrerup.
TMR2IE - TMR2 la PR2 de meci Interrupt Enable bit
o 1 - Permite TMR2 la PR2 meci de ntrerupere.
o 0 - disables the TMR2 la PR2 meci de ntrerupere.
TMR1IE - TMR1 overflow Interrupt Enable bit permite o cerere pentru a fi generate n
fiecare registru overflow Timer TMR1, adic atunci cnd ncepe numrarea de la zero.
o 1 - Permite TMR1 overflow intrerup.
o 0 - disables the TMR1 overflow intrerup.
PIE2 Register
De PIE2 Registrul conine, de asemenea, diferite ntrerupere a permite bii.
Microcontrolere PIC - De a A la Z

24


Fig. 2-15 PIE2 Register
OSFIE - Oscilator Fail Interrupt Enable bit.
o 1 - Activeaz oscilatorul nu intrerup.
o 0 - Dezactiveaz oscilatorul nu intrerup.
C2IE - comparator C2 Interrupt Enable bit.
o 1 - Activeaz comparator C2 intrerup.
o 0 - Dezactiveaz comparator C2 intrerup.
C1IE - comparator C1 Interrupt Enable bit.
o 1 - Activeaz comparator C1 intrerup.
o 0 - Dezactiveaz comparator C1 intrerup.
EEIE - EEPROM Write Operation Interrupt Enable bit.
o 1 - Permite operarea EEPROM scrie intrerup.
o 0 - Dezactiveaz EEPROM scrie funcionarea intrerup.
BCLIE - Autobuz coliziunilor Interrupt Enable bit.
o 1 - Activeaz autobuz coliziune intrerup.
o 0 - Dezactiveaz autobuz coliziune intrerup.
ULPWUIE - Ultra Low-Power Wake-up Interrupt Enable bit.
o 1 - Activeaz Ultra Low-Power Wake-up intrerup.
o 0 - Dezactiveaz Ultra Low-Power Wake-up intrerup.
CCP2IE - CCP2 Interrupt Enable bit.
o 1 - Activeaz CCP2 intrerup.
o 0 - Dezactiveaz CCP2 intrerup.
PIR1 Register
n registrul PIR1 conine interrupt flag bii.
Microcontrolere PIC - De a A la Z

25


Fig. 2-17 PIR1 Register
ADIF - Convertor A / D Interrupt Flag bit.
o 1 - A / D conversie este completat (de bii trebuie s fie eliminate n software-ului).
o 0 - A / D conversie nu este completat sau nu a pornit.
RCIF - EUSART Receive Interrupt Flag bit.
o 1 - EUSART primi tampon este plin. Bit eliminate prin citirea RCREG registru.
o 0 - EUSART primi tampon nu este complet.
TXIF - EUSART Transmisie Interrupt Flag bit.
o 1 - EUSART transmite tampon este gol. Bit eliminate prin scris, TXREG registru.
o 0 - EUSART transmite tampon este plin.
SSPIF - Master sincrone Serial Port (MSSP) Interrupt Flag bit.
o 1 - MSSP ntrerup n timpul n stare de date transmite / primi a aprut. Aceste condiii
difer n funcie de modul de operare MSSP (SPI sau I2C) Acest bit trebuie s fie eliminate
n software-ului nainte de ntoarcere de la serviciu rutina de ntrerupere.
o 0 - nr MSSP ntrerup condiie a aprut.
CCP1IF - CCP1 Interrupt Flag bit.
o 1 - CCP1 ntrerup condiie a avut loc (CCP1 este unitate pentru captarea, compararea i
generatoare de semnal PWM). n funcie de modul de operare, capturarea sau comparati
meci a avut loc. n ambele cazuri, de bii trebuie s fie eliminate n software-ul. Acest bit
nu este utilizat n modul PWM.
o 0 - nr CCP1 ntrerup condiie a aprut.
TMR2IF - Timer2 la PR2 Interrupt Flag bit
o 1 - TMR2 (8 bii registru) de a PR2 meci a avut loc. Acest bit trebuie s fie eliminate n
software-ului nainte de ntoarcere de la serviciu rutina de ntrerupere.
o 0 - nr TMR2 la PR2 meci a avut loc.
TMR1IF - Timer1 overflow Interrupt Flag bit
o 1 - TMR1 registru a overflowed. Acest bit trebuie s fie eliminate n software-ul.
o 0 - TMR1 registru nu a overflowed.



Microcontrolere PIC - De a A la Z

26

PiR2 Register
PiR2 de registru conine interrupt flag bii.

Fig. 2-18 registru piR2
OSFIF - Oscilator Fail Interrupt Flag bit.
o 1 - Sistemul de oscilatorul de ceas de intrare a euat i-a schimbat la oscilatorul intern
INTOSC. Acest bit trebuie s fie eliminate n software-ul.
o 0 - Sistemul de oscilatorul funcioneaz n mod normal.
C2IF - comparator C2 Interrupt Flag bit.
o 1 - comparator de ieire C2-a schimbat (C2OUT bii). Acest bit trebuie s fie eliminate n
software-ul.
o 0 - comparator de ieire C2 nu sa schimbat.
C1IF - comparator C1 Interrupt Flag bit.
o 1 - comparator de ieire a schimbat C1 (C1OUT bii). Acest bit trebuie s fie eliminate n
software-ul.
o 0 - comparator de ieire C1 nu sa schimbat.
EEIF - EE Scrie Operation Interrupt Flag bit.
o 1 - EEPROM scrie completat. Acest bit trebuie s fie eliminate n software-ul.
o 0 - scriere EEPROM nu este completat sau nu a pornit.
BCLIF - Autobuz coliziunilor Interrupt Flag bit.
o 1 - Un autobuz coliziune a avut loc n MSSP, cnd este configurat n modul Master pentru
I2C. Acest bit trebuie s fie eliminate n software-ul.
o 0 - autobuzul nr coliziune sa produs.
ULPWUIF - Ultra Low-putere Wake-up Interrupt Flag bit.
o 1 - Wake-up, condiie a aprut. Acest bit trebuie s fie eliminate n software-ul.
o 0 - nr Wake-up, condiie a aprut.
CCP2IF - CCP2 Interrupt Flag bit.
o 1 - CCP2 ntrerup condiie a avut loc (unitate pentru captarea, compararea i generatoare de
semnal PWM). n funcie de modul de operare, capturarea sau comparati meci a avut loc.
Microcontrolere PIC - De a A la Z

27

n ambele cazuri, de bii trebuie s fie eliminate n software-ul. Acest bit nu este utilizat n
modul PWM.
o 0 - nr CCP2 ntrerup condiie a aprut.
Registrul PCON
PCON de registru conine numai dou pavilion bii, utilizat pentru diferenierea ntre o:-putere pe reseta,
maro-out reseta, Watchdog Timer Resetare i externe a reseta (prin MCLR pini).

Fig. 2-21 registrul PCON
ULPWUE - Ultra Low-Power Wake-up Enable bit
o 1 - Ultra Low-Power Wake-up activat.
o 0 - Ultra Low-Power Wake-up dezactivate.
SBOREN - Software BOR Enable bit
o 1 - Brown-out Reset activat.
o 0 - Brown-out Reset dezactivat.
POR - Power-on Reset Stare de bii
o 1 - Nu-putere pe reiniializare a aprut.
o 0 - Putere de resetare a aprut. Acest bit trebuie s fie setat n software-ul dup o putere de-
apare pe Reiniializare.
BOR - Brown-out Reset Stare de bii
o 1 - nr Brown-out de reiniializare a aprut.
o 0 - Brown-out de reiniializare a aprut. Acest bit trebuie s fie setat n software-ul dup o
Brown-out Reset apare.
PCL PCLATH i Registre
Mrimea memoriei program de PIC16F887 este 8k. Prin urmare, le-a 8192 locatii pentru programul de
stocare. Pentru acest motiv, programul trebuie s fie contra 13-bii larg (2 ^ 13 = 8192). Pentru c n
coninutul unor locaie poate fi schimbat n software-ul n timpul operaiunii, adresa acestuia trebuie s fie
accesibile, prin intermediul unor SFR. Deoarece toate SFRs sunt 8 bii larg, acest registru este "artificial"
creat prin mprirea sale 13 de bii n dou registre independente: PCLATH i PCL.
Dac programul de executie nu afecteaz programul de contor, valoarea acestui registru este n mod
automat i constant incremented +1, +1, +1, +1 ... n acest fel, programul este executat aa cum este
writen-instruire de instruire, urmat de adresa de cretere constant.
Microcontrolere PIC - De a A la Z

28


Fig. 2-23 PCL PCLATH i Registre
Dac programul este modificat n contra software-ul, apoi sunt mai multe lucruri care ar trebui s fie
pstrate n vedere pentru a evita problemele:
Opt mai mici de bii (sczut byte) provin de la registrul PCL, care este de citit i de scriere, ntruct
cinci superioare de bii, provenind de la PCLATH registru sunt doar pentru scriere.
PCLATH de registru este golit de pe orice suporta.
n limbajul de asamblare, valoarea programului este de a contracara marcate cu PCL, dar ea se
refer, evident, mai mic cu 8 bii, doar. Unul ar trebui s aib grij de faptul c atunci cnd folosii
"ADDWF PCL" instruire. Aceasta este o instruciune de salt care specific locaia int prin
adugarea unor numr la adresa curent. Ea este deseori folosit n momentul sarind intr-un look-
up de mas sau de program ramura de mas pentru a le citi. O problem apare n cazul n care este
adresa de curent, astfel nct pe lng cauzele schimba unele aparinnd de bii mai mare de octei
din PCLATH registru. Nu mai vedea ce se intampla?
Executare orice instruciune la registrul PCL simultan provoac Prog ram Counter bii, pentru a fi
nlocuit cu coninutul de PCLATH registru. Cu toate acestea, PCL registru are acces la numai 8
bii, mai mic de instruciuni de rezultat i urmtoarele salt va fi complet incorect. Problema este
rezolvata prin stabilirea unor astfel de instruciuni de la adrese care se ncheie de ctre xx00h.
Acest program permite de a sri de pana la 255 locatii. Dac mai sunt salturi executate de aceast
instruire, PCLATH registru trebuie s fie incremented de 1 pentru fiecare PCL registru overflow.
Pe subroutine sri de apel sau de executie (instruciuni CALL i du-te), microcontroller este n
msur s ofere doar 11 de bii adresa. Din acest motiv, la fel RAM, care este mprit n "bnci",
ROM este mprit n patru "pagini" n mrime de 2k fiecare. Aceste instruciuni sunt executate n
cadrul acestor pagini, fr nici o pro Lem. Pur i simplu, deoarece este prevzut cu procesor 11-bit
de la adresa de program, este capabil de a adresa orice locaie n termen de 2KB. Figura de mai jos
ilustreaza aceasta situatie ca un salt la adresa de subroutine PP1.
Cu toate acestea, dac un subroutine sau adresa de salt nu sunt n aceeai pagin, ca de la locaie n
cazul n care este numit de salt, dou "lipsete" - mai mare de bii ar trebui s fie furnizate de scris,
PCLATH registru. El este ilustrat n figura de mai jos ca un salt la adresa de subroutine PP2.
Microcontrolere PIC - De a A la Z

29


Fig. 2-24 PCLATH Registre
n ambele cazuri, atunci cnd ajunge subroutine instruciuni de returnare, RETLW sau RETFIE (pentru a
reveni la principalele program), pur i simplu microcontroller va continua programul de executie de unde a
rmas, deoarece adresa de ntoarcere este mpins i salvate pe stiva, care, dup cum se menioneaz , Este
format din 13 de bii registre.
Indirect de adresare
n plus fa de abordarea direct, care este logic i clar de la sine (este suficient pentru a specifica adresa
de unele nregistreaz-te pentru a citi coninutul su), acest microcontroler este capabil s efectueze
abordarea indirect, prin intermediul a FSR i INDF registre. Este, uneori, faciliteaz considerabil
programul de scris. Intreaga procedura este activat, deoarece registrul INDF lucru nu este valabil pentru
unul (fizic nu exista), ci doar precizeaz n registru a crei adres este situat n registru FSR. Din cauza
c, de scriere sau citire de la registrul INDF nseamn de fapt scrie sau citi din registru a crui adres este
situat n registru FSR. Cu alte cuvinte, registre "adrese sunt specificate n registrul FSR, i coninutul lor
sunt stocate n registrul INDF. Diferena ntre abordarea direct i indirect, este ilustrata in figura de mai
jos:
Aa cum se vede, problema cu "lips de bii de adresare" este rezolvat de ctre "imprumuta" de la un alt
registru. Acest timp, este cea de-a aptea de bii numit IRP de la statutul registru.
Microcontrolere PIC - De a A la Z

30


Fig. 2-25 abordarea direct i indirect










Microcontrolere PIC - De a A la Z

31


CAPITOLUL 3: PORTURILE I / O

Faciliti i funcia
Una dintre cele mai important caracteristic a microcontroller este un numr de intrare / ieire-pin folosit
pentru conexiunea cu periferice. n acest caz, exist n total de treizeci i cinci de scop general I / O-pin
disponibile, care este destul de suficient pentru majoritatea aplicaiilor.
n scopul de pin "operaiune poate interne se potrivesc cu 8 bii organizarea, toate acestea sunt, la fel de
registre, grupate n cinci asa-numitele porturi marcat cu A, B, C, D i E. Toate acestea au mai multe
caracteristici n comun:
Din motive practice, multe I / O-pin au dou sau trei funcii. n cazul n care nici una din aceste
funcii de supleant este n prezent activ, care nu poate simultan de aderen ly folosi ca scop
general de intrare / ieire de aderen.
Fiecare port are "satelit", adic corespunztoare registrul TRIS: TRISA, TRISB, etc TRISC care
determin performana, dar nu i coninutul n portul bii.
Prin unele bii de compensare a registrului TRIS (bit = 0), corespunztoare port PIN-ul este configurat ca
ieire. n mod similar, prin setarea unor bii din registrul TRIS (bii = 1), corespunztoare port PIN-ul este
configurat ca intrare. Aceast regul este usor de retinut de iesire = 0, 1 = de intrare.

Microcontrolere PIC - De a A la Z

32

Fig. 3-1 porturile I / O
Port A i TRISA Register
Un port este o gam 8 bii, bidirecional de port. Biti de TRISA i ANSEL de control de porta-pin. Toate
porta-pin aciona ca factori de producie digital / ieiri. In afara de aceasta, cinci dintre acestea pot fi, de
asemenea, intrri analogice (marcat ca o):

Fig. Port 3-2 A i TRISA Register
Asemntor cu biii din registrul TRISA care determina care din pin va fi configurat ca intrare i de ieire
dup care, de bii, este necesar de a determina dac ANSEL registru de pin va aciona n calitate de factori
de producie analogice sau digitale, intrrile / ieirile.
RA0 = AN0 (determinat de bii ANS0 a ANSEL registru)
RA1 = AN1 (determinat de bii ANS1 a ANSEL registru)
RA2 = AN2 (determinat de bii ANS2 a ANSEL registru)
RA3 = AN3 (determinat de bii ANS3 a ANSEL registru)
RA5 = AN4 (determinat de bii ANS4 a ANSEL registru)
Fiecare bit de acest port are o funcie suplimentare legate de la unele din built-in unitati periferice. Aceste
funcii suplimentare vor fi descrise mai trziu, n capitole. Acest capitol acoper numai RA0's
suplimentare funciei de aderen, deoarece este legat de un port doar. Este vorba de ULPWU unitate.
Unitatea de ULPWU
Circuitul microcontroller este frecvent utilizate n dispozitivele care trebuie s funcioneze i periodic,
complet independent, folosind bateria de alimentare. n astfel de cazuri, consum minim de energie este una
dintre prioriti. Tipice exemple de astfel de aplicatii sunt: termometre, senzori pentru detectia de incendiu
i altele similare. Este cunoscut faptul c o reducere a frecvenei de ceas reduce consumul de putere, astfel
nct una dintre cele mai convenabil soluie la aceast problem este de a ncetini ceas Down (utilizarea
32KHz cristal de cuar n loc de 20MHz).
Microcontrolere PIC - De a A la Z

33


Setarea microcontroler la starea de repaus este un alt pas n aceeai direcie. Cu toate acestea, chiar i n
cazul n care ambele msuri sunt aplicate, o alt problem sa ivit. Este despre cum se microcontroller i
setai-o la modul normal. Ea este, evident, este necesar de a avea semnal externe, de a schimba logica de
stat pe unele din pin. Astfel, problema nc mai exist ... Acest semnal trebuie s fie suplimentare generate
de electronica, care determin consumul de putere mai mare de ntregul dispozitiv ...
Soluia ideal ar fi microcontroller wakes up periodic de la sine, care nu este imposibil, la toate. O schema
care permite, care este prezentat n figura din stnga.
Principiul de funcionare este simplu:
Un PIN-ul este configurat ca o ieire i de logica (1) este adus la acesta. Care provoac condensator
pentru a fi oprita. Imediat dup aceea, acelai PIN-ul este configurat ca intrare. De schimbare a logicii de
stat permite o ntrerupere i microcontroller este setat la modul sleep. Dup aceea, nu este nimic altceva de
fcut dect de asteptare pentru condensator de a fi evacuate prin scurgere de curent de ieire prin care curge
de intrare PIN. Atunci cnd apare, are loc o ntrerupere i microcontroller, continua cu programul de
executie n modul normal. Intreaga succesiune se repeta ...

La prima vedere, aceasta este o soluie perfect. Doar la prima vedere ... Problema este c toate pin
capabil de a provoca o ntrerupere n acest mod sunt digitale i au relativ mare scurgerilor de tensiune lor
curente, atunci cnd nu este aproape de valorile limit, Vdd (1) sau Vss (0). n acest caz, condensator este
evacuat pentru o scurta perioada de timp din anul curent se ridic la cteva sute de microamperes. Acesta
este motivul pentru care ULPWU circuitul putea s se nregistreze lent, pictur cu tensiune dincolo de
consum redus de putere este proiectat. Are ieire genereaz ntrerupere, n timp ce ei de intrare este
conectat la un microcontroller de pin. Ai ghicit, este de RA0 PIN. Referindu-se la schematic (R = 200
Ohm, C = 1nF), timp de descrcare de gestiune este de aproximativ 30mS, n timp ce consumul total de
microcontroller este de 1000 de ori mai mic (de mai multe sute de nanoamperes).
Port B i registrul TRISB
Microcontrolere PIC - De a A la Z

34

Port B este o gam 8 bii, bidirecional de port. Biti din registrul TRISB determina funcia de pin.

Fig. 3-5 Port B i registrul TRISB
Similare la portul A, o logica (1) n registrul TRISB configureaz corespunztor ca pin de port de intrare i
vice-versa. In plus, ase-pin pe acest port poate aciona n calitate de factori de producie analogice (o). De
bii din registrul ANSELH determina dac aceste insigne aciona ca factori de producie analogice sau
digitale, intrrile / ieirile:
RB0 = AN12 (determinat de bii ANS12 a ANSELH registru)
RB1 = AN10 (determinat de bii ANS10 a ANSELH registru)
RB2 = AN8 (determinat de bii ANS8 a ANSELH registru)
RB3 = AN9 (determinat de bii ANS9 a ANSELH registru)
RB4 = AN11 (determinat de bii ANS11 a ANSELH registru)
RB5 = AN13 (determinat de bii ANS13 a ANSELH registru)
Fiecare port are o aderen B suplimentare legate de funcia de construit n unele uniti periferice, care va
fi explicat mai trziu, n capitole.
Toate port pin au construit n trage-up, rezisten, ceea ce le face ideal pentru conectarea la push-
butoane (cu clape), switch-uri i optocouplers. n scopul de a conecta aceste rezistene la porturile
microcontroler, este necesar de bii din registrul WPUB ar trebui s se stabileasc .*

Fig. 3-6 WPUB registru
Avand un nivel ridicat de rezistenta (mai multe zeci de kilogram Ohm), aceste "virtuale" rezistene s nu
afecteze pin configurat ca rezultate, dar servete ca o completare util pentru a factorilor de producie. Ca
Microcontrolere PIC - De a A la Z

35

atare, acestea sunt conectate la circuite CMOS logica "factori de producie. Altfel, acestea ar putea aciona
ca n cazul n care sunt flotante, din cauza lor ridicat de rezistenta de intrare.

Fig. 3-7 Tragei-up, rezistene
* n afar de bii din registrul WPUB, nu exist un alt bii care afecteaz trage n sus Rezistor de
instalare. Este bit RBPU a OPTION_REG. Acesta este un scop general de bii, pentru c afecteaz
instalarea de toate portul rezistene.
Dac activat, fiecare port B bii configurat ca intrare pot cauza o ntrerupere de schimbare ing sale
de logica de stat. n scopul de a permite pin de a provoca o ntrerupere, corespunztor pic de IOCB
de registru ar trebui s fie stabilite.

Fig. 3-8 IOCB registru
Pentru c de aceste faciliti, B-pin port sunt folosite pentru verificarea push-butoane de pe tastatura,
pentru ca acestea unerringly registru apsai pe nici un buton. Prin urmare, nu este nevoie s se "scaneze"
aceti factori de producie, tot timpul.
Microcontrolere PIC - De a A la Z

36


Fig. Exemplu 3-9 Keyboard
n cazul n care X, Y i Z-pin ca rezultatele sunt configurate pentru a stabili o logica (1), este necesar s
ateptai doar pentru cerere care ajunge la nici un buton de presa. Prin combinarea zero-uri i unitile de
pe aceste iesiri se verifica care push-buton este apasat.
PIN RB0/INT
RB0/INT de PIN-ul este un singur "true" interrupt surs extern. Acesta poate fi configurat pentru a
reaciona la creterea gradului de margine de semnal (zero-la-unu de tranziie) sau de semnal care se
ncadreaz Edge (unu-la-zero n tranziie). INTEDG de bii din registrul OPTION_REG selecteaza semnal.
RB6 i RB7-pin
Ai observat c, probabil, microcontroler PIC16F887 nu are nici un pin speciale pentru programare (scris,
programul de la ROM). Deoarece porturile pin disponibile ca scop general I / O-pin n timpul normal de
funcionare sunt folosite pentru aceasta. Acesta este, de fapt, despre portul B-pin folosit pentru ceas (RB6)
i date (RB7) transferul n timpul programului de ncrcare. n plus, este necesar s se aplice de alimentare
de tensiune Vdd (5V) i Vss (0V), precum i pentru memorie flash de tensiune de programare Vpp (12-
14V). n perioada de programare, tensiune Vpp este aplicat pe MCLR PIN. Toate detaliile privind acest
proces, precum i pe care una dintre aceste tensiuni se aplic sunt alturi de primul punct. Programator
Electronics este responsabil de asta. Ideea e ca programul s poat fi ncrcate cu microcontroler, este
chiar la soldered int n dispozitiv. n mod normal, ncrcate de asemenea, programul poate fi schimbat
n acelai mod. Aceast funcie se numete ICSP (In-Circuit Serial Programming). Este necesar de a
planului de urmat n viitor la utilizarea acestuia.
Microcontrolere PIC - De a A la Z

37


Nu este complicat deloc! Este necesar doar s instalai 4-pin conector n int de dispozitiv, astfel nct
este necesar programator tensiuni pot fi aplicate pentru a microcontroller. In cazul in care aceste tensiuni
interfereze cu alte electronice de dispozitiv, s se ocupe de aceast conexiune de rupere (folosind rezistoare
sau jumperii).

n ceea ce privete programator, aceste tensiuni se aplica la soclu pin, n care microcontroller este de a fi
plasate.
Port C i TRISC Register
Port C este de 8 bii larga, de port bidirecional. Biti de TRISC registru determin funcia de pin. Similar
cu alte porturi, un o logica (1) n registrul TRISC configureaz corespunztor ca pin de port de intrare.

Fig. 3-12 Port C i TRISC Register
Toate funcii suplimentare de bii, acest port va fi explicat mai trziu.
Port D i TRISD Register
Microcontrolere PIC - De a A la Z

38

Port D este de 8 bii larga, de port bidirecional. Biti de TRISD registru determin funcia de pin. O
logica unul (1) n registrul TRISD configureaz corespunztor ca pin de port de intrare.

Fig. 3-13 Port D i TRISD Register
Port E i TRISE Register
Port E este un 4-bit larga, de port bidirecional. TRISE's registru de bii, determin funcia de pin. Similar
cu alte porturi, un o logica (1) n registrul TRISE configureaz corespunztor ca pin de port de intrare.
Excepia este RE3, care este doar de intrare i TRIS bii este intotdeauna citit ca "1".

Fig. 3-14 Port E i TRISE Register
Similare n porturi, A i B, trei-pin poate fi configurat ca intrri analogice, n acest caz. ANSELH registru
de bii determina dac un PIN va aciona n calitate de analogic de intrare (o) sau digitale de intrare / ieire:
RE0 = AN5 (determinat de bii ANS5 a ANSELregister)
Microcontrolere PIC - De a A la Z

39

RE1 = AN6 (determinat de bii ANS6 a ANSELregister)
RE2 = AN7 (determinat de bii ANS7 a ANSELregister)
ANSEL i ANSELH Registre
ANSEL de ANSELH i registre sunt utilizate pentru a configura modul de introducere a unui I / O de
aderen la digitale sau analogice.

Fig. 3-15 ANSEL i ANSELH Registre
Regula este:
Pentru a configura un PIN ca analogic de intrare, este necesar de bii de ANSEL sau ANSELH registre
trebuie s fie setat (1). Pentru a configura de aderen dup cum digitale de intrare / ieire, corespunztoare
de bii trebuie s fie eliminate (0).
Starea de ANSEL de bii nu afecteaz n funciile de ieire digital. In afara de aceasta, rezultatul oricrei
ncercri de a citi unele configurat ca pin de port analogic de intrare va fi de 0.

Fig. 3-16 ANSEL i ANSELH de configurare
Microcontrolere PIC - De a A la Z

40

Pe scurt:
Probabil c va mai scrie unele programe care nu utilizeaz porturile deci efortul pe care le facei pentru a
nelege funcionarea lor, cu siguran, va dea roade. Cu toate acestea, ele sunt, probabil, cea mai simpl,
n cadrul modulelor de microcontroler. Acesta este modul n care acestea sunt utilizate:
La proiectarea unui dispozitiv, selectai portul prin care va comunica cu microcontroler periferice
mediu. Dac folosii doar digitale intrrile / ieirile, selectai orice port vrei tu. Dac folosii unele
dintre intrrile analogice, selectai unele dintre aceste porturi justificative pin de configurare (AN0-
AN13).
Fiecare port de aderen poate fi configurat ca intrare sau de ieire. Biti de TRISA, TRISB,
TRISC, TRISD i TRISE registre determina modul n care este necesar pin-porturi Porta, PORTB,
PORTC, PORTD i PORTE va aciona. Pur i simplu ...
Dac folosii unele dintre intrrile analogice, set de bii, este necesar de a ANSEL i ANSELH
registrele de la nceputul programului.
Dac utilizai i comutatoare push-butoane ca sursa de semnal de intrare, conectarea lor la portul
B-pin pentru c au rezistene pull-up. Folosirea acestor rezistene este activat de ctre bit RBPU a
OPTION_REG registru, ntruct individuale de rezistene de instalare este activat de ctre biii de
WPUB registru.
Acesta este, de obicei, este necesar de a reaciona de ndat ce pin de intrare si schimba logica de
stat. Cum niciodat, nu este necesar s se scrie un program de schimbare pin 'logica de stat. Este
de departe mai simple pentru a se conecta la astfel de factori de producie i de a permite PORTB
pin ntrerupere la fiecare schimbare de tensiune. Biti de registrele IOCOB i INTCON sunt
responsabili de asta.





CAPITOLUL 4: TIMP

The timers of PIC16F887 microcontroller may be briefly described in only one sentence. n timp de
microcontroler PIC16F887 poate fi descris pe scurt n doar o singur propoziie. There are three
completely independent timers/counters marked as TMR0, TMR1 and TMR2. Exist trei complet
independent de timp / contoare marcate ca TMR0, TMR1 i TMR2. But thats not all so simple... Dar asta
nu e tot atat de simplu ...
Timer TMR0 Timer TMR0
The timer TMR0 has a wide range of applications in practice. Timer-TMR0 are o gam larg de aplicaii n
practic. Only few programs do not use it in some way. Doar cateva programe nu-l utilizai ntr-un fel.
Even simple, it is very convenient and easy to use for writing program or subroutine for generating pulses
Microcontrolere PIC - De a A la Z

41

of arbitrary duration, time measurement or counting external pulses (events) almost with no limitations.
Chiar i simpl, este foarte convenabila si usor de utilizat pentru scrierea programului sau subroutine pentru
generarea de impulsurile de arbitrare durata, timp de msurare sau de numrare a impulsurile externe
(evenimente) cu aproape nu limitri.
The timer TMR0 module is an 8-bit timer/counter with the following features: Timer-TMR0 modul este de
8 bii, timer / counter, cu urmtoarele caracteristici:
8-bit timer/counter register 8 bii timer / counter registru
8-bit prescaler (shared with Watchdog timer) 8 bii prescaler (partajat cu Watchdog Timer)
Programmable internal or external clock source Programabile interne sau externe, sursa de ceas
Interrupt on overflow ntreruperea pe overflow
Programmable external clock edge selection Programabile externe ceas marginea de selecie
Figure below represents the timer TMR0 schematic with all bits which determine its operation. Figura de
mai jos reprezinta Timer TMR0 schematic cu toi biii care determina functionarea acesteia. These bits are
stored in the OPTION_REG register. Aceti bii sunt stocate n OPTION_REG registru.

Fig. 4-1 Timer TMR0 4-1 Timer TMR0


Microcontrolere PIC - De a A la Z

42

OPTION_REG Register OPTION_REG Register

Fig. Fig. 4-2 OPTION_REG Register 4-2 OPTION_REG Register
RBPU - PORTB Pull-up enable bit RBPU - PORTB Pull-up permite bii
o 1 - PORTB pull-up resistors are disabled. 1 - PORTB rezistene pull-up, sunt dezactivate.
o 2 - PORTB pins can be connected to pull-up resistors. 2 - PORTB pin poate fi conectat la
rezistene pull-up.
INTEDG - Interrupt Edge Select bit INTEDG - Interrupt Edge Select bit
o 1 - Interrupt on rising edge of INT pin (0-1). 1 - ntreruperea n cretere pe marginea INT
pin (0-1).
o 2 - Interrupt on falling edge of INT pin (1-0). 2 - ntreruperea care se ncadreaz pe
marginea INT pin (1-0).
T0CS - TMR0 Clock Select bit T0CS - Ceas TMR0 Selectai bii
o 1 - Pulses are brought to TMR0 timer/counter input through the RA4 pin. 1 - Pulses sunt
aduse la TMR0 timer / counter intrare prin RA4 PIN.
o 2 - Internal cycle clock (Fosc/4). 2 - intern ciclu de ceas (fosc / 4).
T0SE - TMR0 Source Edge Select bit T0SE - TMR0 Source Edge Select bit
o 1 - Increment on high-to-low transition on TMR0 pin. 1 - Increment cu grad ridicat de-a
redus de tranziie de la TMR0 PIN.
o 2 - Increment on low-to-high transition on TMR0 pin. 2 - Increment pe sczut-nalt de
tranziie pentru a-pe TMR0 PIN.
PSA - Prescaler Assignment bit PSA - Prescaler Assignment bit
o 1 - Prescaler is assigned to the WDT. 1 - Prescaler este alocat pentru WDT.
o 2 - Prescaler is assigned to the TMR0 timer/counter. 2 - Prescaler este alocat la TMR0 timer
/ counter.
PS2, PS1, PS0 - Prescaler Rate Select bit PS2, PS1, PS0 - Selectie Prescaler Rata de bii
o Prescaler rate is adjusted by combining these bits. Prescaler rata este ajustat prin
combinarea acestor bii.
As seen in the table, the same combination of bits gives different prescaler rate for Dup
cum se vede n tabel, aceeai combinaie de bii ofer diferite prescaler rata de
the timer/counter and watch-dog timer respectively. timer / counter-cine i privii Timer
respectiv.
Microcontrolere PIC - De a A la Z

43

PS2 PS2 PS1 PS1 PS0 PS0 TMR0 TMR0 WDT WDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
The function of the PSA bit is shown in figures below: Funcia de PSA de bii este inclus n cifrele de mai
jos:

Fig. 4-3 The function of the PSA bit 0 4-3 Funcia de bii PSA 0
Microcontrolere PIC - De a A la Z

44


Fig. 4-4 The function of the PSA bit 1 4-4 Funcia de bii PSA 1
As seen, the logic state of the PSA bit determines whether the prescaler is to be assigned to the
timer/counter or watch-dog timer. Aa cum se vede, logica de stat a PSA de bii determin dac prescaler
este de a fi atribuite timer / counter-cine sau a urmri Timer.
In addition to above mentioned, this is also useful to know: n plus fa de mai sus menionat, de asemenea,
acest lucru este util s cunoasc:
When the prescaler is assigned to the timer/counter, any write to the TMR0 register will clear the
prescaler. Cnd prescaler este alocat timer / counter, orice scrie la TMR0 registru va terge
prescaler.
When the prescaler is assigned to watch-dog timer, a CLRWDT instruction will clear both the
prescaler and WDT. Cnd prescaler este alocat pentru a viziona-timer-cine, o instruciunea
CLRWDT va terge att prescaler i WDT.
When writing to the TMR0 register used as a timer, will not cause the pulse counting to start
immediately, but with two instruction cycles delay. Cnd scris la TMR0 utilizat ca un registru
cronometrul, nu va cauza pulsul numrare pentru a ncepe imediat, dar cu ntrziere de dou cicluri
de instruire. In accordance to that, it is necessary to adjust the value written to the TMR0 register.
n conformitate cu faptul c, este necesar s se ajusteze valoarea TMR0 scris in registru.
When the microcontroller is setup in sleep mode, the oscillator is turned off. Cnd microcontroller
este de configurare n modul Repaus, oscilatorul este oprit. Overflow cannot occur since there are
no pulses to count. Overflow nu poate aprea deoarece nu exist impulsurile de a conta. That is why
the TMR0 overflow interrupt cannot wake up the processor from Sleep mode. Acesta este motivul
pentru care TMR0 overflow ntrerupe nu poate trezim cu procesor de la modul sleep.
When used as external clock counter without prescaler, a minimal pulse length or a pause between
two pulses must be 2 Tosc + 20 nS. Cnd este utilizat ca ceas counter externe, fr prescaler, o
Microcontrolere PIC - De a A la Z

45

lungime minim pulsul sau o pauz ntre dou trebuie s fie impulsurile 2 Tosc + 20 ns. Tosc is
oscillator signal period. Tosc oscilatorul este perioada semnalului.
When used as external clock counter with prescaler, a minimal pulse length or a pause between two
pulses is 10nS. Cnd este utilizat ca extern cu ceas counter prescaler, o lungime minim pulsul sau
o pauz ntre dou impulsurile este 10nS.
8-bit prescaler register is not available to the user, which means that it cannot be directly read or
written. 8 bii prescaler registru nu este disponibil pentru utilizator, ceea ce nseamn c nu poate fi
citit direct sau scrise.
When changing the prescaler assignment from the TMR0 to the watch-dog timer, the following
instruction sequence must be executed in order to avoid reset: Cnd schimbarea prescaler atribuire
de la TMR0 la watch-dog timer, urmtoarea secven de instruciuni trebuie s fie executate n
scopul de a evita resetai:
BANKSEL TMR0 CLRWDT ;CLEAR WDT CLRF TMR0 ;CLEAR TMR0
AND PRESCALER BANKSEL OPTION_REG BSF OPTION_REG,PSA ;PRESCALER IS ASSIGNED TO
THE WDT CLRWDT ;CLEAR WDT MOVLW b11111000 ;SELECT BITS
PS2,PS1,PS0 AND CLEAR ANDWF OPTION_REG,W ;THEM BY INSTRUCTION LOGICAL AND
IORLW b00000101 ;BITS PS2, PS1, AND PS0 SET MOVWF OPTION_REG ;PRESCALER
RATE TO 1:32 BANKSEL TMR0 CLRWDT; EVIDENTE WDT CLRF TMR0; EVIDENTE TMR0 I PRESCALER
BANKSEL OPTION_REG BSF OPTION_REG, PSA; PRESCALER ESTE repartizate pentru WDT CLRWDT;
EVIDENTE WDT MOVLW b'11111000 '; SELECT BITS PS2, PS1, PS0 i clar ANDWF OPTION_REG,
W; Acestora de ctre instruciunea "logic i" IORLW b'00000101 '; BITS PS2, PS1, I
PS0 SET MOVWF OPTION_REG; PRESCALER VALUTAR LA 1:32
Otherwise, when changing the prescaler assignment from the WDT to the TMR0, the following
instruction sequence must be executed: Altfel, atunci cnd schimbarea prescaler atribuire de la
WDT la TMR0, urmtoarea secven de instruciuni trebuie s fie executate:
BANKSEL TMR0 CLRWDT ;CLEAR WDT AND PRESCALER BANKSEL OPTION_REG
MOVLW b11110000 ;SELECT ONLY BITS PSA,PS2,PS1,PS0 ANDWF OPTION_REG,W
;CLEAR THEM AFTERWARDS BY INSTRUCTION ;LOGICAL AND IORLW
b00000011 ;PRESCALER RATE IS 1:16 MOVWF OPTION_REG BANKSEL TMR0 CLRWDT;
EVIDENTE WDT I PRESCALER BANKSEL OPTION_REG MOVLW b'11110000 '; selectai numai BITS
PSA, PS2, PS1, PS0 ANDWF OPTION_REG, W; EVIDENTE le ulterior de instruire; "logic i"
IORLW b'00000011'; PRESCALER rata este 1:16 MOVWF OPTION_REG
In order to use TMR0 properly, it is necessary: n scopul de a utiliza corect TMR0, este necesar:
To select mode: Pentru a selecta modul:
Timer mode is selected by the T0CS bit of the OPTION_REG register, (T0CS: 0=timer,
1=counter). Mod Timer este selectat de ctre bit T0CS a OPTION_REG registru, (T0CS: 0 =
Timer, 1 = counter).
When used, the prescaler should be assigned to the timer/counter by clearing the PSA bit of the
OPTION_REG register. Cnd este utilizat, prescaler ar trebui s fie repartizate pentru timer /
counter de compensare a PSA de bii din registrul OPTION_REG. The prescaler rate is set by using
the PS2-PS0 bits of the same register. Rata de prescaler este stabilit prin utilizarea PS2-PS0 biii de
acelai registru.
When using interrupt, the GIE and TMR0IE bits of the INTCON register should be set. Cnd
utilizai ntrerup, GIE i TMR0IE biii din registrul INTCON ar trebui s fie stabilite.
Microcontrolere PIC - De a A la Z

46

To measure time: Pentru a msura timpul:
Reset the TMR0 register or write some well-known value to it. Resetai TMR0 registru sau scrie
unele bine cunoscute, valoare la acesta.
Elapsed time (in microseconds when using quartz 4MHz) is measured by reading the TMR0
register. Timp rmas (n microsecunde, atunci cnd folosete cuar 4MHz) este msurat prin citirea
TMR0 registru.
The flag bit TMR0IF of the INTCON register is automatically set every time the TMR0 register
overflows. De pavilion de bii INTCON, TMR0IF de registru este setat automat de fiecare dat de
TMR0 surplusului de registru. If enabled, an interrupt occurs. Dac activat, se produce o
ntrerupere.
To count pulses: Pentru a conta impulsurile:
The polarity of pulses are to be counted is selected on the RA4 pin are selected by the TOSE bit of
the OPTION register (T0SE: 0=positive, 1=negative pulses). De polaritate de impulsurile sunt
numrate este de a fi selectate pe RA4 de aderen sunt selectate de ctre TOSE pic de opiunea de
registru (T0SE: 0 = pozitiv, 1 = impulsurile negative).
Number of pulses may be read from the TMR0 register. Numrul de impulsurile poate fi citit de la
TMR0 registru. The prescaler and interrupt are used in the same way as in timer mode. Prescaler i
de ntrerupere sunt utilizate n acelai mod ca i n modul timer.
Timer TMR1 Timer TMR1
Timer TMR1 module is a 16-bit timer/counter, which means that it consists of two registers (TMR1L and
TMR1H). Timer TMR1 este un modul 16-bit timer / counter, ceea ce nseamn c este alctuit din dou
registre (TMR1L i TMR1H). Because of that, it can count up 65.535 pulses in a single cycle, ie before the
counting starts from zero. Din cauza c, poate conta pn 65,535 impulsurile ntr-un singur ciclu, adic
nainte de numrare a ncepe de la zero.

Fig. Fig. 4-5 Timer TMR1 4-5 Timer TMR1
Similar to the timer TMR0, these registers can be read or written at any moment. Similare pentru a timer-
TMR0, aceste registre pot fi citite sau scrise n orice moment. In case overflow occurs, an interrupt is
generated. n cazul n care se produce overflow, o ntrerupere este generat.
The timer TMR1 module may operate in one of two basic modes- as a timer or a counter. n modul timer-
TMR1 pot s opereze n dou moduri de baz-timer sau ca o contra. However, unlike the timer TMR0,
each of these modules has additional functions. Cu toate acestea, spre deosebire de Timer TMR0, fiecare
din aceste module are funcii suplimentare.
Microcontrolere PIC - De a A la Z

47

Bits of the T1CON register are in control of the operation of the timer TMR1. Biti de T1CON sunt n
registrul de control al funcionrii timer-TMR1.

Fig. 4-6 Timer TMR1 Overview 4-6 Timer TMR1 Prezentare general
Timer TMR1 Prescaler Timer TMR1 Prescaler
Timer TMR1 has an completely separate prescaler which allows 1, 2, 4 or 8 divisions of the clock input.
Timer TMR1 nu are nc un complet separate prescaler care permite 1, 2, 4 sau 8 divizii de ceas de intrare.
The prescaler is not directly readable or writable. De prescaler nu este direct de citit sau de scriere.
However, the prescaler counter is automatically cleared upon write to the TMR1H or TMR1L register. Cu
toate acestea, prescaler contra este n mod automat eliminate la scrie la TMR1H sau TMR1L registru.
Timer TMR1 Oscillator Timer TMR1 Oscilator
RC0/T1OSO and RC1/T1OSI pins are used to register pulses coming from peripheral electronics, but also
have additional function. RC0/T1OSO i RC1/T1OSI pin sunt utilizate pentru a inregistra impulsurile
provenite de la periferice, electrocasnice, dar au, de asemenea, funcia suplimentare. As seen in figure, they
are simultaneously configured as both input (pin RC1) and output (pin RC0) of the additional LP quartz
oscillator (low power). Dup cum se vede n figur, n care sunt simultan att configurat ca intrare (PIN
RC1) i ieire (PIN RC0) de suplimentare LP cuar oscilatorul (nivel sczut de putere).
This additional circuit is primarily designed for operating at low frequencies (up to 200 KHz), more
precisely, for using 32,768 KHz quartz crystal. Aceast suplimentare de circuit este n primul rnd proiectat
pentru care opereaz la frecvene joase (pn la 200 Khz), mai precis, pentru utilizarea 32768 KHz cristal
de cuar. Such crystal is used in quartz watches because it is easy to obtain one-second-long pulses by
simple dividing this frequency. Astfel de cristal de cuar este folosit n ceasuri, pentru c este uor de a
obine un lung-a doua impulsurile de simplu mprind aceast frecven.
Microcontrolere PIC - De a A la Z

48

Since this oscillator does not depend on internal clock, it can operate even in sleep mode. Din acest
oscilatorul nu depinde de ceas intern, ea poate funciona, chiar i n modul sleep. It is enabled by setting
the T1OSCEN control bit of the T1CON register. Este activat prin setarea T1OSCEN de bii de control al
T1CON registru. The user must provide a software time delay (a few milliseconds) to ensure proper
oscillator start-up. Utilizatorul trebuie s furnizeze o ntrziere software de timp (cteva milisecunde),
pentru a asigura buna oscilatorul de start-up.

Table below shows recommended values of capacitor which is along with quartz part of the oscillator.
Tabelul de mai jos arat valorile recomandate de condensator, care este, mpreun cu cuar parte din
oscilatorul. These values do not have to be exact. Aceste valori nu trebuie s fie exact. However, the
general rule is: the higher capacitor capacity the higher stability, which at the same time prolongs time
needed for the stabilization of oscillator Cu toate acestea, regula general este: cu ct este mai mare
condensator de capacitate mai mare de stabilitate, care, n acelai timp, prelungete timpul necesar pentru
stabilizarea de oscilatorul
Timer TMR1 Gate Timer TMR1 Poarta
Timer 1 gate source is software configurable to be the T1G pin or the output of comparator C2. Timer 1
este poarta de intrare a sursei software-ului configurabil pentru a fi T1G pin sau ieirea comparator C2.
This gate allows the timer to directly time external events using the logic state on the T1G pin or analog
events using the comparator C2 output. Aceasta poarta de intrare a permite timer timp direct la evenimente
externe, folosind logica de stat pe T1G pin sau analogice, evenimente, folosind C2 comparator de ieire.
Refer to figure above. Referi figura de mai sus. In order to time a signal duration it is sufficient to enable
such gate and count pulses having passed through it. n scopul de a timp, un semnal de durata este
suficient pentru a permite o astfel de poarta si conta impulsurile care au trecut prin ea.
TMR1 in timer mode TMR1 n modul timer -
In order to select this mode, it is necessary to clear the TMR1CS bit. Pentru a selecta acest mod, este
necesar s se clarifice TMR1CS bii. After that, the 16-bit register will be incremented on every pulse
coming from the internal oscillator. Dup aceasta, cele 16 de bii registru va fi incremented pe fiecare
pulsul provenind de la oscilatorul intern. In case 4MHz quartz crystal is in use, it will be incremented every
microsecond. In cazul in care 4MHz cristal de cuar este n uz, el va fi incremented fiecare microsecond.
In this mode, the T1SYNC bit does not affect the timer because it counts internal clock pulses. n acest
mod, T1SYNC de bii nu afecteaz Timer conteaz, deoarece impulsurile de ceas intern. Since the whole
Microcontrolere PIC - De a A la Z

49

electronics uses these pulses, there is no need for synchronization. Deoarece ntregul electronic utilizeaz
aceste impulsurile, nu este nevoie de sincronizare.

Fig. Fig. 4-8 TMR1 in timer mode 4-8 TMR1 n modul timer -
The microcontrollers clock oscillator does not run during sleep mode so the timer register overflow cannot
cause any interrupt. Circuitul microcontroller este oscilatorul de ceas nu se execut n modul sleep, astfel
nct overflow Timer registru nu poate cauza nici o ntrerupere.
Timer TMR1 Oscillator Timer TMR1 Oscilator
The power consumption of microcontroller is reduced to the lowest level in Sleep mode. Puterea de
consum de microcontroler se reduce la cel mai sczut nivel n modul sleep. The point is to stop oscillator.
Ideea e de a opri oscilatorul. Anyway, it is easy to set the timer in this mode- by writing SLEEP instruction
to the program. Oricum, este uor de setat timer-n acest mod de instruire pentru a dormi scris acest
program. A problem occurs when it is necessary to wake up the microcontroller because only interrupt can
do that. O problem apare atunci cnd este necesar s se trezeasc microcontroller ntrerupe doar pentru c
pot face asta. Since the microcontroller sleeps, an interrupt must be triggered by external electronics. De
la microcontroler "doarme", o ntrerupere trebuie s fie declanat de externe electronica. All gets incredibly
complicated if it is necessary the wake up occurs at regular time intervals... Toate devine incredibil de
complicat, dac este necesar "trezim" apare la intervale regulate de timp ...
Microcontrolere PIC - De a A la Z

50


Fig. Fig. 4-9 Timer TMR1 Oscillator 4-9 Timer TMR1 Oscilator
In order to solve this problem, a completely independent Low Power quartz oscillator able to operate in
sleep mode is built in the PIC16F887 microcontroller. Pentru a rezolva aceast problem, un complet
independent de slaba putere de cuar oscilatorul capabile s funcioneze n modul Repaus este construit in
microcontroler PIC16F887. Simply, what previously has been separate circuit, it is now built in the
microcontroller and assigned to the timer TMR1. Pur i simplu, ceea ce anterior a fost separat de circuit,
acum este construit n microcontroler i atribuite timer TMR1. The oscillator is enabled by setting the
T1OSCEN bit of the T1CON register. De oscilatorul este activat prin setarea de T1OSCEN bii de
T1CON registru. After that, the TMR1CS bit of the same register is used to determine that the timer TMR1
uses pulse sequence from that oscillator. Dup aceea, TMR1CS pic de acelai registru este folosit pentru a
determina care timer-TMR1 utilizeaz secvena de la care pulse oscillator. Further procedure depends on
the users needs. Mai multe procedura depinde de nevoile utilizatorului.
The signal from this quartz oscillator is synchronized with the microcontroller clock by clearing the
T1SYNC bit. Semnalul de la acest cuar oscilatorul este sincronizat cu microcontroler, ceas de
compensare a T1SYNC bii. In that case, the timer cannot operate in sleep mode. n acest caz,
Timer nu pot funciona n modul sleep. You wonder why? V ntreb de ce? Because the circuit for
synchronization uses the clock of microcontroller! Deoarece circuitul de sincronizare foloseste
ceasul de microprocesoare!
The TMR1 register overflow interrupt may be enabled. TMR1 overflow registru de ntrerupere
poate fi activat. Such interrupt will occur in sleep mode as well. Aceast ntrerupere va aprea n
modul Repaus, de asemenea.
TMR1 in counter mode TMR1 n modul de a contracara
Timer TMR1 starts to operate as a counter by setting the TMR1CS bit. Timer TMR1 ncepe s funcioneze
ca un contor de stabilire a TMR1CS bii. It means that the timer TMR1 is incremented on the rising edge of
the external clock input T1CKI. Aceasta nseamn c timer-TMR1 este n cretere incremented pe
marginea extern de ceas de intrare T1CKI. Besides, if control bit T1SYNC of the T1CON register is
cleared, the external clock inputs will be synchronized on their way to the TMR1 register. In afara de
aceasta, dac T1SYNC bii de control al T1CON registru este golit, externe, intrrile de ceas va fi
Microcontrolere PIC - De a A la Z

51

sincronizate pe drum la TMR1 registru. In other words, the timer TMR1 is synchronized to the
microcontroller system clock and called a synchronous counter therefore. Cu alte cuvinte, Timer TMR1
este sincronizat cu ceasul de sistem microcontroler i a cerut o contra, prin urmare, sincron.
When the microcontroller ,operating in this way, is set in sleep mode, the TMR1H and TMR1L timer
registers are not incremented even though clock pulses appear on input pins. Cnd microcontroler, care
opereaz n acest fel, este setat n modul Repaus, TMR1H i TMR1L Timer registre nu sunt incremented
chiar dac apar pe ceas impulsurile de intrare-pin. Simply, since the microcontroller system clock does not
run in this mode, there are no clock inputs to use for synchronization. Pur i simplu, deoarece sistemul de
microcontroler ceas nu se execut n acest mod, nu exist factori de ceas s-i utilizai pentru sincronizare.
However, the prescaler will continue to run if there are clock pulses on the pins since it is just a simple
frequency divider. Cu toate acestea, prescaler va continua s fie difuzate, dac exist impulsurile de ceas de
pe insigne, deoarece acesta este doar un simplu frecven divider.

Fig. Fig. 4-10 TMR1 in counter mode 4-10 TMR1 n modul de a contracara

This counter registers a logic one (1) on input pins. Acest counter Inregistreaza un o logica (1) de la intrare
PINS. It is important to know that at least one falling edge must be registered prior to the first increment on
rising edge. Este important s tii c cel puin una care se ncadreaz marginea trebuie s fie nregistrat
nainte de prima increment cretere de pe margine. Refer to figure on the left. Vezi, de la cifra din stnga.
The arrows in figure denote counter increments. Pe sgei n figura denota counter incremente.

Microcontrolere PIC - De a A la Z

52

T1CON Register T1CON Register

Fig. Fig. 4-12 T1CON Register 4-12 T1CON Register
T1GINV - Timer1 Gate Invert bit acts as logic state inverter on the T1G pin gate or the comparator C2
output (C2OUT) gate. T1GINV - Timer1 Poarta Invert bii acioneaz ca logica invertor de stat pe T1G pin
sau de poarta de iesire comparator C2 (C2OUT) poarta. It enables the timer to mea sure time while gate is
high or low. Ea permite timer-v c timp de a mea n timp ce poarta este ridicat sau sczut.
1 - Timer 1 counts when the pin T1G or bit C2OUT gate is high (1). 1 - Timer 1 conteaz atunci
cnd T1G PIN-ul sau C2OUT poarta de bii este mare (1).
0 - Timer 1 counts when the pin T1G or bit C2OUT gate is low (0). 0 - Timer 1 conteaz atunci
cnd PIN-ul sau T1G bii C2OUT poarta este sczut (0).
TMR1GE - Timer1 Gate Enable bit determines whether the pin T1G or comparator C2 output (C2OUT)
gate will be active or not. TMR1GE - Timer1 Poarta Enable bit determin dac PIN-ul sau T1G
comparator C2 ieire (C2OUT) poarta va fi activ sau nu. This bit is functional only in case the timer
TMR1 is on (bit TMR1ON = 1). Acest bit este funcional numai n cazul n care se afl pe TMR1 Timer
(TMR1ON bii = 1). Otherwise, this bit is ignored. Altfel, acest bit este ignorat.
1 Timer TMR1 is on only if timer 1 gate is not active. 1 Timer TMR1 numai dac este pe timer-1
poarta nu este activ.
0 Gate does not affect the timer TMR1. 0 Poarta nu afecteaz Timer TMR1.
T1CKPS1, T1CKPS0 - Timer1 Input Clock Prescale Select bits determine rate of the prescaler assigned to
the timer TMR1. T1CKPS1, T1CKPS0 - Timer1 de intrare Ceas Prescale Selectai determina rata de bii
de prescaler atribuite timer TMR1.
T1CKPS1
T1CKPS1
T1CKPS0
T1CKPS0
Prescaler Rate
Rat Prescaler
0 0 1:1
0 1 1:2
1 0 1:4
1 1 1:8
T1OSCEN - LP Oscillator Enable Control bit T1OSCEN - LP Oscilator Activai bii de control
Microcontrolere PIC - De a A la Z

53

1 - LP oscillator is enabled for timer TMR1 clock (oscillator with low power consumption and
frequency 32.768 kHz). 1 - LP oscilatorul este activat pentru ceas TMR1 Timer (oscilatorul cu
consum redus de putere i frecven 32,768 kHz).
0 - LP oscillator is off. 0 - LP oscilatorul este stins.
T1SYNC - Timer1 External Clock Input Synchronization Control bit enables synchronization of the LP
oscillator input or T1CKI pin input with the microcontroller internal clock. T1SYNC - Timer1 externe
Ceas de intrare sincronizare bii de control permite sincronizarea de la LP oscilatorul de intrare sau de
aderen T1CKI intrare cu microcontroler interne de ceas. When counting pulses from the local clock
source (bit TMR1CS = 0), this bit is ignored. Cnd numrare impulsurile de la ceasul de surse locale (de
bii TMR1CS = 0), acest bit este ignorat.
1 - Do not synchronize external clock input. 1 - Nu se sincronizeze ceasul externe de intrare.
0 - Synchronize external clock input. 0 - Sincronizai externe ceas de intrare.
TMR1CS - Timer TMR1 Clock Source Select bit TMR1CS - Ceas Timer TMR1 Sursa Selectai bii
1 - Counts pulses on the T1CKI pin (on the rising edge 0-1) 1 - Considerat impulsurile pe T1CKI
pini (n cretere de pe marginea 0-1)
0 - Counts pulses of the internal clock of microcontroller. 0 - Considerat de impulsurile de ceas
intern de microcontroler.
TMR1ON - Timer1 On bit TMR1ON - Timer1 Pe de bii
1 - Enables Timer TMR1. 1 - Activeaz Timer TMR1.
0 - Stops Timer TMR1. 0 - Stops Timer TMR1.
In order to use the timer TMR1 properly, it is necessary to perform the following: n scopul de a folosi
timer-TMR1 corect, este necesar s efectuai urmtoarele:
Since it is not possible to turn off the prescaler, its rate should be adjusted by using bits T1CKPS1
and T1CKPS0 of the register T1CON (Refer to the table). Deoarece nu este posibil s se opreasc
prescaler, rata ar trebui s fie ajustate prin utilizarea T1CKPS1 bii i T1CKPS0 a registrului
T1CON (Consultai tabelul).
After that, the mode should be selected by the TMR1CS bit of the same register (TMR1CS: 0= the
clock source is quartz oscillator, 1= the clock source is supplied externally). Dup aceea, modul ar
trebui s fie selectate de ctre TMR1CS pic de acelai registru (TMR1CS: 0 = sursa de ceas este
oscilatorul cuar, 1 = ceasul surs este furnizat extern).
By setting the T1OSCEN bit of the same register, the timer TMR1 is turned on and the TMR1H and
TMR1L registers are incremented on every clock input. Prin stabilirea T1OSCEN pic de acelai
registru, timer TMR1 este activat i TMR1H i TMR1L registre sunt incremented pe ceas la
fiecare intrare. Counting stops by clearing this bit. Numrare de ctre staiile de compensare acest
bii.
The prescaler is cleared by clearing or writing the counter registers. De prescaler este autorizat de
scris sau de compensare a contracara registre.
By filling both timer registers, the flag TMR1IF is set and counting starts from zero. Prin
completarea Timer ambele registre, pavilionul TMR1IF este stabilit i care pornete de la zero.
Microcontrolere PIC - De a A la Z

54

Timer TMR2 Timer TMR2
Timer TMR2 module is an 8-bit timer which operates in a bit specific way. Timer TMR2 modul este de 8-
bit Timer care funcioneaz ntr-un anumit mod de bii.

Fig. Fig. 4-13 Timer TMR2 4-13 Timer TMR2
The pulses from quartz oscillator first pass through the prescaler whose rate may be changed by combining
the T2CKPS1 and T2CKPS0 bits. Impulsurile de cuar de la oscilatorul prima trec prin prescaler a cror
rat poate fi schimbat prin combinarea a T2CKPS1 i T2CKPS0 bii. The output of the prescaler is then
used to increment the TMR2 register starting from 00h. Datele de ieire ale prescaler este apoi folosit
pentru a nregistra creteri de TMR2 incepand de la 00h. The values of TMR2 and PR2 are constantly
compared and the TMR2 register keeps on being incremented until it matches the value in PR2. Valorile
TMR2 i PR2 sunt constant comparativ i TMR2 ine registrul privind fiind incremented pn cnd se
potrivete cu valoarea din PR2. When a match occurs, the TMR2 register is automatically cleared to 00h.
Cnd apare un meci, TMR2 registru este golit automat la 00h. The timer TMR2 postscaler is incremented
and its output is used to generate an interrupt if it is enabled. Timer-TMR2 postscaler este incremented i
ieirile lui este folosit pentru a genera o ntrerupere dac aceasta este activat.
The TMR2 and PR2 registers are both fully readable and writable. De TMR2 i PR2 ambele registre sunt
pe deplin de citit i de scriere. Counting may be stopped by clearing the TMR2ON bit, which contributes to
power saving. Numrare poate fi oprit de compensare a TMR2ON bii, care contribuie la economisire a
energiei.
As a special option, the moment of TMR2 reset may be also used to determine synchronous serial
communication baud rate. Ca o opiune, n momentul de TMR2 de resetare poate fi de asemenea utilizat
pentru a determina serial de comunicaie sincrone rata baud.
The timer TMR2 is controlled by several bits of the T2CON register. Timer-TMR2 este controlat de ctre
mai muli bii din registrul T2CON.
Microcontrolere PIC - De a A la Z

55


Fig. Fig. 4-14 T2CON register 4-14 registrul T2CON
TOUTPS3 - TOUTPS0 - Timer2 Output Postcaler Select bits are used to determine postscaler rate
according to the following table: TOUTPS3 - TOUTPS0 - Timer2 de iesire Postcaler Selectai bii sunt
folosite pentru a determina rata de postscaler n conformitate cu urmtorul tabel:
TOUTPS3
TOUTPS3
TOUTPS2
TOUTPS2
TOUTPS1
TOUTPS1
TOUTPS0
TOUTPS0
Prescaler Rate
Rat Prescaler
0 0 0 0 1:1
0 0 0 1 1:2
0 0 1 0 1:3
0 0 1 1 1:4
0 1 0 0 1:5
0 1 0 1 1:6
0 1 1 0 1:7
0 1 1 1 1:8
1 0 0 0 1:9
1 0 0 1 1:10
1 0 1 0 1:11
1 0 1 1 1:12
1 1 0 0 1:13
1 1 0 1 1:14
1 1 1 0 1:15
1 1 1 1 1:16
TMR2ON - Timer2 On bit turns the timer TMR2 on. TMR2ON - Timer2 Pe de bii se transform timer
TMR2.
1 - Timer T2 is on. 1 - Timer T2 este pe.
0 - Timer T2 is off. 0 - Timer T2 este stins.
Microcontrolere PIC - De a A la Z

56

T2CKPS1, T2CKPS0 - Timer2 Clock Prescale bits determine prescaler rate: T2CKPS1, T2CKPS0 -
Timer2 Ceas Prescale determina prescaler rat de bii:
T2CKPS1
T2CKPS1
T2CKPS0
T2CKPS0
Prescaler Rate
Rat Prescaler
0 0 1:1
0 1 1:4
1 x 1:16
When using the TMR2 timer, one should know several specific details that have to do with its registers:
Cnd utilizai TMR2 Timer, una ar trebui s tie mai multe detalii specifice cu care au de a face cu
registrele sale:
Upon the power is on, the PR2 register contains the value FFh. La putere este, de PR2 registru
conine valoarea FFh.
Both prescaler and postscaler are cleared by writing to the TMR2 register. Ambele prescaler i
postscaler sunt eliminate prin scris, TMR2 registru.
Both prescaler and postscaler are cleared by writing to the T2CON register. Ambele prescaler i
postscaler sunt eliminate prin scris, la registrul T2CON.
On any reset - you guess, both prescaler and postscaler are cleared. Pe orice reset - ai ghicit,
prescaler i postscaler ambele sunt debifate.










Microcontrolere PIC - De a A la Z

57


CAPITOLUL 5: CCP MODULE

The abbreviation CCP stands for Capture/Compare/PWM . Standuri de CCP Abrevierea pentru Capture /
Compare / PWM.
The Capture/Compare/PWM module is a peripheral which allows the user to time and control different
events. De Captura / Compare / PWM modul este un periferic care permite utilizatorului s timp i de
control diferite evenimente.
In Capture Mode , the peripheral allows timing of duration of an event. n Capture Mode, periferice
permite durata de timp a unui eveniment. This circuit gives insight into the current state of some register
which constantly changes its value. Acest circuit ofera introspectiv n starea actual a nregistra unele
modificri care constant sa valoare. In this case, it is the timer TMR1 register. n acest caz, este timer-
TMR1 registru.
The Compare Mode compares values contained in two registers at some point. Compara Mod de
compara valorile coninute n dou registre, la un moment dat. One of them is the timer TMR1 register.
Una dintre ele este timer-TMR1 registru. This circuit also allows the user to trigger an external event when
a predetermined amount of time has expired. Acest circuit permite, de asemenea, pentru a declana un
utilizator extern caz, atunci cnd o sum predeterminat de timp a expirat.
PWM - Pulse Width Modulation can generate signals of varying frequency and duty cycle. PWM - Pulse
Width Modulation poate genera semnalele de frecven i diferite taxei ciclu.
The PIC16F887 microcontroller has two such modules - CCP1 and CCP2. De microcontroler PIC16F887
are dou astfel de module - CCP1 i CCP2.
Both of them are identical in normal mode, with the exception of the Enhanced PWM features available on
CCP1 only. Ambele dintre ele sunt identice n modul normal, cu excepia lrgit PWM caracteristici
disponibile numai pe CCP1. That is why this chapter describes the CCP1 module in detail. De aceea, acest
capitol descrie n detaliu modul CCP1. Concerning CCP2, only the features distinguishing it from CCP1
will be covered. n ceea ce privete CCP2, doar caracteristicile distinctive de la CCP1 ea va fi acoperit.
Complicated? Complicate? Believe me, it is still not! Crede-ma, ea este nc nu! All this is only a
simplified explanation on their operation. Toate acestea sunt doar o explicaie simplificat privind
exploatarea acestora. Everything is much more complicated in practice because these modules can operate
in many different modes. Totul este mult mai complicat, n practic, pentru c aceste module poate
funciona n diferite moduri. Try to analyze their operation on the basis of the tables describing bit
functions. ncercai s analizeze funcionarea lor pe baza de tabele care descriu funcii de bii. Do you
understand now what all this is about? Nu ai inteles acum ce este despre toate astea? So save your nerves
and follow a well-intentioned advice: if you use any CCP module, first select the mode you need, analyze
the appropriate figure and then start changing bits of the registers or else... Deci, salvai-v nervii i s
Microcontrolere PIC - De a A la Z

58

urmeze un bine-intentionate sfat: dac utilizai orice modul CCP, n prima, selectai modul de care avei
nevoie, analiza corespunztoare, i apoi cifra de start a schimba registrele de bii, sau altceva ...
CCP1 Module Modulul CCP1
A central part of this circuit is a 16-bit register CCPR1 which consists of the CCPR1L and CCPR1H
registers. Un element central al acestui circuit este un registru de 16 bii CCPR1 care const n CCPR1L i
CCPR1H registre. It is used for capturing or comparing with binary number stored in the timer register
TMR1 (TMR1H and TMR1L). Este folosit pentru capturarea sau in comparatie cu numrul binar stocat n
registrul timer TMR1 (TMR1H i TMR1L).

Fig. 5-1 CCP1 Module Modulul de 5-1 CCP1
In Compare mode, if enabled by software, the timer TMR1 reset may occur on match. Compara n modul,
dac este activat de ctre software-ul, timer TMR1 reseta pot s apar pe meci. Besides, the CCP1 module
can generate PWM signals of varying frequency and duty cycle. Pe langa aceasta, CCP1 modul PWM pot
genera semnalele de frecven i diferite taxei ciclu.
Bits of the CCP1CON register controls the CCP1 module. Biti de CCP1CON registru controleaz modul
CCP1.
CCP1 in Capture mode CCP1 n modul Captur
In this mode, the timer register TMR1 (consisting of TMR1H and TMR1L) is copied to the CCP1 register
(consisting of CCPR1H and CCPR1L) in the following situations: n acest mod, registrul timer TMR1
(constnd din TMR1H i TMR1L) este copiat de CCP1 registru (constnd din CCPR1H i CCPR1L) n
urmtoarele situaii:
Every falling edge (1 0) on the RC2/CCP1 pin. Fiecare marginea care se ncadreaz (1 0) pe
RC2/CCP1 PIN.
Every rising edge (0 1) on the RC2/CCP1 pin. Fiecare rising marginea (0 1), pe de RC2/CCP1
PIN.
Every 4th rising edge (0 1) on the RC2/CCP1 pin. Fiecare rising 4a marginea (0 1), pe de
RC2/CCP1 PIN.
Every 16th rising edge (0 1) on the RC2/CCP1 pin. Fiecare rising 16e marginea (0 1), pe de
RC2/CCP1 PIN.
The combination of four bits (CCP1M3 - CCP1M0) of the control register determines which of these
events will trigger 16-bit data transfer. n combinaie de patru bii (CCP1M3 - CCP1M0) din registrul de
Microcontrolere PIC - De a A la Z

59

control stabilete care dintre aceste evenimente vor atrage 16-bit de transfer de date. In addition, the
following conditions must be met: n plus, urmtoarele condiii trebuie respectate:
RC2/CCP1 pin must be configured as input. RC2/CCP1 de aderen trebuie s fie configurat ca
intrare.
TMR1 module must operate as timer or synchronous counter. TMR1 modul trebuie s funcioneze
ca timer-sincron sau contra.

Fig. 5-2 CCP1 in Capture mode 5-2 CCP1 n modul Captur
The flag bit CCP1IF is set when a capture is made. De pavilion CCP1IF bit este setat, atunci cnd este
fcut o captur. If it happens and if the CCP1IE bit of the PIE register is set then an interrupt occurs. Dac
aceasta se ntmpl i n cazul n care CCP1IE pic de PIE de registru este setat, atunci are loc o
ntrerupere.
When the Capture mode is changed, an undesirable capture interrupt may be generated. Atunci cnd modul
de capturare este de schimbat, un nedorite captur de ntrerupere poate fi generat. In order to avoid that,
both a bit enabling CCP1IE interrupt and flag bit CCP1IF should be cleared prior to any change occurs in
the control register. n scopul de a evita ca, care s permit att un pic CCP1IE ntrerup i pavilionul
CCP1IF bii ar trebui s fie eliminate nainte de a se produce orice schimbare n registrul de control.
Undesirable interrupt may be also generated by switching from one capture prescaler to another. Reacii
ntrerupere poate fi de asemenea generate de trecerea de la o captur de prescaler la altul. To avoid this, the
CCP1 module should be temporarily switched off before changing the prescaler. Pentru a evita acest lucru,
modul de CCP1 ar trebui s fie oprit temporar, nainte de schimbarea prescaler.
The following program sequence is recommended: Urmtoarea secven de program este recomandat:
Microcontrolere PIC - De a A la Z

60

BANKESEL CCP1CON CLRF CCP1CON ;CONTROL REGISTER IS CLEARED
;CCP1 MODULE IS OFF MOVLW XX ;NEW PRESCALER MODE IS SELECTED MOVWF
CCP1CON ;NEW VALUE IS LOADED TO THE CONTROL REGISTER ;CCP1
MODULE IS SIMULTANEOUSLY SWITCHED ON BANKESEL CCP1CON CLRF CCP1CON; CONTROL DE
eliminate; CCP1 modul este OFF MOVLW XX; PRESCALER NEW MODE este selectat MOVWF
CCP1CON; Noua valoare este ncrcat de control registru; CCP1 simultan modul este
pornit
CCP1 in Compare mode CCP1 n mod Compara
In this mode, the value in the CCP1 register is constantly compared to the value in the timer register
TMR1. n acest mod, valoarea n CCP1 registru este constant, comparativ cu valoarea din timer-registru
TMR1. When a match occurs, the output pin RC2/CCP1 logic state may be changed, which depends on the
state of bits in control register (CCP1M3 - CCP1M0). Cnd apare un meci, datele de ieire de aderen
RC2/CCP1 logica de stat poate fi schimbat, care depinde de starea de bii n registrul de control (CCP1M3
- CCP1M0). The flag-bit CCP1IF will be simultaneously set. De pavilion de bii CCP1IF vor fi stabilite n
acelai timp.

Fig. 5-3 CCP1 in Compare mode 5-3 CCP1 n mod Compara
To setup CCP1 module to operate in this mode, two conditions must be met: Pentru a seta modul CCP1 s
funcioneze n acest mod, dou condiii trebuie s fie ndeplinite:
Pin RC2/CCP1 must be configured as output. RC2/CCP1 PIN trebuie s fie configurat ca ieire.
Timer TMR1 must be synchronized with internal clock. Timer TMR1 trebuie s fie sincronizate cu
ceasul intern.
CCP1 in PWM mode CCP1 n mod PWM
Signals of varying frequency and duty cycle have a wide application in automatic. Semnale de diferite
frecvene i obligaia de ciclu au o larg aplicare n automate. A typical example is a power control circuit
Microcontrolere PIC - De a A la Z

61

whose simple way of operation is shown in figure below. Un exemplu tipic este o putere de control al cror
circuit simplu mod de funcionare este prezentat n figura de mai jos. If a logic zero (0) represents switch-
off and logic one (1) represents switchon, power the load obtains will be directly proportional to the pulse
duration. Dac o logica de zero (0) reprezinta trece si off-o logica (1) reprezinta switchon, puterea de a
obine de ncrcare va fi direct proporional cu durata de puls. This ratio is often called Duty Cycle . Acest
sistem este adesea numit Duty Cycle.

Fig. 5-4 CCP1 in PWM mode 5-4 CCP1 n mod PWM
Another example, common in practice, is the usage of PWM signals in the circuit for generating signals of
arbitrary waveform, for example, sinus waveform. Un alt exemplu, comune, n practic, este de folosire a
semnalelor de PWM n circuitul pentru generarea de semnale de arbitrare waveform, de exemplu,
sinusurilor waveform. See figure below: A se vedea figura de mai jos:
Microcontrolere PIC - De a A la Z

62


Fig. 5-5 CCP1 in PWM mode with filtration 5-5 CCP1 n modul PWM cu filtrare
Devices which operate in this way are often used in practice as switching regulators which control the
operation of motors (speed, acceleration, deceleration etc.). Dispozitivele care funcioneaz n acest fel sunt
adesea utilizate n practic, ca trecerea de reglementare care controleaza modul de funcionare a motoarelor
(vitez, acceleraie, deceleration etc.)

Microcontrolere PIC - De a A la Z

63

Fig. Fig. 5-6 PWM module 5-6 modul PWM
The figure above shows block diagram of the CCP1 module setup in PWM mode. Cifra de mai sus arat
diagrama bloc a CCP1 modul de configurare n modul PWM. In order to generate a pulse of arbitrary form
on its output pin, it is necessary to determine only two values- pulse frequency and duration. n scopul de a
genera un puls de arbitrare sale de ieire de pe formularul de pin, este necesar s se stabileasc numai dou
valori-pulse frecvena i durata.

PWM Period Perioada PWM
The output pulse period (T) is specified by the PR2 register of the timer TMR2. Pulse perioad de iesire (T)
este specificat de PR2 registru al timer-TMR2. The PWM period can be calculated using the following
equation: The PWM perioad poate fi calculat utiliznd urmtoarea ecuaie:
PWM Period(T) = (PR2 +1) * 4Tosc * TMR2 Prescale Value PWM Perioada (T) = (PR2 +1) * 4Tosc *
TMR2 Prescale Valoare
If the PWM Period (T) is known then, it is easy to determine the signal frequency F because these two
values are related by equation F=1/T. Dac PWM Perioada (T) este cunoscut, atunci, este uor de a
determina semnal de frecven F, deoarece aceste dou valori sunt legate de ecuaia f = 1 / T.
PWM Duty Cycle PWM Duty Cycle
The PWM duty cycle is specified by using in total of 10 bits: eight MSbs found in the CCPR1L register
and two additional LSbs found in the CCP1CON register (DC1B1 and DC1B0). PWM de taxa ciclu este
specificat folosind n total 10 de bii: opt MSbs gsit n CCPR1L registru i dou suplimentare LSbs gsit
n CCP1CON registru (DC1B1 i DC1B0). The result is 10-bit number contained in the formula: Rezultatul
este de 10 de bii numr cuprinse n formula:
Pulse Width = (CCPR1L,DC1B1,DC1B0) * Tosc * TMR2 Prescale Value Pulse width = (CCPR1L,
DC1B1, DC1B0) * Tosc * TMR2 Prescale Valoare
The following table shows how to generate PWM signals of varying frequency if the microcontroller uses
20 MHz quartz-crystal (Tosc=50nS). Urmtorul tabel arat cum PWM pentru a genera semnalele de
frecven variind n cazul n care utilizeaz microcontroler 20 MHz quartz-crystal (Tosc = 50nS).
Frequency [KHz]
Frecventa [KHz]
1.22 1,22 4.88 4,88 19.53 19,53 78.12 78,12 156.3 156,3 208.3 208,3
TMR2 Prescaler
TMR2 Prescaler
16 4 1 1 1 1
PR2 Register PR2
Register
FFh FFh FFh 3Fh 1Fh 17h
Microcontrolere PIC - De a A la Z

64

At last, two notes: La ultima, dou note:
Output pin will be constantly set in case the pulse width is by negligence determined to be larger
than PWM period. Pin de iesire va fi stabilit constant pulsul, n cazul n care limea este
determinat de neglijena de a fi mai mare dect PWM perioad.
In this application, the timer TMR2 postscaler cannot be used for generating longer PWM periods.
n aceast aplicaie, timer TMR2 postscaler nu poate fi folosit pentru generarea de mai PWM
perioade.
PWM Resolution PWM Rezolutie
PWM signal is nothing but the pulse sequence with varying duty cycle. Semnal PWM este nimic, dar
pulsul secven cu tax, variind de ciclu. For one specified frequency (number of pulses per second), there
is a limited number of duty cycle combinations. Pentru o frecven specificat (numrul de impulsurile pe
secund), exist un numr limitat de taxa ciclu de combinaii. That number is called resolution measured by
bits. Acest numr se numete rezoluie msurat de bii. For example, a 10-bit resolution will result in 1024
discrete duty cycles, whereas an 8-bit resolution will result in 256 discrete duty cycles etc. Concerning this
microcontroller, the resolution is specified by the PR2 register. De exemplu, o rezoluie de 10 bii va avea
ca rezultat datoria de 1024 de cicluri de discret, ntruct o rezoluie 8 bii va avea ca rezultat 256 de cicluri
de taxe vamale etc discret cu privire la acest microcontroler, rezoluia este specificat de PR2 registru. The
maximal value is obtained by writing number FFh. Valoare maxima este numrul obinut prin scris, FFh.
PWM frequencies and resolutions ( Fosc = 20MHz): PWM i frecvenele de rezoluie (fosc = 20MHz):
PWM Frequency
Frecventa PWM
1.22kHz
1.22kHz
4.88kHz
4.88kHz
19.53kHz
19.53kHz
78.12kHz
78.12kHz
156.3kHz
156.3kHz
208.3kHz
208.3kHz
Timer Prescale
Timer Prescale
16 4 1 1 1 1
PR2 Value PR2
Valoare
FFh FFh FFh 3Fh 1Fh 17h
Maximum
Resolution
Rezoluie maxim
10 10 10 8 7 6
PWM frequencies and resolutions ( Fosc = 8MHz): PWM i frecvenele de rezoluie (fosc = 8MHz):
PWM Frequency
Frecventa PWM
1.22kHz
1.22kHz
4.90kHz
4.90kHz
19.61kHz
19.61kHz
76.92kHz
76.92kHz
153.85kHz
153.85kHz
200.0kHz
200.0kHz
Timer Prescale
Timer Prescale
16 4 1 1 1 1
PR2 Value PR2
Valoare
65h 65h 65h 19h 0Ch 09h
Maximum
Resolution
Rezoluie maxim
8 8 8 6 5 5
Microcontrolere PIC - De a A la Z

65

CCP1CON Register CCP1CON Register

Fig. Fig. 5-8 CCP1CON Register 5-8 CCP1CON Register
P1M1, P1M0 - PWM Output Configuration bits - In all modes, excepting PWM, the P1A pin is
Capture/Compare module input. P1M1, P1M0 - iesire PWM Configurare bii - n toate modurile, cu
exceptia PWM, P1A PIN-ul este Captura / Compara modul de intrare. P1B, P1C and P1D pins act as
input/output port D pins. P1B, P1C i P1D pin aciona n calitate de intrare / ieire portul D-pin. In PWM
mode, these bits affect CCP1 module as shown in the table below: n mod PWM, aceti bii CCP1 afecta
modul cum se arat n tabelul de mai jos:
P1M1 P1M1 P1M0 P1M0 Mode Modul de
0 0
PWM with single output PWM cu singur ieire
Pin P1A outputs modulated signal. PIN P1A iesiri
semnal modulate.
Pins P1B, P1C and P1D are port D input/output
Pin P1B, P1C i P1D sunt D port de intrare / ieire
0 1
Full Bridge - Forward configuration Full
Bridge - Inainte de configurare
Pin P1D outputs modulated signal PIN P1D iesiri
semnal modulate
Pin P1A is active PIN P1A este activ
Pins P1B and P1C are inactive Pin P1B i P1C
sunt inactive
1 0
Half Bridge configuration Jumtate Podul de
configurare
Pins P1A and P1B output modulated signal Pin
P1A i P1B modulate semnal de iesire
PinsP1C and P1D are port D input/output PinsP1C
i P1D sunt D port de intrare / ieire
1 1
Full Bridge - Reverse configuration Full Bridge
- Revers de configurare
Pin P1B outputs modulated signal PIN P1B iesiri
semnal modulate
Pin P1C is active P1C de pin este activ
Pins P1A and P1D are inactive Pin P1A i P1D
sunt inactive
Microcontrolere PIC - De a A la Z

66

DC1B1, DC1B0 - PWM Duty Cycle Least Significant bits - are only used in PWM mode in which they
represent two least significant bits of a 10-bit number. DC1B1, DC1B0 - PWM Duty Cycle cel mai puin
semnificativ bit - sunt utilizate numai n PWM modul n care acestea reprezint doi bii cel mai puin
semnificativ al unui numr de 10 de bii. This number determines PWM signals duty cycle. Acest numr
determin semnal PWM a taxei ciclu. The rest of bits (8 in total) are stored in the CCPR1L register. Restul
de bii (8 n total) sunt stocate n CCPR1L registru.
CCP1M3 - CCP1M0 - CCP1 Mode Select bits determine the mode of the CCP1 module. CCP1M3 -
CCP1M0 - CCP1 Selectai Mod de bii determin modul de CCP1 modul.
CCP1M3
CCP1M3
CCP1M2
CCP1M2
CCP1M1
CCP1M1
CCP1M0
CCP1M0
Mode Modul de
0 0 0 0
Module is disabled (reset) Modulul este
dezactivat (resetare)
0 0 0 1 Unused Neutilizat
0 0 1 0
Compare mode Mod Compara
CCP1IF bit is set on match CCP1IF bit
este setat pe meci
0 0 1 1 Unused Neutilizat
0 1 0 0
Capture mode Mod de Captura
Every falling edge on the CCP1 pin
Fiecare care se ncadreaz pe marginea
CCP1 de aderen
0 1 0 1
Capture mode Mod de Captura
Every rising edge on the CCP1 pin Orice
cretere de pe marginea CCP1 de aderen
0 1 1 0
Capture mode Mod de Captura
Every 4th rising edge on the CCP1 pin
Fiecare 4a crescnd de pe marginea CCP1
de aderen
0 1 1 1
Capture mode Mod de Captura
Every 16th rising edge on the CCP1 pin
Fiecare 16e crescnd de pe marginea
CCP1 de aderen
1 0 0 0
Compare mode Mod Compara
Output and CCP1IF bit are set on match
Rezultat CCP1IF bii i sunt stabilite pe
meci
1 0 0 1
Compare mode Mod Compara
Output is cleared and CCP1IF bit is set on
match De iesire este golit i CCP1IF bit
este setat pe meci
Microcontrolere PIC - De a A la Z

67

1 0 1 0
Compare mode Mod Compara
Interrupt request arrives and bit CCP1IF is
set on match Cerere de bii i ajunge
CCP1IF este setat pe meci
1 0 1 1
Compare mode Mod Compara
Bit CCP1IF is set and timers 1 or 2
registers are cleared Bit CCP1IF este setat
timp i 1 sau 2, registrele sunt debifate
1 1 0 0
PWM mode Mod de PWM
Pins P1A and P1C are active-high Pin P1A
sunt active i P1C-ridicat
Pins P1B and P1D are active-high Pin P1B
i P1D sunt active-ridicat
1 1 0 1
PWM mode Mod de PWM
Pins P1A and P1C are active-high Pin P1A
sunt active i P1C-ridicat
Pins P1B and P1D are active-low Pin P1B
i P1D sunt active-low
1 1 1 0
PWM mode Mod de PWM
Pins P1A and P1C are active-low Pin P1A
sunt active i P1C-mici
Pins P1B and P1D are active-high Pin P1B
i P1D sunt active-ridicat
1 1 1 1
PWM mode Mod de PWM
Pins P1A and P1C are active-low Pin P1A
sunt active i P1C-mici
Pins P1B and P1D are active-low Pin P1B
i P1D sunt active-low
CCP2 Module Modulul CCP2
Excluding different names of registers and bits, this module is a very good copy of CCP1 module setup in
normal mode (previously discussed). Excluderea de nume diferite de registre i de bii, acest modul este un
foarte bun copie de CCP1 modul de configurare n modul normal (discutata anterior). There is only one
true difference between their modes when CCP2 operates in Compare mode. Exist doar un adevrat
diferena dintre modurile lor de CCP2 atunci cnd funcioneaz n modul Compara.
That difference refers to the timer T1 reset signal. Aceast diferen se refer la timer T1 semnal de
resetare. Namely, at the moment the values of the TMR1 and CCPR2 registers match and if A/D converter
is enabled, at the timer T1 reset signal will automatically start A/D conversion. Adica, la momentul n care
valorile de TMR1 i CCPR2 registrele i dac se potrivesc Convertor A / D este activat, la timer T1
semnal de resetare va porni automat A / D conversie.
Microcontrolere PIC - De a A la Z

68


Fig. 5-9 CCP2 Module Modulul de 5-9 CCP2
Similar to the pervious module, this circuit is under control of the bits of the control register. Similar cu
modul pervious, acest circuit este sub control de bii din registrul de control. This time, it is the CCP2CON
register. De data aceasta, este de CCP2CON registru.
CCP2CON Register CCP2CON Register

Fig. 5-10 CCP2CON Register 5-10 CCP2CON Register
DC2B1, DC2B0 - PWM Duty Cycle Least Significant bits - are only used in PWM mode representing two
least significant bits of a 10-bit number. DC2B1, DC2B0 - PWM Duty Cycle cel mai puin semnificativ bit
- sunt utilizate numai n modul PWM reprezentnd dou cel mai puin semnificativ bit al unui numr de 10
de bii. This number determines PWM signals duty cycle. Acest numr determin semnal PWM a taxei
ciclu. The rest of bits (8 in total) are stored in the CCPR2L register. Restul de bii (8 n total) sunt stocate n
CCPR2L registru.
CCP2M3 - CCP2M0 - CCP2 Mode Select bits select CCP2 mode. CCP2M3 - CCP2M0 - CCP2 Mod
Selectai modul de bii, selectai CCP2.
Microcontrolere PIC - De a A la Z

69

CCP2M3
CCP2M3
CCP2M2
CCP2M2
CCP2M1
CCP2M1
CCP2M0
CCP2M0
Mode Modul de
0 0 0 0
Module is disabled (reset) Modulul este
dezactivat (resetare)
0 0 0 1 Unused Neutilizat
0 0 1 0 Unused Neutilizat
0 0 1 1 Unused Neutilizat
0 1 0 0
Capture mode Mod de Captura
Every falling edge on the CCP2 pin
Fiecare care se ncadreaz pe marginea
CCP2 de aderen
0 1 0 1
Capture mode Mod de Captura
Every raising edge on the CCP2 pin
Fiecare se ridic pe marginea CCP2 de
aderen
0 1 1 0
Capture mode Mod de Captura
Every 4th rising edge on the CCP2 pin
Fiecare 4a crescnd de pe marginea CCP2
de aderen
0 1 1 1
Capture mode Mod de Captura
Every 16th rising edge on the CCP2 pin
Fiecare 16e crescnd de pe marginea
CCP2 de aderen
1 0 0 0
Compare mode Mod Compara
Output and CCP2IF bit are set on match
Rezultat CCP2IF bii i sunt stabilite pe
meci
1 0 0 1
Compare mode Mod Compara
Output is cleared and CCP2IF bit is set on
match De iesire este golit i CCP2IF bit
este setat pe meci
1 0 1 0
Compare mode Mod Compara
Interrupt is generated, CCP2IF bit is set
and CCP2 pin is unaffected on match
ntreruperea este generat, CCP2IF bit este
setat, i nu este afectat de aderen CCP2
pe meci
1 0 1 1
Compare mode Mod Compara
CCP2IF bit is set, Timer 1 registers are
cleared, A/D conversion is started if the
A/D converter is on on match CCP2IF bit
Microcontrolere PIC - De a A la Z

70

este setat, Timer 1 registrele sunt
eliminate, A / D conversie n cazul n care
este pornit Convertor A / D este pe la meci
1 1 x x PWM mode Mod de PWM
In short: Setup CCP1 module for PWM operation Pe scurt: Setup CCP1 modul PWM pentru
funcionarea
In order to setup the CCP module for PWM operation, the following steps should be taken: Pentru a seta
modul de CCP pentru PWM operaie, urmtorul pas ar trebui s fie luate:
Disable the CCP1 output pin. Dezactivai CCP1 ieire PIN. It should be configured as input.
Aceasta ar trebui s fie configurat ca intrare.
Set the PWM period by loading the PR2 register. Setai PWM perioad, prin ncrcarea PR2
registru.
Configure the CCP module for the PWM mode by combining bits of the CCP1CON register.
Configurai modulul CCP pentru PWM Mod de bii prin combinarea a CCP1CON registru.
Set the PWM signals duty cycle by loading the CCPR1L register and using bits DC1B1 and
DC1B0 of the CCP1CON register. Setai semnal PWM a taxei ciclului de ncrcare a CCPR1L
registru i utilizarea de bii DC1B1 i DC1B0 a CCP1CON registru.
Configure and start timer TMR2: Configurare i ncepe TMR2 Timer:
o Clear the TMR2IF interrupt flag bit of the PIR1 register. Senin de TMR2IF interrupt flag
bii din registrul PIR1.
o Set the timer TMR2 prescale value by loading bits T2CKPS1 and T2CKPS0 of the T2CON
register. Setare timer TMR2 prescale valoare de ncrcare T2CKPS1 bii i T2CKPS0 din
registrul T2CON.
o Start the timer TMR2 by setting the TMR2ON bit of the T2CON register. Start timer TMR2
de stabilire a TMR2ON bii de registrul T2CON.
Enable PWM output pins after one PWM cycle has been finished: Activai PWM-pin de ieire,
dup un ciclu de PWM a fost terminat:
o Wait for the timer TMR2 overflow (TMR2IF bit of the PIR1register is set). Stai pentru
TMR2 overflow Timer (TMR2IF bii de PIR1register este setat).
o Configure the appropriate pin as output by clearing bit of the TRIS register. Configurare de
aderen corespunztoare, ca ieire de bii de compensare a registrului TRIS.
CCP1 in Enhanced Mode CCP1 n Enhanced Mode
The enhanced mode is available on CCP1 only. Consolidat de modul este disponibil doar pe CCP1.
Basically, this module does not differ from the one previously described and enhancement refers to
transmission of PWM signal to the output pins. Practic, acest modul nu difer de cel descris anterior i de
mbuntire se refer la transmiterea de semnal PWM de pin de ieire. Why is it so important? De ce este
atat de important? Because the microcontrollers are more and more used in control systems for electric
motors. Pentru ca sunt mai multe i microcontrolere utilizate n mai multe sisteme de control pentru
motoare electrice. These devices are not described here, but if you ever have had a chance to work on
development of similar devices, you will recognize Numerous elements which until quite recently have
been used as external ones. Aceste dispozitive nu sunt descrise aici, dar dac ai avut vreodat o ans de a
lucra la dezvoltarea unor dispozitive similare, va recunoate numeroase elemente care pn destul de recent
au fost folosite ca cele externe. Normally, all these elements are now integrated into the microcontroller
Microcontrolere PIC - De a A la Z

71

and can operate in several different modes. n mod normal, toate aceste elemente sunt acum integrate n
microcontroler i poate funciona n mai multe moduri diferite.
Single Output PWM Mode Modul unic de iesire PWM
This mode is enabled only in case the P1M1 and P1M0 bits of the CCP1CON register are cleared. Acest
mod este activat doar n cazul n care P1M1 i P1M0 biii din registru CCP1CON sunt eliminate. In that
case, there is only one PWM signal which can be simultaneously available on maximum four different
output pins. n acest caz, nu este doar un semnal PWM care pot fi disponibile simultan la maxim patru
diferite pin de ieire. Besides, PWM signal may appear in basic or inverted waveform. In afara de aceasta,
semnal PWM pot aprea n baz sau inversat waveform. Signal distribution is determined by the bits of
the PSTRCON register, while its polarity is determined by the CCP1M1 and CCP1M0 bits of the
CCP1CON register. Semnal de distribuie este determinat de ctre biii de PSTRCON registru, n timp ce
polaritate este determinat de CCP1M1 i CCP1M0 biii din registru CCP1CON.
When inverted output is in use, the pins are low-active and pulses having the same waveform are always
generated in pair: on the P1A and P1C pins and P1B and P1D pins, respectively. Cnd Inverted de ieire
este n uz, sunt mici de pin-active i impulsurile care au acelai waveform sunt ntotdeauna generate n
pereche: pe de P1A i P1C i P1B pin-pin P1D i, respectiv,.

Fig. 5-11 Single Output PWM Mode 5-11 Single Mode iesire PWM
Half-Bridge Mode Half-Bridge Mode
In this mode, the PWM signal is output on the P1A pin, while at the same time the complementary PWM
signal is output on the P1B pin. n acest mod, este semnal PWM de ieire de pe P1A de aderen, n timp
ce, n acelai timp, semnal PWM complementare este de ieire de pe P1B PIN. Such pulses activate
Microcontrolere PIC - De a A la Z

72

MOSFET drivers in Half-Bridge mode which enable/disable current flow through device. Aceste drivere
MOSFET impulsurile activa n mod Half-Bridge, care activa / dezactiva fluxului de curent prin intermediul
dispozitivului.

Fig. 5-12 Half-Bridge Mode 5-12 Half-Bridge Mode
Concerning this circuit, it is very dangerous to switch on both MOSFET drivers simultaneously. n ceea ce
privete acest circuit, este foarte periculoase, pentru a trece de pe ambele simultan, drivere MOSFET. The
short circuit caused in that moment will be fatal. De scurt circuit provocat n momentul n care va fi fatal.
In order to avoid that, it is necessary to provide a short delay between switching drivers on and off. n
scopul de a evita ca, este necesar s se prevad o scurt ntrziere de comutare ntre conductori auto de pe
i din afara. This delay is marked as td in figure below. Aceast ntrziere este marcat ca fiind "TD" n
figura de mai jos. The problem is solved by using the PDC0-PDC6 bits of the PWM1CON register.
Problema este rezolvata prin utilizarea PDC0-PDC6 biii din registru PWM1CON.

As shown in figure, the same mode can be used to activate MOSFET drivers in Full Bridge: Aa cum se
arat n figura, n acelai mod pot fi folosite pentru a activa n drivere MOSFET completa Bridge:
Microcontrolere PIC - De a A la Z

73


Fig. 5-14 Activate MOSFET drivers 5-14 Activai drivere MOSFET
Full-Bridge Mode Full-Bridge Mode
In Full-Bridge mode, all four pins are used as outputs. n Full-Bridge mode, toate cele patru pin sunt
utilizate ca ieiri. In practice, this mode is commonly used to run motor, which provides simple and
complete control of speed and rotation direction. n practic, acest mod este folosit pentru a rula cu motor,
care ofer controlul complet si simplu de viteza i direcia de rotaie. There are two such configurations:
Full Bridge-Forward and Full Bridge-Reverse . Exist dou astfel de configuratii: Full-Inainte Bridge
Bridge-i completa invers.

Fig. 5-15 Full-Bridge Mode 5-15 Full-Bridge Mode
Full Bridge - Forward Configuration Full Bridge - Inainte de configurare
In Forward mode the following occurs: n mod Inainte se ntmpl urmtoarele:
Logic one (1) appears on the P1A pin (pin is high-active). Logica de un (1) apare pe P1A de
aderen (PIN-ul este activ de mare).
Pulse sequence appears on the P1D pin. Pulse secven apare pe P1D PIN.
Microcontrolere PIC - De a A la Z

74

Logic zero (0) appears on the P1B and P1C pins (pins are low-active). Logica de zero (0) apare pe
P1B i P1C-pin (pin-activ sunt mici).
Figure below shows the state of the P1A-P1D pins during one full PWM cycle. Figura de mai jos arat
starea de P1A-pin P1D n timpul ciclului de un PWM.

Full Bridge - Reverse Configuration Full Bridge - Revers de configurare
The same occurs in Reverse mode, except of the pins functions: Acelai lucru se produce n mod inversat,
cu excepia funciilor de pin:
Logic one (1) appears on the P1C pin (pin is active-high). Logica de un (1) apare pe P1C de
aderen (PIN-ul este activ-ridicat).
Pulse sequence appears on the P1B pin. Pulse secven apare pe P1B PIN.
Logic zero (0) appears on the P1A and P1D pins (pins are active-low). Logica de zero (0) apare pe
P1A i P1D-pin (pin sunt active-sczut).

PWM1CON Register STRC PWM Restart Enable bit PWM1CON Register STRC PWM Repornii
Enable bit
Microcontrolere PIC - De a A la Z

75

1 - Upon auto-shutdown, the PWM module is automatically reset, while the ECCPASE bit of the
ECCPAS register is cleared. 1 - La auto-nchidere, PWM modul de resetare este automat, n timp ce
ECCPASE bii din registrul ECCPAS este golit.
0 - In order to restart PWM module upon auto-shutdown, the ECCPASE bit must be cleared in
software. 0 - Pentru a reporni PWM la modul de auto-nchidere, ECCPASE de bii trebuie s fie
eliminate n software-ul.
PDC6 - PDC0 - PWM Delay Count bits. PDC6 - PDC0 - Contele PWM un decalaj de bii. 7-digit binary
number determines the number of instruction cycles (4*Tosc) added as time delay during the activation of
PWM output pins. 7-numr de cifre binare determin numrul de cicluri de instruire (4 * Tosc) care se
adaug ca timp de ntrziere n timpul de activare a PWM-pin de ieire.

Fig. 5-18 PWM1CON Register 5-18 PWM1CON Register
PSTRCON Register PSTRCON Register
STRSYNC - Steering Sync bit determines the moment of PWM pulse steering: STRSYNC - Director
sincronizare bii determin momentul pulsul PWM de direcie:
1 - Steering occurs upon the PSTRCON has been changed, but only if a PWM waveform is
completed. 1 - Consiliul Director se produce la PSTRCON a fost schimbat, dar numai n cazul n
care un PWM waveform este finalizat.
0 - Steering occurs upon the PSTRCON register has been changed. 0 - Consiliul Director se
produce la PSTRCON registru a fost schimbat. The PWM signal on output pin is immediately
changed with no regard to whether the previous cycle is completed or not. De semnal PWM de
ieire de pe PIN-ul este imediat, nu a fost schimbat cu privire la ciclul precedent, dac este
complet sau nu. This operation is useful when it is needed to immediately remove a PWM signal
from the pin. Aceast operaie este util atunci cnd este necesar pentru a elimina imediat un
semnal PWM de la PIN-ul.
STRD - Steering Enable bit D determines the P1D pin function. STRD - Director Enable bit D P1D
determin funcia de aderen.
1 - P1D pin has the PWM waveform with polarity controlled by the CCP1M0 and CCP1M1 bits. 1 -
P1D pini are PWM waveform cu polaritatea controlat de CCP1M0 i CCP1M1 bii.
0 - Pin is configured as general port D input/output. 0 - PIN-ul este configurat ca port D generale de
intrare / ieire.
Microcontrolere PIC - De a A la Z

76

STRC Steering Enable bit C determines the P1C pin function. STRC Director Activai C bii determin
P1C funcie de aderen.
1 - P1C pin has the PWM waveform with polarity controlled by the CCP1M0 and CCP1M1 bits. 1 -
P1C pini are PWM waveform cu polaritatea controlat de CCP1M0 i CCP1M1 bii.
0 - Pin is configured as general port D input/output. 0 - PIN-ul este configurat ca port D generale de
intrare / ieire.
STRB - Steering Enable bit B determines the P1B pin function. STRB - Director Activai B bii
determin P1B funcie de aderen.
1 - P1B pin has the PWM waveform with polarity controlled by the CCP1M0 and CCP1M1 bits. 1 -
P1B pini are PWM waveform cu polaritatea controlat de CCP1M0 i CCP1M1 bii.
0 - Pin is configured as general port D input/output. 0 - PIN-ul este configurat ca port D generale de
intrare / ieire.
STRA - Steering Enable bit A determines the P1A pin function. STRA - Un pic de direcie Activai
P1A determin funcia de aderen.
1 - P1D pin has the PWM waveform with polarity controlled by the CCP1M0 and CCP1M1 bits. 1 -
P1D pini are PWM waveform cu polaritatea controlat de CCP1M0 i CCP1M1 bii.
0 - Pin is configured as general port Ainput/output. 0 - PIN-ul este configurat ca port generale
Ainput / ieire.
ECCPAS Register ECCPAS Register

Fig. 5-19 ECCPAS Register 5-19 ECCPAS Register
ECCPASE - ECCP Auto-Shutdown Event Status bit indicates whether shut-down of CCP module has
occurred (Shutdown state): ECCPASE - PESC-Auto Shutdown Eveniment Stare de bii indic dac
oprire modul de CCP a avut loc (Shutdown de stat):
1 - CCP module is in Shutdown state. 1 - CCP este modul n Shutdown de stat.
0 - CCP module operates normally. 0 - CCP modul funcioneaz n mod normal.
ECCPAS2 - ECCPAS0 - ECCP Auto-Shutdown Source Select bits select auto shutdown source:
ECCPAS2 - ECCPAS0 - PESC-Auto Shutdown Sursa Selectai bii, selectai automat de nchidere
sursa:
Microcontrolere PIC - De a A la Z

77

ECCPAS2 ECCPAS2 ECCPAS1 ECCPAS1 ECCPAS0 ECCPAS0
Shutdown state source
Shutdown surs de stat
0 0 0
Shutdown state disabled
Shutdown de stat cu
handicap
0 0 1
Comparator C1 output
change Comparator C1
schimbare de ieire
0 1 0
Comparator C2 output
change Comparator C2
schimbare de ieire
0 1 1
Comparator C1 or C2
output change
Comparator C1 sau C2
schimbare de ieire
1 0 0
Logic zero (0) on INT
pin Logica de zero (0)
pin pe INT
1 0 1
Logic zero (0) on INT
pin or comparator C1
output change Logica de
zero (0) pe INT pin sau
comparator C1
schimbare de ieire
1 1 0
Logic zero (0) on INT
pin or comparator C2
output change Logica de
zero (0) pe INT pin sau
comparator C2
schimbare de ieire
1 1 1
Logic zero (0) on INT
pin or comparator C1 or
C2 output change Logica
de zero (0) pe INT pin
sau comparator C1 sau
C2 schimbare de ieire
PSSAC1, PSSAC0 - Pins P1A, P1C Shutdown State Control bits define logic state on output pins P1A
and P1C when CCP module is in shutdown state. PSSAC1, PSSAC0 - pin P1A, P1C Shutdown controlul
statului de bii definesc logica de stat pe pinii de ieire P1A i P1C, atunci cnd CCP este n modul de
nchidere de stat.
PSSAC1 PSSAC1 PSSAC0 PSSAC0
Pins logic state Pin
logica de stat
Microcontrolere PIC - De a A la Z

78

0 0 0
0 1 1
1 X
High impedance (Tri-
state) De mare
impedanta (Tri-stat)
PSSBD1, PSSBD0 - Pins P1B, P1D Shutdown State Control bits define logic state on output pins P1B
and P1D when CCP module is in shutdown state. PSSBD1, PSSBD0 - pin P1B, P1D Shutdown controlul
statului de bii definesc logica de stat pe P1B pin de ieire P1D i CCP, atunci cnd este n modul de
nchidere de stat.
PSSBD1 PSSBD1 PSSBD0 PSSBD0
Pins logic state Pin
logica de stat
0 0 0
0 1 1
1 X
High impedance (Tri-
state) De mare
impedanta (Tri-stat)




























Microcontrolere PIC - De a A la Z

79


CAPITOLUL 6:
SERIAL DE COMUNICAIE MODULE

EUSART
Enhanced Universal Asynchronous Receiver Transmiter sincrone (EUSART) este un modul serial I / O
comunicare periferice. Este, de asemenea, cunoscute sub denumirea de Serial Communications Interface
(SCI). Aceasta conine toate generatoarele de ceas, schimburi de date i registrele buffers necesare pentru a
efectua o serie de intrare sau de ieire de transfer de date independent de dispozitiv, program de executie.
Dup cum spune numele su, n afar de utilizare a ceasului de sincronizare, acest modul se poate stabili,
de asemenea, asincrone de conexiune, care o face nenlocuit n unele aplicaii.

De exemplu, n cazul n care este dificil sau imposibil de a oferi canale speciale pentru ceas i de transfer
de date (de exemplu, radio, infrarou sau de control de la distan), EUSART impune modul n sine, ca
soluie convenabil.
EUSART de sistem integrat n microcontroler PIC16F887 are urmtoarele caracteristici:
Full-duplex asincron transmit i s primeasc
Programabile 8 - sau 9 bii de caractere lungime
Adresa de detectare a 9-bii n mod
O depire de zon tampon de intrare eroare de detectare a
Half-duplex, comunicare, n mod sincron (principal sau secundar)
Microcontrolere PIC - De a A la Z

80

Mod EUSART asincron
De EUSART transmite i primete date folosind standardul non-return-to-zero (NRZ). Dup cum se vede
n figura de mai jos, acest modul nu foloseste semnal de ceas, n timp ce datele sunt transferate n format
este foarte simplu:

Fig. 6-2 EUSART asincron Mode
Succint, fiecare date este transferat n felul urmtor:
n starea de inactivitate, linie de date a ridicat nivel de logica (1).
Fiecare transmisie de date ncepe cu START bii care este ntotdeauna un zero (0).
Fiecare de date este de 8 - 9 sau la nivel de bii (LSB primul bit este transferat)
Fiecare transmitere de date se termin cu STOP bii, care ntotdeauna a logicii nivel care este
ntotdeauna un (1).
EUSART asincron Transmiter

Fig. 6-3 EUSART asincron Transmiter
Microcontrolere PIC - De a A la Z

81

Pentru a permite transmiterea datelor prin intermediul EUSART modul, este necesar s l configurai
pentru a functiona ca un emitor. Am alte cuvinte, este necesar s se defineasc starea de bii,
urmtoarele:
TXEN = 1 - EUSART emitor este activat prin setarea de bii din acest registru de TXSTA.
SYNC = 0 - EUSART este configurat s funcioneze n modul de compensare asincrone de bii din acest
registru TXSTA.
SPEN = 1 - Prin aceast setare de bii din registrul RCSTA, EUSART este activat i TX / CK PIN-ul este
configurat automat, ca ieire. Dac acest bit este utilizat simultan pentru unele analogice funcie, el trebuie
s fie dezactivat de compensare corespunztoare de bii de ANSEL registru.
Partea centrala a EUSART emitor este trecerea TSR registru care nu este accesibil direct de ctre
utilizator. Pentru a ncepe transmiterea, modulul trebuie s fie activat prin setarea de bii TXEN din
TXSTA registru. Datele care urmeaz s fie trimis ar trebui s fie scrise n registru TXREG, care va
provoca urmatoarea succesiune de evenimente:
Byte va fi imediat transferat la trecerea registru TSR.
TXREG registru rmne gol, care este indicat prin setarea flag bii TXIF din registrul PIR1. Dac
TXIE bii de PIE1 registru este setat, o ntrerupere va fi generat. In afara de aceasta, de pavilion
este setat indiferent dac o ntrerupere este activat sau nu. De asemenea, ea nu poate fi autorizat
de ctre software-ul, dar de scris date noi la TXREG registru.
Electronice de control "mpinge" date spre TX de aderen n ritm cu ceas intern: Start bii (0) ...
date ... STOP bii (1).
Cnd ultimele frunze de bii TSR registru, TRMT bii de TXSTA regis ter este setat automat.
n cazul n care registrul TXREG a primit un nou caracter de date n timp, ntreaga procedur este
repetat, imediat dup STOP pic de caracter anterior a fost transmis.
Trimiterea 9-bit de date este activat prin setarea de TX9 bii de TXSTA registru. TX9D de bii din
registrul TXSTA este a noua si cel mai semnificativ bit de date. Cnd transferul de date de 9 bii, bii
TX9D de date trebuie s fie scrise n scris, nainte de 8 bii cel mai puin semnificativ n TXREG registru.
Toate nou biii de date vor fi transferate ctre TSR trecerea de registru, imediat dup TXREG scrie este
complet.
EUSART Asynchronous Receiver
Microcontrolere PIC - De a A la Z

82


Fig. 6-4 EUSART Asynchronous Receiver
Similar cu cel de activare a EUSART emitor, pentru a permite receptor este necesar s se defineasc
urmtoarele bii:
CREN = 1 - EUSART receptor este activat prin setarea de bii din acest registru de RCSTA.
SYNC = 0 - EUSART este configurat s funcioneze n mod asincron de compensare acest bii TXSTA
stocate n registru.
SPEN = 1 - Prin aceast setare de bii din registrul RCSTA, EUSART este activat i de RX / DT PIN-ul
este configurat automat ca intrare. Dac acest bit este utilizat simultan pentru unele analogice funcie, el
trebuie s fie dezactivat de compensare corespunztoare de bii de ANSEL registru.
Dup acest prim pas necesar i este realizat i pentru a ncepe este detectat de bii, datele sunt transferate
ca urmare a trecerii prin registru RSR RX PIN. La STOP bii a fost primit, se ntmpl urmtoarele:
Data este automat transferat la RCREG registru (dac este goal).
De pavilion de bii RCIF este setat si o ntrerup, dac este activat de ctre RCIE bii din registrul
PIE1, se produce. Similar emitor, drapelul de bii este autorizat de ctre software-ul doar, i
anume, prin citirea RCREG registru. Avei n vedere faptul c aceasta este o memorie FIFO de
dou caractere (de primul-in-primul-out), care permite recepia simultan a dou caractere.
n cazul n care registrul este ocupat RCREG (conine doi octei) i pe trecerea de registru
detecteaz nou STOP bii, bii overflow OERR va fi stabilit. n acest caz, un nou provenind de date
este pierdut, iar OEER de bii trebuie s fie autorizat de ctre software. Aceasta se face prin
compensare i de resetare a CREN bii.
Not: nu este posibil s primii date noi n ceea ce privete OERR bit este setat.
Dac STOP bit este zero (0), FERR pic de depistare a primi RCSTAregister de eroare va fi stabilit.
Microcontrolere PIC - De a A la Z

83

Pentru a primi date de 9 bii, este necesar s se stabileasc RX9 bii de RCSTA registru.
Primiti Eroare de detectare a
Exist dou tipuri de erori care poate detecta automat microcontroler. Primul dintre ele este numit framing
de eroare si apare atunci cnd receptorul nu detecteaz STOP bii la ateptat timp. O astfel de eroare este
indicat prin intermediul FERR bii de RCSTA registru. Dac acest bit este setat, nseamn c a primit
ultima dat de date pot fi incorecte. Este important s tii mai multe lucruri:
O eroare framing nu genera o ntrerupere de la sine.
Dac acest bit este setat, ultimele date a primit o eroare.
O eroare de nrmri (bit setat) nu mpiedic primirea de noi date.
FERR de bii este autorizat de lectur a datelor primite, ceea ce nseamn c trebuie s fi fcut
verificarea datelor, nainte de lectur.
FERR de bii nu poate fi autorizat de ctre software. Daca este necesar, el poate fi autorizat de
compensare a SPEN bii de RCSTA registru. Aceasta va provoca n acelai timp de resetare a
ntregului sistem EUSART.
Un alt tip de eroare este numit depire de eroare. De a primi FIFO poate trage dou caractere. O
depire de eroare vor fi generate n cazul celui de-al treilea caracter este primit. Pur i simplu, nu exist
nici un spaiu pentru un alt octet i o eroare este inevitabil din punct de vedere! Cnd se ntmpl acest
lucru, OERR pic de RCSTA de registru este setat. Consecinele sunt urmtoarele:
Date deja nregistrate n registrele FIFO (doi octei) poate fi citit n mod normal.
Nr date suplimentare vor fi primite pn la OERR bii este golit.
Acest bit nu este direct accesat. Pentru a clar-o, este necesar s se clarifice CREN bii din registrul
RCSTA sau pentru a reseta EUSART ntregul sistem de compensare de SPEN bii de RCSTA
registru.
Primirea de 9 bii de date
n plus fa de primirea standard de 8 bii de date, EUSART sprijin sistemul de 9 bii de date Recepie.
Pe latura transmite, n a noua de bii este "ataat" la origine, nainte de octet doar STOP bii. Pe latura
primi, n momentul n care RX9 pic de RCSTA de registru este setat, n a noua de bii de date va fi
automat scris in RX9D pic de acelai registru. Cnd acest octet este primit, ar trebui s o aib grij de
modul n care se citesc de la biii de date-RX9D de bii trebuie s fie citit nainte de lectur de 8 bii cel mai
puin semnificativ al RCREG registru. Altfel, a noua de bii de date va fi golit automat.
Microcontrolere PIC - De a A la Z

84


Fig. 6-5 Primirea de 9 bii de date
Adresa de detectare a
Cnd ADDEN bii de RCSTAregister este setat, EUSART modul este capabil de a primi doar 9 bii de
date, ntruct toate cele 8 bii de date va fi ignorat. Desi se pare ca o restricie, de serie permite o astfel de
mod de comunicare ntre mai multe microcontrolere. Principiul de funcionare este simplu. Cpitanul
trimite dispozitiv de 9 bii de date care reprezinta o adresa de microcontroler. Toate slave microcontrolere
de transport n comun aceeai linie, de a primi aceste date. Desigur, fiecare dintre ele trebuie s aib
ADDEN set de bii, deoarece acesta permite detectarea adresa.

Fig. 6-6 Adresa de detectare a
Microcontrolere PIC - De a A la Z

85

La primirea datelor pe care fiecare sclav n cazul n care controalele se potrivete cu adresa proprie.
Produse de plastic, n care apare adresa de meci, trebuie s dezactivai detectarea adresa de compensare
sale ADDEN bii. Comandantul dispozitivului de trimitere, pastrand pe 8 bii de date. Toate datele care
trec prin linie de transport va fi primit de ctre "recunoscute" EUSART doar modulul. La primirea ultimele
octet, dispozitiv slave ar trebui s setai ADDEN bit pentru a permite o nou adres de detectare.

Fig. 6-7 Trimiterea de date
TXSTA Register

CSRC - Ceas Sursa Selectai bii - determin surs de ceas. Este utilizat numai n modul sincron.
1 - Mod de Maestru. Ceasul este generat intern de la baud Rata de generator.
0 - Slave Mod. Ceasul este generat de la surs extern.
TX9 - 9-bit Transmisie Enable bit
1 - 9-bit de transmisie de date prin intermediul EUSART sistem.
0 - 8 bii de transmisie de date prin intermediul EUSART sistem.
TXEN - Transmisie Enable bit
1 - Transmitere activat.
0 - Transmitere dezactivat.
Microcontrolere PIC - De a A la Z

86

SYNC - EUSART Selectai Mod de bii
1 - EUSART funcioneaz n mod sincron.
0 - EUSART funcioneaz n mod asincron.
SENDB - Trimite Break personaj de bii este utilizat doar n mod asincron, i numai n cazul n care este
necesar pentru a respecta Lin autobuz standard.
1 - Trimiterea Pauza de caractere este activat.
0 - Pauza de caractere de transmisie este finalizat.
BRGH - Inalta baud Selectai Rata de bii determin rata baud n mod asincron. Ea nu afecteaz
EUSART n mod sincron.
1 - EUSART funcioneaz la mare vitez.
0 - EUSART funcioneaz la vitez sczut.
TRMT - Transmisie Shift Register Stare de bii
1 - TSR registrul este gol.
0 - TSR registru este plin.
TX9D - al noulea bit de transmiterea datelor poate fi folosit ca adresa de paritate sau de bii.
RCSTA Register

SPEN - Activai portul serial de bii
1 - port serial activat. RX / TX DT i / CK-pin sunt automat configurat ca intrare i, respectiv, de
ieire.
0 - dezactivat portul serial.
RX9 - 9-bit Receive Enable bit
1 - Primirea de 9 bii de date, prin intermediul sistemului de EUSART.
0 - Primirea 8 bii de date, prin intermediul sistemului de EUSART.
Microcontrolere PIC - De a A la Z

87

SREN - Single ReceiveEnable bii este utilizat numai n modul sincron atunci cnd funcioneaz n
calitate de cpitan microcontroler.
1 - Single primi activat.
0 - Single primi dezactiva.
CREN - continu Enable Receive pic diferit de acte n funcie de modul de EUSART.
Asynchronous mode:
1 - Receivere activat.
0 - Receivere dezactivat.
Mod de sincron:
1 - Activeaz continu s primeasc, pn la CREN bii este golit.
0 - Dezactiveaz primi continuu.
ADDEN - Adresa Detect Activai bii este utilizat numai n modul adresa detecta.
1 - Permite detectarea adresa de la data de 9 bii de date primite.
0 - Dezactiveaz adresa de detectare. A noua de bii poate fi folosit ca bit de paritate.
FERR - framing Eroare de bii
1 - Pe primi, elaborarea de eroare este detectat.
0 - nr framing eroare.
OERR - Eroare de depire de bii.
1 - Pe primi, depire de eroare este detectat.
0 - eroare de depire nr.
RX9D - al noulea bit de primit de date poate fi folosit ca adresa de paritate sau de bii.
Rata de Generatorul de EUSART baud (BRG)
Dac cutai cu atenie la asincrone EUSART Diagrama de emitor sau receptor, vei vedea c n ambele
cazuri, semnalul de ceas de la local, Timer BRG este folosit pentru sincronizare. Aceeai surs de ceas
este, de asemenea, utilizat n mod sincron.
Acest timp este alctuit din dou registre de 8 bii care cuprinde un registru de 16 bii.
Microcontrolere PIC - De a A la Z

88


Fig. 6-10 EUSART baud Apreciaza Generator (BRG)
Un numr scris n aceste dou registre determin rata baud. In afara de aceasta, att BRGH bii din
registrul TXSTA i BRGH16 bii din registrul BAUDCTL afecteaz frecvena de ceas.
Formula utilizat pentru a determina baud Apreciaza este prezentat n tabelul de mai jos.
Biti
BRG /
EUSART Mode
Rata de
Formula baud
SYNC BRG1G BRGH
0 0 0 8 bii / asincron
Fosc / [64 (n +
1)]
0 0 1 8 bii / asincron
Fosc / [16 (n +
1)]
0 1 0 16-bit / asincron
Fosc / [16 (n +
1)]
0 1 1 16-bit / asincron
Fosc / [4 (n +
1)]
1 0 X 8 bii / asincron
Fosc / [4 (n +
1)]
1 1 X 16-bit / asincron
Fosc / [4 (n +
1)]
Urmtoarele tabele conin valori care ar trebui s fie scrise n registru de 16 bii SPBRG i ncadrate la
sync, BRGH i BRGH16 bii, cu scopul de a obine unele dintre ratele standard de baud.
Formulele utilizate pentru a determina baud Apreciaza sunt:

Microcontrolere PIC - De a A la Z

89




Microcontrolere PIC - De a A la Z

90




Microcontrolere PIC - De a A la Z

91



BAUDCTL Register

ABDOVF - Auto-Detect baud overflow bii este utilizat doar n mod asincron n timpul baud rata de
detectare.
1 - Auto-timer-baud overflowed.
0 - Auto-timer-baud nu overflowed.
RCIDL - Primii Idle Steagul bii este utilizat doar n mod asincron.
Microcontrolere PIC - De a A la Z

92

1 - Receivere este inactiv.
0 - START bii a fost primit i primirea este n curs de desfurare.
SCKP - sincrone Ceas polarity Selectai pic diferit de acte n funcie de modul de EUSART.
Asynchronous mode:
1 - Transmisie de date la Inverted RC6/TX/CK PIN.
0 - Transmisie de date non-Inverted la acelai PIN.
Mod de sincron:
1 - Sincronizare n cretere pe marginea ceasului.
0 - Sincronizare pe care se ncadreaz marginea ceasului.
WUE Wake-up Enable bit
1 - Receivere asteapta pentru o margine de care se ncadreaz n a RC7/RX/DT de aderen pentru
a ncepe s trezirea microcontroller de la modul sleep.
0 - Receivere funcioneaz n mod normal.
ABDEN - Auto-Detect baud Activai bii este utilizat numai n modul asincron.
1 - Auto-baud detecta mod este activat. De bii este n mod automat eliminate de pe rata baud
detecta.
0 - Auto-baud detecta modul este dezactivat.
Pe scurt:
Trimiterea de date prin intermediul EUSART asincron de comunicare:
1. Rata baud de dorit ar trebui s fie stabilit de bii, folosind BRGH (TXSTA registru) i BRG16
(BAUDCTL registru) i registre SPBRGH i SPBRG.
2. SYNC de bii (TXSTA registru) ar trebui s fie eliminate i SPEN bii ar trebui s se stabileasc
(RCSTA registru) pentru a activa portul serial.
3. n data de 9 bii de transmitere a datelor, TX9 pic de TXSTA de registru ar trebui s fie stabilite.
4. Transmiterea de date este activat prin setarea de bii TXSTA, TXEN din registru. Bit TXIF din
registrul PIR1 este setat automat.
5. Dac este nevoie de un pic TXEN cauzele ntrerup, GIE i PEIE biii din registrul INTCON ar
trebui s fie stabilite.
6. n data de 9 bii de transmitere a datelor, n valoare de nou bii ar trebui s fie scrise n TX9D bii
de TXSTA registru.
7. Transmitere pornete de scris, cu 8 bii de date la TXREG registru.
Primirea datelor prin intermediul EUSART asincron de comunicare:
1. Rata de baud ar trebui s fie stabilit de bii, folosind BRGH (TXSTA registru) i BRG16
(BAUDCTL registru) i registre SPBRGH i SPBRG.
Microcontrolere PIC - De a A la Z

93

2. SYNC de bii (TXSTA registru) ar trebui s fie eliminate i SPEN bii ar trebui s se stabileasc
(RCSTA registru) pentru a activa portul serial.
3. Dac este necesar de a primi date cauzeaz o ntrerupere, att RCIE bii din registrul PIE1 i biii
GIE i INTCON, PEIE de registru ar trebui s fie stabilite.
4. n data de 9 bii de date a primi, RX9 pic de RCSTA de registru ar trebui s fie stabilite.
5. De date ar trebui s primeasc fi activat prin setarea de CREN bii de RCSTA registru.
6. RCSTA de registru ar trebui s fie citit pentru a obine informaii cu privire la eventualele erori
care au avut loc n timpul transmisiei. n data de 9 bii de date a primi, a noua de bii vor fi stocate
n acest registru.
7. Primit cu 8 bii de date stocate n RCREG registru ar trebui s fie citite.
Setarea Adresa Modul de detectare:
1. Rata de baud ar trebui s fie stabilit de bii, folosind BRGH (TXSTA registru) i BRG16
(BAUDCTL registru) i registre SPBRGH i SPBRG.
2. SYNC de bii (TXSTA registru) ar trebui s fie eliminate i SPEN bii ar trebui s se stabileasc
(RCSTA registru) pentru a activa portul serial.
3. Dac este necesar de a primi date cauzeaz o ntrerupere, RCIE pic de PIE1 de bii, precum i bii,
GIE i INTCON, PEIE de registru ar trebui s fie stabilite.
4. RX9 de bii al RCSTA registru trebuie s fie stabilit.
5. ADDEN de a RCSTA registru ar trebui s fie stabilite, care permite o date pentru a fi interpretat
ca o adres.
6. Primi date este activat prin setarea de CREN bii de RCSTA registru.
7. Imediat, la 9-bit de date este primit, RCIF bii de PIR1 registru va fi setat automat. Dac activat,
se produce o ntrerupere.
8. RCSTA de registru ar trebui s fie citit n scopul de a obine informaii cu privire la eventualele
erori care au avut loc n timpul transmisiei. A noua de bii RX9D este ntotdeauna stabilit.
9. Primit de 8 bii, stocate n RCREG registru ar trebui s fie citite. Aceasta ar trebui s fie verificate
dac combinaie a acestor bii se potrivete cu adresa predefinite. n cazul n care se potrivesc are
loc, este necesar s se clarifice ADDEN bii din registrul RCSTA, care permite mai mult de 8 bii
de date primite.
Master sincrone port serial Modulul
MSSP modul (Master sincrone port serial) este o foarte util, dar n acelai timp una dintre cele mai
complexe in cadrul circuitului microcontroler. Este de mare vitez permite comunicarea ntre un
microcontroler i alte dispozitive periferice sau microcontroler folosind cteva intrare / ieire linii (maxim
dou sau trei). Prin urmare, este frecvent utilizat pentru a conecta la microprocesoare LCD afieaz, A / D
convertoare, de serie EEPROMs, trecerea de registre, etc caracteristica principala a acestei comunicri este
c este sincrone i corespunztoare pentru utilizare n sisteme cu un singur master i unul sau mai multe
sclavi. Un dispozitiv master conine necesare circuitry pentru rata baud generaie i furnituri de ceas pentru
toate dispozitivele din sistem. Slave dispozitivele pot elimina n acest fel de ceas intern generaie circuitry.
MSSP de modul poate funciona n dou moduri:
Mod de SPI (Serial Peripheral Interface)
Mod de I2C (Inter-circuit integrat)
Microcontrolere PIC - De a A la Z

94

Dup cum se vede n figur, o MSSP modul reprezint numai o jumtate din hardware-ul necesar pentru a
stabili serial de comunicaie, n timp ce o alt jumtate sunt stocate n dispozitiv se face schimb de date cu.
Chiar dac toate modulele de pe ambele capete ale liniei sunt aceleai, modurile lor sunt diferite n funcie
de esen, indiferent dac acestea funcioneaz ca un masterat sau un sclav:
Dac microcontroler pentru a fi programat un alt dispozitiv de control sau de circuit (periferice), atunci ar
trebui s funcioneze ca un dispozitiv. Un astfel de modul definit ca va genera ceasul cnd este necesar, i
anume, doar atunci cnd datele primeasc i s transmit este solicitat de software-ul. Depinde de
masterat, dac conexiunea va fi stabilit sau nu. Altfel, n cazul n care microcontroler pentru a fi
programate este o parte a unor periferice, care aparine la unele mai complexe de dispozitiv (de exemplu
PC-ul), atunci ar trebui s funcioneze ca un dispozitiv slave. Astfel, el ntotdeauna trebuie s ateptai
pentru cererea de transfer a datelor de la dispozitivul de masterat.

SPI Mode
Mod de SPI permite 8 bii de date s fie transmise i primite simultan, folosind 3 de intrare / ieire linii:
SDO - serie de date Out - transmite online.
SDI - serie de date n - s primii linie.
SCK - Serial Clock - linie de sincronizare.
n plus fa de aceste trei linii, n cazul n care schimburile de date cu microcontroler de mai multe
dispozitive periferice, departe de linie (SS) pot fi de asemenea folosite. Referi figura de mai jos.
SS - Slave Select - este folosit pentru a fixa suplimentare specifice de dispozitiv de selecie. Ea este activ
doar n cazul n care microcontroller este n modul slave, de exemplu, atunci cnd externe - master
dispozitiv necesit schimb de date.
Atunci cnd funcioneaz n modul SPI, MSSP utilizeaz modul n total de 4 registre:
Microcontrolere PIC - De a A la Z

95

SSPSTAT - statutul de registru
SSPCON - registrul de control
SSPBUF - registru tampon
SSPSR - trecerea de registru (nu este direct disponibil)
Primele trei registre sunt de scriere / de citit si pot fi schimbate in orice moment, n timp ce al patrulea
registru, deoarece nu sunt disponibile, este utilizat pentru transformarea n date "de serie" n format.

Dup cum se vede n figura, partea centrala a SPI modul este format din dou registre conectat la pin
pentru a primi, transmite si de sincronizare.
Shift registru (SSPRS) sunt direct legate de microcontroller pin i utilizate pentru transmiterea datelor n
format de serie. SSPRS de registru a intrrilor i ieirilor sale i de schimburi de date n i din dispozitiv.
Cu alte cuvinte, fiecare bit care apar pe intrare (primi linie) n acelai timp un alt schimburi de bii fa de
ieire (transmite linie).
SSPBUF de registru (Buffer) este o parte din memorie utilizate pentru a exercita n datelor cu caracter
temporar scris in SSPRS pn la primit de date este gata. La primirea toate cele 8 bii de date, care octet
este mutat n SSPBUF registru. Acest dublu buffering a primit de date (SSPBUF) permite urmtoarea octet
pentru a ncepe s Recepie nainte de citirea datelor pe care tocmai a fost primit. Orice scrie la SSPBUF
registru n emisie / recepie de date va fi ignorat. Deoarece au fost cele mai accesate, acest registru este
considerat cel mai important de programatori de la "punctul de vedere.
Anume, dac modul de setri sunt neglijate, de transfer de date prin intermediul SPI nseamn de fapt
pentru a scrie i a citi date din acest registru, n timp ce un alt "acrobaie", cum ar fi deplaseaz registrele
sunt efectuate automat de ctre hardware.
Microcontrolere PIC - De a A la Z

96


Pe scurt:
nainte de a se Iniializare de SPI, este necesar de a specifica mai multe opiuni:
Mod de Maestru (SCK PIN-ul este ceasul de ieire)
Slave Mod (SCK PIN-ul este ceasul de intrare)
Date de intrare-faza mijlocul sau sfritul de date de ieire timp (PSP bii)
Ceas Edge (CKE bii)
Rata de baud (numai n modul Master)
Slave selectai mod (modul de doar Slave)

Pasul 1.
De a transmite date ar trebui s fie scrise n registru tampon SSPBUF. Imediat dup ce c, n cazul n care
funcioneaz n modul SPI modul master, microcontroller automat va efectua urmtorii pai 2, 3 i 4. Dac
funcioneaz ca SPI modul slave, microcontroller nu va efectua aceti pai pn cnd SCK de aderen
detecteaz semnalul de ceas.

Pasul 2.
Aceste date este acum mutat n SSPSR registru i a SSPBUF registru nu este golit.
Microcontrolere PIC - De a A la Z

97


Pasul 3.
Sincronizate cu semnalul de ceas, aceste date este mutat de la ieirea de aderen (MSB bit este primul)
registrul n timp ce este n acelai timp fiind ocupate cu biii de intrare prin intermediul PIN. n modul de
Maestru, microcontroller sine genereaz ceas, n timp ce folosete extern Slave Mod de ceas (PIN SCK).

Pasul 4.
SSPSR de registru este plin o dat de 8 bii de date au fost primite. Ea este indicat prin setarea de BF i
SSPIF bii. Primite de date (ca byte) este automat mutat de la SSPSR nregistreaz-te pentru a SSPBUF de
registru. Deoarece de transfer de date prin serial de comunicare se face n mod automat, restul de program
este executat n mod normal, n timp ce transferul de date este n progres. n acest caz, n funcie de SSPIF
de bii este de a genera ntrerupere, atunci cnd un octet este completat de transmisie.

Pasul 5.
La ultima, datele nregistrate n registrul SSPBUF este gata pentru utilizare i mutat la orice registru
disponibile.
Mod de I2C
Mod de I2C (Inter IC Bus) este adecvat n special n cazul n care microcontroler i circuitul integrat de
microcontroller care ar trebui s fac schimb de date cu sunt, n acelai dispozitiv. Este frecvent despre un
alt microcontrolere sau de specialitate, circuite integrate ieftine care fac parte din noua generaie de aa-
numitul smart componente periferice (memorii, senzori de temperatur, n timp real, ceasuri etc)
Microcontrolere PIC - De a A la Z

98

Similar serial de comunicaie n modul SPI, I2C de transfer de date n mod este sincrone i bidirecional.
De data aceasta, doar dou-pin sunt folosite pentru transferul de date. Acestea sunt SDA (Serial Data) i
SCL (Serial Clock) PINS. Utilizatorul trebuie s configurai aceste pin ca intrri sau ieiri, prin TRISC
bii.
Poate nu este vizibil direct. Prin respectarea regulilor special (protocoalele), acest modul permite pn la
122 de componente diferite de a fi conectat simultan ntr-un mod simplu, folosind doar dou valoroase I /
O-pin. Succint, totul funcioneaz dup cum urmeaz: Ceas - este necesar pentru a sincroniza de
funcionare a celor dou dispozitive este ntotdeauna generate de ctre comandantul de dispozitiv
(microprocesoare) i frecvena afecteaz n mod direct rata baud. Exist protocoale care s permit maxim
3,4 MHz frecvena de ceas (aa-numitul de mare vitez I2C bus), dar frecvena de ceas din cele mai
frecvent utilizate de protocol este limitat la 100 KHz. Nu exist nici o limit n caz de frecven minim.
Cnd master i slave componente sunt sincronizate cu ceasul, la fiecare schimb de date este ntotdeauna
iniializate de ctre cpitan. Odat ce MSSP modul a fost activat, se ateapt de start pentru o condiie de a
aprea. Primul dispozitiv master transmite START bii (logica zero), prin SDA de aderen, apoi 7-bii
adresa selectat dispozitiv slave i, n final, care necesit bitul de scriere de date (0) sau citit (1) la acest
dispozitiv. n consecin, dup nceperea condiie, de opt bii, sunt mutat de SSPSR n registru. Toate
dispozitivele slave mpart aceeai linie de transport i toate vor primi simultan primul octet, dar numai
unul dintre ei are adresa pentru a se potrivi.

Dup ce primul octet a fost trimis (doar 8 bii de date sunt transmise), comandantul se duce n modul de a
primi i ateapt pentru a primi o confirmare de la adresa de meci de dispozitiv care sa produs. n cazul n
care dispozitivul slave de acord trimite datele de bii (1), transferul de date va fi continuat pn cnd
comandantul de dispozitiv (microcontroler) trimite Stop bii.
Aceasta este cea mai simpl explicaie a modului n care comunic dou componente. Daca este necesar,
acest microcontroller este n msur s controleze mai complicate 1024, atunci cnd situaia diferitelor
componente (10-bit adresa) n comun de ctre mai multe dispozitive sunt conectate de masterat. Aceste
dispozitive sunt rareori utilizate n practic i nu este nevoie de a le discuta la o mai mare lungime.
Microcontrolere PIC - De a A la Z

99


Figura urmatoare arat diagrama bloc a MSSP, modul n I2C Mod.
Microcontrolere PIC - De a A la Z

100


Modul de MSSP utilizeaz ase registre I2C pentru operaie. Unele dintre ele sunt prezentate n figura de
mai sus:
SSPCON
SSPCON2
SSPSTAT
SSPBUF
SSPSR
SSPADD
SSPSTAT Register
Microcontrolere PIC - De a A la Z

101

PSP Exemplu de bii
SPI modul master - Acest bii determin datele de faz.
1 - Logica de stat se citete la sfritul anului a datelor de ieire timp.
0 - Logica de stat este citit n mijlocul de date de ieire timp.
SPI slave Acest modul de bii trebuie s fie eliminate SPI, atunci cnd este folosit n mod Slave.
Mod de I2C (principal sau secundar)
1 - Slew rata de control pentru persoane cu modul standard de vitez (100kHz).
0 - Slew rata de control activat pentru modul de mare viteza (400k Hz).
CKE - Ceas margine Selectai bii selecteaza modul de sincronizare.
CKP = 0:
1 - datele sunt transmise n cretere pe marginea ceas puls (0 - 1).
0 - datele sunt transmise pe marginea care se ncadreaz ceas puls (1 - 0).
CKP = 1:
1 - datele sunt transmise pe marginea care se ncadreaz ceas puls (1 - 0).
0 - datele sunt transmise n cretere pe marginea ceas puls (0 - 1).
D / A - Date / Adresa de bii este utilizat numai n modul I2C.
1 - Indic faptul c ultimele octet sau transmise a fost primit de date.
0 - Indic faptul c ultimul octet transmis a fost primit sau adresa.
P - Stop bii este utilizat numai n modul I2C.
1 - STOP bii a fost detectat ultima.
0 - STOP bii nu a fost detectat ultima.
S - Start bii este utilizat numai n modul I2C.
Microcontrolere PIC - De a A la Z

102

1 - START bii a fost detectat ultima.
0 - START bii nu a fost detectat ultima.
R / W - Citeste Scrie bii este utilizat numai n modul I2C. Acest bit deine R / W bii de informaii de la
ultima adres se potrivesc. Acest bit este valabil doar de la adresa la urmtorul meci de bii Start, Stop bit
sau nu ACK bii.
n mod I2C slave
1 - citit de date.
0 - scriere de date.
n mod I2C master
1 - Transmisie este n curs de desfurare.
0 - Transmisie nu este n progres.
UA - Update Adresa de bii este folosit n 10 de bii n modul doar I2C.
1 - Indic faptul c este necesar s actualizai adresa de SSPADD n registru.
0 - Adresa SSPADD n registru este corect i nu este nevoie s fie actualizat.
BF Buffer completa Stare de bii
n timpul primi date (n SPI si I2C moduri)
1 - Primire complet. SSPBUF de registru este plin.
0 - Primii nu complet. SSPBUF de registru este gol.
n timpul transmite date (n modul doar I2C)
1 - transmiterea de date n curs (nu include biii ACK i STOP).
0 - transmite date complet (nu include biii ACK i STOP).
SSPCON Register

Scrie WCOL coliziunilor Detect bii
Microcontrolere PIC - De a A la Z

103

1 - coliziunilor detectat. A scrie la SSPBUF registru a fost ncercat n timp ce I2C condiiile nu au
fost valabile pentru o transmisie de a ncepe.
0 - nr coliziune.
Primiti SSPOV overflow Indicator de bii
1 - Un nou octet este primit n timp ce nc mai deine SSPSR registru de date anterioare.
Deoarece nu exist nici un spaiu pentru a primi noi date, unul dintre aceste dou octei trebuie s
fie eliminate. n acest caz, datele din SSPSR este pierdut.
0 - serie de date este primit n mod corect.
SSPEN - sincrone Activai portul serial bit microcontroller pin determin funcia i iniializeaz MSSP
modul:
n modul SPI
1 - Activeaz modul MSSP i configureaz-pin SCK, SDO, SDI SS i ca surs de pin de port serial.
0 - Dezactiveaz MSSP modul i configureaz ca aceste pin I / O port pin.
n mod I2C
1 - Activeaz modul MSSP i configureaz-pin SDA i SCL ca surs de pin de port serial.
0 - Dezactiveaz MSSP modul i configureaz ca aceste pin I / O port pin.
CKP - Ceas polarity Selectai bii nu este utilizat n mod I2C master.
n modul SPI
1 - Idle de stat pentru ceas este de un nivel ridicat.
0 - Idle de stat pentru ceas este de un nivel sczut.
n mod I2C slave
1 - Activeaz ceas.
0 - Fixeaz ceas de mici. Se utilizeaz pentru a oferi mai mult timp pentru a datelor de stabilizare.
SSPM3-SSPM0 - port serial sincrone Selectai Mod de bii. SSP mod este determinat prin combinarea
acestor bii:

SSPM3

SSPM2

SSPM1

SSPM0
Modul de
0 0 0 0 SPI modul master, ceas = fosc / 4
0 0 0 1 SPI modul master, ceas = Fosc/16
0 0 1 0 SPI modul master, ceas = Fosc/64
0 0 1 1 SPI modul master, ceas = (output rmn) / 2
0 1 0 0 SPI modul slave, SS de aderen de control activat
Microcontrolere PIC - De a A la Z

104

0 1 0 1
SPI modul slave, SS de aderen de control dezactivate, SS poate fi
folosit ca I / O de aderen
0 1 1 0 I2C modul slave, 7 bii adresa de utilizat
0 1 1 1 I2C modul slave, 10-bit adresa de utilizat
1 0 0 0 Mod de I2C master, ceas fosc = / [4 (SSPAD +1)]
1 0 0 1 Masc de folosit n modul slave I2C
1 0 1 0 Nu sunt utilizate
1 0 1 1 I2C controlat modul de masterat
1 1 0 0 Nu sunt utilizate
1 1 0 1 Nu sunt utilizate
1 1 1 0
I2C modul slave, 7 bii adresa de utilizat, porni i opri bii permite
interrupt
1 1 1 1
I2C modul slave, 10-bit adresa de utilizat, porni i opri bii permite
interrupt
SSPCON2 Register

GCEN - Apel general Activai bii
n mod doar I2C slave
1 - Activeaz ntrerupere atunci cnd un apel general adresa (0000h) este primit n SSPSR.
0 - dezactivat general adresa de apel.
ACKSTAT - confirm statutul de bii
n I2C Master Transmisie n modul doar
1 - de acord nu a fost primit de la slave.
0 - de acord a fost primit de la slave.
ACKDT - confirm datele de bii
n I2C Master Primii doar modul de
Microcontrolere PIC - De a A la Z

105

1 - Nu este de acord
0 - confirm
ACKEN - condiie de acord Enable bit
n modul de Primire I2C Master
1 - Ini ierea de acord condiie pe sda i SCL-pin ACKDT i transmite datele de bii. Acesta este n
mod automat eliminate de hardware.
0 - confirm condiie nu este initiat.
RCEN - Primii Enable bit
n mod doar I2C Master
1 - Activeaz date primi n mod I2C.
0 - Primire cu handicap.
PEN - STOP condiie Enable bit
n mod doar I2C Master
1 - initiaza STOP condiie pe pinii SDA si SCL. Ulterior, acest bit este automat autorizat de
hardware.
0 - STOP condiie nu este initiat.
RSEN - START repetate stare activat de bii
n mod doar I2C master
1 - initiaza START condiie pe pinii SDA si SCL. Ulterior, acest bit este automat autorizat de
hardware.
0 - START repetate condiie nu este initiat.
SEN - Start stare activat / Consultanta activat de bii
n mod doar I2C Master
1 - Ini ierea START condiie pe pinii SDA si SCL. Ulterior, acest bit este automat autorizat de
hardware.
0 - START condiie nu este initiat.
Modul n I2C Master
Cele mai comune, atunci cnd este cazul microcontroller funcioneaz ca un cpitan i periferice ca o
component de sclavi. De aceea, aceast carte acoper exact acest mod. Este, de asemenea, a considerat
c adresa este format din 7 bii, i dispozitiv conine doar un microcontroler (un dispozitiv de masterat).
Microcontrolere PIC - De a A la Z

106

Pentru a activa modul MSSP n acest mod, este necesar s se fac urmtoarele:
Setai rata baud (SSPADD registru), oprii slew rate de control (prin stabilirea de PSP pic de SSPSTAT de
registru) i selectai modul de masterat (SSPCON registru). Dup ce a fost terminat de pregtire i modul a
fost activat (SSPCON registru: SSPEN bii), trebuie s ateptai pentru interne, pentru a electronicelor
signalize c totul este pregtit pentru transmiterea datelor, i anume, de a SSPIF bii registrul PIR1 este
setat.
Acest bii ar trebui s fie autorizat de ctre software-ul i dup aceast microcontroller este gata pentru a
ncepe "comunicare" cu periferice.

Transmisie de date n I2C Master Mode
Fiecare ceas pe SDA condiia de aderen ncepe cu logica de zero (0), care apare la setarea de bii ale
SEN SSPCON2 registru. Chiar activat, microcontroler-a s ateptai un anumit timp nainte de a ncepe
de comunicare. Este asa-numita Start condiie care n timpul controalelor interne i preparatele care sunt
efectuate. Dac sunt ndeplinite toate condiiile, SSPIF bii de PIR1 este stabilit i de transfer de date
ncepe de ndat ce SSPBUF registru este ncrcat.
Microcontrolere PIC - De a A la Z

107


Deoarece maxim 112 de circuite integrate simultan mai mpart aceeai linie de transport, primul octet de
date trebuie s conin adresa, care se potrivete doar un dispozitiv slave. Fiecare componenta are propria
adresa care figureaz n fia tehnic corespunztoare. Al optulea bit din primul octet de date specific
direcia de transmitere a datelor, iewhether microcontroller este de a trimite sau primi date. n acest caz,
este vorba de date i de a primi cel de al optulea bit, prin urmare, este logica de zero (0).

Cnd apare adresa de meci, microcontroller trebuie s ateptai pentru confirme datele de bii. Dispozitiv
slave recunoate adresa meci de compensare a ASKSTAT bii de SSPCON2 registru. n cazul n care se
potrivesc corect, a avut loc, toate reprezentnd octei de date sunt transmise n acelai mod.
Transmiterea datelor se termina prin stabilirea de bii ale SEN SSPCON2 registru. Deci, denumit n stare
apare STOP, care permite de a primi pin SDA pulsul condiie: Start - Adresa - de acord - de date - de acord
.... de date - de acord - Stop!


Microcontrolere PIC - De a A la Z

108

Receptie de date n I2C Master Mode
Pregtirea pentru primirea de date sunt similare cu cele pentru transmisii de date, cu excepia c ultima pic
de primul octet trimis (coninnd adresa) este o logica (1). Se specific faptul c, de masterat, dorete s
primeasc date de la adreseaz dispozitiv slave. n ceea ce privete microcontroler, apar urmtoarele
evenimente:
Dup interne sunt preparate finite i a ncepe bit este setat, dispozitivul slave pornete trimite un octet la un
moment dat. Aceste octei sunt stocate n registrul de serie SSPSR. Fiecare de date este, dup primirea
ultimele opt bii, ncrcate la SSPBUF registru de unde se poate citi. Prin citirea acestui registru, de acord
trimis de bii este n mod automat, ceea ce nseamn c dispozitivul master este gata de a primi noi date.
La sfritul, la fel de transmisie de date, date de receptie se termina prin setarea STOP bii:

Start - Adresa - de acord - de date - de acord .... De date - de acord - Stop!
n aceast condiie pulsul, de bii de acord este trimis la dispozitivul slave.
Rata de Generatorul de baud
Pentru a sincroniza de transmitere a datelor, toate evenimentele care au loc pe SDA de aderen trebuie s
fie sincronizate cu ceas generate de masterat n dispozitiv. Acest ceas este generat de un simplu oscilatorul
a cror frecven depinde n principal de microcontroler oscilatorul de frecven, valoarea scris la
SSPADD registru i cea curent, n modul SPI.
Microcontrolere PIC - De a A la Z

109

Frecven de ceas de modul descris n aceast carte selectat depinde de cristal de cuar i SPADD registru.
Formula utilizat pentru a calcula, este prezentat n figura de mai jos.

Utile note ...
Atunci cnd comunic cu microcontroler periferice i componente, se poate ntmpla ca transferul de date
din anumite motive, nu reuete. n acest caz, este recomandat s verificai starea de unele bii, care poate
clarifica problema. In practica, statul a acestor bii, este verificat de ctre executnd un scurt subroutine
dup fiecare octet de transmisie i recepie (doar n cazul n).
WCOL (SPCON, 7) - Dac ncercai s scriei un nou date la SSPBUF n timp ce un alt registru de date
transmite / primi este n curs de desfurare, WCOL bii vor fi stabilite i coninutul registrului de SSPBUF
rmne neschimbat. Scrie nu se produce. Dup aceasta, WCOL de bii trebuie s fie eliminate n software-
ul.
BF (SSPSTAT, 0) - n transmite Mod, acest bit este setat cnd procesor scrie la SSPBUF registru i
rmne stabilit, pn la octet n format de serie este mutat de la SSPSR de registru. n modul de a primi,
acest bit este setat atunci cnd datele sau adresa este ncrcat la SSPBUF registru. Este golit atunci cnd
SSPBUF registru este citit.
SSPOV (SSPCON, 6) - n modul de a primi, acest bit este setat cnd un nou octet este primit de SSPSR
serial de comunicaie prin intermediul registrului, ntruct a primit anterior de date nu a fost citit de la
SSPBUF registru, nc.
SDA i SCL Pins - Cnd este activat modul spp., acestea se transform ntr-pin Deschide Drain iesiri.
Aceasta nseamn c aceste pin trebuie s fie conectat la rezistene care, la cellalt capt sunt conectate la
tensiunea de alimentare pozitiv.
Microcontrolere PIC - De a A la Z

110


Pe scurt:
n scopul de a stabili serial de comunicaie n mod I2C, urmtoarele ar trebui s se fac:
Stabilirea i Modulul Trimiterea Adresa:
Valoare pentru a determina rata baud ar trebui s fie scrise n registru SSPADD.
SlewRate de control ar trebui s fie oprit, prin stabilirea de PSP de bii de SSPSTAT registru.
Pentru a selecta modul de Master, 1000 binare de valoare ar trebui s fie scrise n SSPM3-SSPM0
biii din registru SSPCON1.
SEN de bii din registrul SSPCON2 ar trebui s se stabileasc (condiie START).
SSPIF de bii este setat automat la sfritul START condiie, atunci cnd modulul este gata s
funcioneze. Aceasta ar trebui s fie eliminate.
Slave adresa ar trebui s fie scrise n registru SSPBUF.
Atunci cnd este trimis de octei, SSPIF bii (Interrupt) este setat automat n momentul de bii de
acord a fost primit de la Slave dispozitiv.
Transmisie de date:
De date este de a se trimite ar trebui s fie scrise n registru SSPBUF.
Atunci cnd este trimis de octei, SSPIF bii (Interrupt) este setat automat n momentul de bii de
acord a fost primit de la Slave dispozitiv.
n scopul de a informa Slave dispozitiv care transmite este complet, STOP condiie ar trebui s fie
iniiat prin stabilirea de bii al PEN SSPCON registru.
Primire de date:
n scopul de a permite primi RSEN pic de SSPCON2 de registru ar trebui s fie stabilite.
SSPIF de bii signalizes primi date. Cnd se citesc datele din registrul SSPBUF, ACKEN pic de
SSPCON2 de registru ar trebui s fie stabilite n scopul de a permite trimiterea de acord bii.
n scopul de a informa Slave dispozitiv care transmite este complet, STOP condiie ar trebui s fie
iniiat prin stabilirea de bii al PEN SSPCON registru.




Microcontrolere PIC - De a A la Z

111


CAPITOLUL 7: ANALOGIC MODULE

n afar de un numr mare de digitale I / O linii, PIC16F887 conine 14 intrri analogice. Ele
microcontroler permite nu numai s recunoasc dac unii PIN-ul este condus pentru logicii sau un zero (0
sau +5 V), ci de a masura cu precizie sale de tensiune i de ao transforma n valoare numeric, i anume,
format digital. Intreaga procedura se desfoar n Convertor A / D module, care are urmtoarele
caracteristici:
Genereaz un convertor de 10-bii binar rezultat, folosind metoda de apropiere i succesive de
magazine de conversie rezultate n registrele ADC (ADRESH si ADRESL).
Exist 14 intrri separate analogice.
The Convertor A / D permite o conversie a semnalului analogic de intrare la un 10-bit de
reprezentare binar c semnalul.
Prin selectarea tensiune trimiteri Vref-i Vref +, rezoluia minima de calitate sau de conversie poate
fi adaptat la diferite nevoi.
Mod Registre si ADC
Chiar dac utilizarea Convertor A / D pare a fi foarte complicat, aceasta este, n principiu, foarte simplu,
folosind mai simpl dect timp de serie i modul de comunicare, oricum.

Fig. Modul de 7-1 ADC i Registre
Microcontrolere PIC - De a A la Z

112

Modulul este sub control de bii de patru registre:
ADRESH - Contine de mare de octei rezultat din conversie
ADRESL - Contine sczut de octei rezultat din conversie
ADCON0 - registrul de control 0
ADCON1 registrul de control 1
ADRESH si ADRESL Registre
La conversia analogic ntr-o valoare digitala unul, rezultatul a 10-bit A / D conversie vor fi stocate n
aceste dou registre. n scopul de a face cu aceast valoare mai uor, poate aprea n dou formate de-
stnga i dreapta justificate. AD F / M de bii din registrul ADCON1 determin formatul de conversie
rezultat (a se vedea figura). n cazul n care Convertor A / D nu este folosit, aceste registre pot fi utilizate
ca scop general registre.

Fig. 7-2 ADRESH si ADRESL Registre
A / D de achizitie a Cerine
Pentru a-i ndeplini ADC specificate de precizie, este necesar s se prevad anumite ntrziere ntre timp
selectarea specifice analogic de intrare i msurarea n sine. Acest timp este numit "achiziia de timp" si
mai ales depinde de sursa de impedanta. Exist o ecuaie utilizate pentru calcularea corect, care n acest
moment cel mai rau caz, se ridic la aproximativ 20uS. Succint, dup alegerea (sau modificarea) analogice
de intrare i nainte de a ncepe de conversie este necesar s se prevad cel puin 20uS de ntrziere, pentru
a permite ACD maxim de conversie de precizie.
ADC Ceas Perioada
O timpul necesar pentru a termina un pic de conversie este definit ca TAD. TAD solicitat trebuie s fie de
cel puin 1,6-ne. Un complet 10-bit A / D conversie este un pic mai mult de 11 de ateptat i sumele TAD
perioade. Cu toate acestea, de vreme ce att de conversie i de surs de frecven de ceas sunt determinate
Microcontrolere PIC - De a A la Z

113

de software-ul, unul dintre disponibile combinaie de bii ADCS1 i ADCS0 ar trebui s fie selectate,
nainte de msurare de tensiune pe unele analogic de intrare ncepe. Aceti bii sunt stocate n registrul
ADCON0.
ADC Ceas
Sursa
ADCS1 ADCS0
Dispozitiv de frecven (fosc)
20 MHz 8 Mhz 4 Mhz 1 Mhz
Fosc / 2 0 0 100 ns 250 ns 500 ns 2-ne
Fosc / 8 0 1 400 ns 1-ne 2-ne 8 noi
Fosc/32 1 0 1,6-ne 4-ne 8 noi 32 noi
FRC 1 1 2 - 6-ne 2 - 6-ne 2 - 6-ne 2 - 6-ne
Orice schimbare n sistemul de frecven de ceas va afecta ADC ceas de frecven, care poate afecta ADC
rezultat. Dispozitive caracteristicile de frecven sunt prezentate n tabelul de mai sus. Valorile umbrit n
afara celulelor sunt recomandate de gama.
Cum se utilizeaz Convertor A / D?
n scopul de a permite Convertor A / D pentru a rula fr probleme, precum i pentru a evita rezultate
neateptate, este necesar s se ia n considerare urmtoarele:
Convertor A / D nu difer ntre tensiuni analogice i digitale. n scopul de a evita erorile de
msurare sau a unor daune la chip, insigne ar trebui s fie con inchipuit ca intrri analogice, nainte
de conversie ncepe. De bii, utilizat pentru c pur pun sunt stocate n TRIS i ANSELH registre.
Cnd port analogic cu factori de marcat ca CH0-CH13 este citit, corespunztoare bii, vor fi
conduse de a logicii de zero (0).
Roughly vorbind, n Convertor de tensiune de msur se bazeaz pe compararea tensiunii de intrare
cu scara interne, care are 1024 mrci (210 = 1024). Sczut is scar marca standuri pentru Vref
tensiune, n timp ce cel mai mare marca standuri pentru Vref + tensiune. Figura de mai jos arat
selectabil de referent tensiuni i valorile minime i maxime, de asemenea.

Fig. 7-3 Cum se utilizeaz A / D Converter
Microcontrolere PIC - De a A la Z

114

ADCON0 Register

ADCS1, ADCS0 - A / D Conversie Ceas Selectai bii, selectai ceasul de frecven utilizate interne de
sincronizare a Convertor A / D. Aceasta afecteaz, de asemenea, durata de conversie.
ADCS1 ADCS2 Ceas
0 0 Fosc / 2
0 1 Fosc / 8
1 0 Fosc/32
1 1 RC *
* Ceasul este generat de ctre oscilatorul intern, care este construit n Convertor.
CHS3-CHS0 - analogic Canal Selectai bii, selectai un pin sau un canal analogic pentru con versiune,
i anume, tensiunea de msurare:
CHS3 CHS2 CHS1 CHS0 Canal PIN
0 0 0 0 0 RA0/AN0
0 0 0 1 1 RA1/AN1
0 0 1 0 2 RA2/AN2
0 0 1 1 3 RA3/AN3
0 1 0 0 4 RA5/AN4
0 1 0 1 5 RE0/AN5
0 1 1 0 6 RE1/AN6
0 1 1 1 7 RE2/AN7
1 0 0 0 8 RB2/AN8
1 0 0 1 9 RB3/AN9
1 0 1 0 10 RB1/AN10
1 0 1 1 11 RB4/AN11
1 1 0 0 12 RB0/AN12
1 1 0 1 13 RB5/AN13
1 1 1 0 CVref
Microcontrolere PIC - De a A la Z

115

1 1 1 1 Vref = 0.6V
Go / Adoptat - A / D Conversie Stare de bii determin starea actual de conversie:
1 - A / D conversie este n curs de desfurare.
0 - A / D conversie este complet. Acest bit este automat autorizat de ctre hardware atunci cnd
A / D conversie este finalizat.
Adon - A / D pe bii permite Convertor A / D.
1 - Convertor A / D este activat.
0 - Convertor A / D este dezactivat.
ADCON1 Register

AD F / M - A / D Result Format Selectai bii
1 - Conversie rezultat dreptul de justificate. ase din cele mai semnificative biii de ADRESLH nu
sunt folosite.
0 - Conversie rezultat stnga. Sase cel mai puin semnificativ bit al ADRESL nu sunt folosite.
VCFG1 - tensiune Referin bii selecteaz negativ sursa de tensiune de referin necesare pentru
Convertor A / D de operare.
1 - negative de tensiune de referin este aplicat pe Vref de pini.
0 - Tensiunea de alimentare Vss negativ este utilizat ca surs de tensiune de referin.
VCFG0 - tensiune Referin bii selecteaz pozitive sursa de tensiune de referin necesare pentru
Convertor A / D de operare.
1 - pozitiv de tensiune de referin este aplicat pe Vref + PIN.
0 - Tensiunea de alimentare Vdd este utilizat ca surs de referin de tensiune pozitiv.
Pe scurt:
n scopul de a msurii de tensiune pe un pin de intrare Convertor A / D, ar trebui s se fac urmtoarele:
Pasul 1 - Configurarea de port:
Microcontrolere PIC - De a A la Z

116

Scrie o logica (1) de bii corespunztoare din registrul TRIS s configurai-o ca intrare.
Scrie o logica (1) de bii corespunztoare a ANSEL nregistreaz-te pentru a configura, ca analogic
de intrare.
Pasul 2 - Configurarea modulului ADC:
Configurare de tensiune de referin n registrul ADCON1.
Selectai ADC ceas de conversie n registrul ADCON0.
Selectai unul din canalele de intrare CH0-CH13 din registrul ADCON0.
Selectai formatul de date folosind AD F / M bii de ADCON1 registru.
Activai Convertor A / D de stabilire a Adon de bii registrul ADCON0.
Pasul 3 - Configurarea ADC Interrupt (opional):
Cer senin, ADIF de bii.
Setai Adie, PEIE i GIE bii.
Pasul 4 - Stai necesare pentru achiziionarea de timp (aproximativ 20uS) pentru a trece.
Pasul 5 - Start conversie prin stabilirea de go / Adoptat de bii registrul ADCON0.
Pasul 6 - Stai ADC de conversie pentru a finaliza.
Este necesar s se verifice dac n bucla de program de go / Adoptat PIN-ul este golit sau ateptai
un A / D interrupt (trebuie s fie activat anterior).
Pasul 7 - Citeste ADC rezultate:
Citeste ADRESH si ADRESL registre.
Comparator analogic
n plus fa Convertor A / D, este mai mult un modul care pn destul de recent a fost ncorporat numai n
circuite integrate care aparin aa numitele electronice analogice. Datorit faptului c este greu posibil
pentru a gsi mai multe complexe automate orice dispozitiv care ntr-un fel nu folosete aceste circuite,
dou de nalt calitate, mpreun cu comparator suplimentare electronice sunt integrate n microcontroler si
sa conectat la pin.
Cum face un comparator opereze? Practic, este un comparator analogic, care compar amplificator
magnitudinea de tensiuni la dou intrri. Privind la caracteristicile sale fizice, el are dou intrri i o ieire.
n funcie de care mai mare a tensiunii de intrare (analogic valoare), o logica de zero (0) sau o logica (1)
(valori digitale) va aprea pe ei de ieire:
Microcontrolere PIC - De a A la Z

117


Fig. 7-6 comparator analogic
Cnd analogic de tensiune la Vin-este mai mare dect analogic de tensiune la Vin +, datele de
ieire ale este un comparator digital de nivel sczut.
Cnd analogic de tensiune la Vin + este mai mare dect la analogic de tensiune-Vin, datele de
ieire ale este un comparator digital de nivel nalt.
De microcontroler PIC16F887 are dou astfel de comparator de tensiune ale cror date de intrare sunt
conectate la I / O-pin RA0-RA3, ntruct sunt conectate la ieirile de pin RA4 i RA5. n plus, exist de
asemenea, un referent surs intern de tensiune pe sine, chip, dar acesta va fi discutat mai tarziu.
Aceste dou circuite sunt sub control de bii, stocate n urmtoarele registre:
CM1CON0 este n controlul comparator C1;
CM2CON0 este n controlul comparator C2;
CM2CON1 este n controlul comparator C2;
Referin intern Surs de tensiune
Una din dou tensiuni analogice, cu condiia de pe factori de comparator este, de obicei, stabil i
unchangeable. Datorit acestor caracteristici, este numita "tensiune de referin" (Vref). Pentru a genera o,
att interne, externe i speciale de surs de tensiune pot fi folosite. Dup selectarea surs de tensiune, Vref
este derivat de la ea de ctre mijloacele de ladder de reea care const din 16 rezistene care divider form
de tensiune. De surs de tensiune este selectabil prin faptul c ambele capete ale divider prin VRSS bii
de VRCON registru.
n plus, fraciunea de tensiune furnizate de rezisten scrii de reea pot fi selectate prin biii VR0-VR3 i
utilizate ca referin de tensiune. A se vedea figura de mai jos.
Microcontrolere PIC - De a A la Z

118


Fig. 7-7 VREF
Comparator de tensiune de referin are 2 game cu 16 nivele de tensiune, n fiecare interval. Gama de
selecie este controlat de bii VRR a VRCON registru. Selectate de tensiune de referin pot fi de ieire la
RA2/AN2 PIN.
Chiar daca principala idee a fost de a obine variind de tensiune de referin pentru exploatarea analogice,
module, un simplu Convertor A / D, care este obinut n mod prea. Acest convertor este foarte util n
unele situaii.
Este exploatarea este sub control a VRCON registru.
ntreruperea comparator i Funcionare
De pavilion de bii CMIF Senzor de registru este setat la fiecare schimbare de logica de stat cu privire la
orice comparator de ieire. Aceleai modificri de asemenea, cauza o ntrerupere de bii n cazul n care
urmtoarele sunt stabilite:
CMIE bii din registrul PIE
PEIE bii din registrul INTCON
GIE bii din registrul INTCON
Dac ntrerupere este activat, orice schimbare privind comparator de ieire pot trezim cu microcontroler
din starea de repaus dac acesta este modul n care modul de configurare.
Microcontrolere PIC - De a A la Z

119

CM1CON0 Register

Biti de acest registru sunt n control al comparator C1. Aceasta afecteaz, n principal de configurare a
factorilor de producie. Pentru a nelege mai bine, uita-te la cifra de mai jos din care rezult doar o parte a
electronicii direct afectate de bii din acest registru.

C1ON - comparator C1 Activai bii permite comparator C1.
1 - comparator C1 este activat.
0 - comparator C1 este dezactivat.
C1OUT - comparator de iesire C1 bii este comparator C1 ieire bii.
Dac C1POL = 1 (comparator de ieire este inversat)
1 - analogic de tensiune la C1Vin + este mai mic dect analogic de tensiune la C1Vin-.
0 - analogic de tensiune la C1Vin + este mai mare dect analogic de tensiune la C1Vin-.
Dac C1POL = 0 (comparator de ieire este non-Inverted)
Microcontrolere PIC - De a A la Z

120

1 - analogic de tensiune la C1Vin + este mai mare dect analogic de tensiune la C1Vin-.
0 - analogic de tensiune la C1Vin + este mai mic dect analogic de tensiune la C1Vin-.
C1OE comparator de iesire C1 Activai bii.
1 - comparator C1OUT de ieire este conectat la pin C1OUT .*
0 - comparator de ieire este numai intern.
* Pentru a permite C1OUT bii pentru a fi prezent pe PIN-ul, dou condiii trebuie s fie ndeplinite:
C1ON = 1 (trebuie s fie pe comparator) i corespunztoare TRIS bii = 0 (PIN trebuie s fie configurat ca
ieire).
C1POL - comparator de iesire C1 polarity Selectai bii permite comparator C1 puse n stare de a fi
inversat.
1 - comparator de ieire C1 este inversat.
0 - comparator de ieire C1 nu este inversat.
C1R - comparator C1 Referin Selectai bii
1 - Non-inverting input C1Vin + este conectat la tensiunea de referin C1Vref.
0 - Non-inverting input C1Vin + este conectat la C1IN + PIN.
C1CH1, C1CH0 - comparator C1 Canal Selectai bii
C1CH1 C1CH0 Comparator C1Vin-input
0 0 De intrare-C1Vin este conectat la C12IN0-pin
0 1 De intrare-C1Vin este conectat la C12IN1-pin
1 0 De intrare-C1Vin este conectat la C12IN2-pin
1 1 De intrare-C1Vin este conectat la C12IN3-pin
CM2CON0 Register

Biti din acest registru de control sunt n comparator de C2. Asemntor cu cazul anterior, cifra arat
schematic simplificat de circuit afectate de bii din acest registru.
Microcontrolere PIC - De a A la Z

121


C2ON - comparator C2 Activai bii permite comparator C2.
1 - comparator C2 este activat.
0 - comparator C2 este dezactivat.
C2OUT - comparator de iesire C2 bii este comparator C2 ieire.
Dac C2POL = 1 (comparator de ieire inversat)
1 - analogic de tensiune la C1Vin + este mai mic dect analogic de tensiune la C1Vin-.
0 - analogic de tensiune la C1Vin + este mai mare dect analogic de tensiune la C1Vin-.
Dac C2POL = 0 (comparator de ieire nu-Inverted)
1 - analogic de tensiune la C1Vin + este mai mare dect analogic de tensiune la C1Vin-.
0 - analogic de tensiune la C1Vin + este mai mic dect analogic de tensiune la C1Vin-.
C2OE - comparator C2Output Enable bit
1 - comparator C2OUT de ieire este conectat la pin C2OUT .*
0 - comparator de ieire este numai intern.
* Pentru a permite C2OUT bii pentru a fi prezent pe PIN-ul, dou condiii trebuie s fie ndeplinite:
C2ON = 1 (trebuie s fie pe comparator) i corespunztoare TRIS bii = 0 (PIN trebuie s fie configurat ca
ieire).
C2POL - comparator de iesire C2 polarity Selectai bii permite comparator C2 puse n stare de a fi
inversat.
Microcontrolere PIC - De a A la Z

122

1 - comparator de ieire C2 este inversat.
0 - comparator de ieire C2 nu este inversat.
C2R - comparator C2 Referin Selectai bii
1 - Non-inverting input C2Vin + este conectat la tensiunea de referin C2Vref.
0 - Non-inverting input C2Vin + este conectat la C2IN + PIN.
C2CH1, C2CH0 comparator C2 Canal Selectai bii
C2CH1 C2CH0 Comparator C2Vin-input
0 0 De intrare-C2Vin este conectat la C12IN0-pin
0 1 De intrare-C2Vin este conectat la C12IN1-pin
1 0 De intrare-C2Vin este conectat la C12IN2-pin
1 1 De intrare-C2Vin este conectat la C12IN3-pin
CM2CON1 Register

MC1OUT oglind Copiere C1OUT de bii
MC2OUT oglind Copiere C2OUT de bii
C1RSEL comparator C1 Referin Selectai bii
1 - selectabile de tensiune CVref este utilizat n C1Vref sursa de tensiune de referin.
0 - Fix 0.6V tensiune de referin este utilizat n C1Vref sursa de tensiune de referin.
C2RSEL - comparator C2 Referin Selectai bii
1 - selectabile de tensiune CVref este utilizat n C2Vref sursa de tensiune de referin.
0 - Fix 0.6V tensiune de referin este utilizat n C2Vref sursa de tensiune de referin.
T1GSS - Timer1 Poarta Sursa Selectai bii
1 - Timer T1gate surs este T1G.
Microcontrolere PIC - De a A la Z

123

0 - Timer T1gate surs este SYNCC2OUT comparator.
C2SYNC - comparator de iesire C2 Sincronizare bii
1 - comparator de ieire C2 este sincronizat care se ncadreaz la marginea TMR1 Timer ceas.
0 - comparator de ieire este asincrone de semnal.
VRCON Register

VREN comparator de tensiune C1 Referin Enable bit
1 - sursa de tensiune de referin CVref este creat.
0 - sursa de tensiune de referin CVref este creat off.
VROE comparator de tensiune C2 Referin Enable bit
1 - Tensiunea de referin CVref este conectat la pin.
0 - tensiune de referin CVref este deconectat de la PIN.
VRR - CVref Gama de bii de selecie
1 - sursa de tensiune de referin este setat la interval redus.
0 - sursa de tensiune de referin este setat la gama de mare.
VRSS - comparator de selecie Vref Gama de bii
1 - sursa de tensiune de referin este n gama de Vref + pentru a-Vref.
0 - sursa de tensiune de referin este n gama de Vdd - Vss (tensiune de alimentare).
VR3 - VR0 CVref Valoare de selectie
Dac VRR = 1 (sczut game)
Tensiune de referin este calculat folosind formula: CVref = ([VR3: VR0] / 24) Vdd
Dac VRR = 0 (gama de mare)
Tensiune de referin este calculat folosind formula: CVref = Vdd / 4 + ([VR3: VR0] / 32) Vdd
Microcontrolere PIC - De a A la Z

124

Pe scurt:
n scopul de a utiliza corect construit n comparatori, este necesar s se fac urmtoarele:
Pasul 1 - Configurarea modulului:
Pentru a selecta modul adecvat, de registrele de bii CM1CON0 i CM2CON0 ar trebui s fie
configurat. ntreruperea ar trebui s fie persoane cu privire la orice schimbare de modul.
Pasul 2 - Configurarea interne Vref sursa de tensiune de referin (numai atunci cnd este folosit). n
VRCON registru este necesar pentru a:
Selectai una din cele dou game de tensiune folosind VRR bii.
Configurare Vref este necesar, folosind bii VR3 - VR0.
Setai VROE bii, dac este necesar.
Activai Vref sursa de tensiune de stabilire a VREN pic.
Formula utilizat pentru a calcula tensiunea de referin:
VRR = 1 (sczut game)
CVref = ([VR3: VR0] / 24) VLADDER

VRR = 0 (gama de mare)
CVref = (VLADDER / 4) + ([VR3: VR0] VLADDER/32)

Vladder = Vdd sau ([Vref +] - [Vref-]) sau Vref +
Pasul 3 - Incepand de exploatare:
Activeaz ntrerupere prin setarea CMIE bii (PIE registru), PEIE i GIE (att n registrul
INTCON).
Citeste C1OUT bii i C2OUT a CMCON registru.
Citeste pavilion de bii CMIF Senzor de registru. Dup ce a fi stabilite, acest bit trebuie s fie
eliminate n software-ul.













Microcontrolere PIC - De a A la Z

125



CAPITOLUL 8: ALTE MCU'S CIRCUITE

Dup cum se vede n figura de mai jos, ceas semnal poate fi generat de una din cele dou construit n
oscillators.

Fig. 8-1 Dou surse de clock
Externe oscilatorul este instalat n microcontroler i conectat la pinii OSC1 i OSC2. Este numit
"externe", deoarece se bazeaz pe extern circuitry pentru a semnalului de ceas i frecvena de stabilizare,
cum ar fi stand-alone oscillator, quarts cristal, ceramica sau resonator rezisten-condensator de circuit. Ea
poate fi de sine stttoare oscillator, quarts cristal, ceramica sau resonator rezisten-condensator de circuit.
Mod de oscilatorul este selectat de ctre biii de octei n timpul trimis de programare, asa-numita Config
Word.
Oscilatorul intern este alctuit din dou separate, interne oscillators:
HFINTOSC este de o nalt frecven intern oscilatorul care funcioneaz la 8MHz. Microcontroler pot
utiliza surse de ceas generate de faptul c la frecvena sau dup ce au fost impartite in prescaler.
Microcontrolere PIC - De a A la Z

126

De LFINTOSC este o frecven sczut oscilatorul intern, care funcioneaz la 31 kHz. Sursele sale de
ceas sunt utilizate pentru urmrii-cine i de putere Timer-up, dar poate fi de asemenea folosite ca surs
pentru un ceas de funcionare a ntregului microcontroler.
Sistemul de ceas poate fi selectat dintre externe sau interne de ceas de surse, prin intermediul Sistemului
Ceas Selectai (CS) de bii din registrul OSCCON.
OSCCON Register
OSCCON registrul de control de sistem i de frecven de ceas de selecie opiuni. Acesta conine
urmtoarele bii: bii, frecvena de selecie (IRCF2, IRCF1, IRCF0), frecven biii de stare (HTS, LTS),
ceasul sistem de control de bii (OSTA, CS).

IRCF2-0 - Oscilator intern n frecven Selectai bii. Combinaie a acestor trei bii determin rata
divider. Ceas de frecven de interne oscilla tor este, de asemenea, determinat n acest mod.
IRCF2 IRCF1 IRCF0 Frecventa OSC.
1 1 1 8 MHz HFINTOSC
1 1 0 4 MHz HFINTOSC
1 0 1 2 MHz HFINTOSC
1 0 0 1 MHz HFINTOSC
0 1 1 500 kHz HFINTOSC
0 1 0 250 kHz HFINTOSC
0 0 1 125 kHz HFINTOSC
0 0 0 31 kHz LFINTOSC
OSTS - Oscilator de Start-up time-out Stare de bii care indic o surs de ceas este n prezent n uz.
Acest bit se poate citi numai.
1 - externe oscilatorul de ceas este n uz.
0 - Unul dintre interne oscillators ceas este n uz (HFINTOSC sau LFINTOSC).
HTS - HFINTOSC Stare de bii (8 MHz - 125 kHz) indic dac nalt frecven intern oscilatorul
funcioneaz ntr-un mod stabil.
Microcontrolere PIC - De a A la Z

127

1 - HFINTOSC este stabila.
0 - HFINTOSC nu este stabil.
LTS - LFINTOSC Stabile bit (31 kHz) indic dac-frecven sczut oscilatorul intern funcioneaz ntr-
un mod stabil.
1 - LFINTOSC este stabila.
0 - LFINTOSC nu este stabil.
CS - System Ceas Selectai bii care determin oscilatorul este de a fi utilizate ca o surs de ceas.
1 - oscilatorul intern este utilizat pentru sistemul de ceas.
0 - externe oscilatorul este utilizat pentru sistemul de ceas.
Mod de oscilatorul este stabilit de bii ntr-Config Word care sunt scrise n memorie n timpul
programare microcontroler.
Ceas Moduri externe
n scopul de a permite externe oscilatorul s opereze la viteze diferite i de a folosi diferite componente de
frecven de stabilizare, acesta poate fi configurat s funcioneze ntr-una din mai multe moduri. Modul de
selecie se face dup programul scris i compilarea. Mai nti de toate, este necesar s activai program de
pe PC-ul folosit pentru programare. n acest caz, este vorba despre PICflash program. Facei clic pe
oscilatorul combox i selectai o opiune din lista derulant. Dup aceea, este necesar de bii, vor fi
stabilite n care devine din ce n ce mod o parte din mai muli octei, care mpreun constituie Config
Word.
n perioada de programare, de octei de configurare Word sunt scrise n memoria microcontroler-ROM i
stocate n registrele speciale de care nu sunt disponibile pentru utilizator. Pe baza acestor bii,
microcontroller "tie" ce s facei, cu toate c nu este specificat n mod explicit (scris) de program.
Microcontrolere PIC - De a A la Z

128


Externe oscilatorul CE n modul de
Este posibil ca ceasul (CE) Mod utilizeaz sistemul de ceas configurat surs extern de la oscilatorul.
Frecvena ceasului aceast surs este nelimitat (0 - 20MHz).

Acest modul are urmatoarele avantaje:
Este posibil ca ceasul este conectat la sursa de intrare OSC1 i OSC2 este disponibil n scop
general pentru I / O.
Este posibil s se sincronizeze funcionarea microcontroller cu restul electronicii de la bord.
n acest mod de operare microcontroller ncepe imediat dup ce este pe putere. Nu exist nici o
ntrziere, necesare pentru stabilizarea frecven.
Microcontrolere PIC - De a A la Z

129

Oprirea temporar de externe ceas de intrare are ca efect stoparea dispozitiv lsnd toate datele
intacte. La renceperea externe ceas, dispozitivul se reia operaiunea are ca i cum nimic nu sa
ntmplat.

Externe n oscilatorul LP, XT sau modul HS

The LP, XT HS moduri de sprijin i de utilizare a oscilatorul interne pentru configurarea surs de ceas.
Frecvena de aceast surs este determinat de cuar de cristal sau ceramica resonators conectat la pinii
OSC1 i OSC2. n funcie de caracteristici ale componentei n uz, selectai una dintre urmtoarele moduri:
Mod LP (Low Power) este utilizat pentru frecven redus, cristal de cuar numai. Acest mod este
proiectat pentru a conduce vehicule doar 32,768 kHz cristale de cuar de obicei nglobate n ceasuri. Este
uor s le recunoasc de dimensiuni mici i specifice cilindric forma. n prezent, consumul este cel mai
puin dintre cele trei moduri.
XT mod este folosit pentru intermediar-cristale de cuar de frecven pn la 8 MHz. n prezent,
consumul mediu este de cele trei moduri.
Microcontrolere PIC - De a A la Z

130

Mod HS (High Speed) este folosit pentru mare-cristale de cuar de frecven peste 8 MHz. n prezent,
consumul este cel mai mare dintre cele trei moduri.

Ceramic resonators XT sau n modul HS

Ceramic resonators sunt de caracteristicile lor similare cu cristale de cuar. De aceea, acestea sunt
conectate n acelai mod n totalitate. Spre deosebire de cristale de cuar, acestea sunt mai ieftine i
oscillators care le conin au un pic mai ru caracteristici. Acestea sunt utilizate pentru frecvene de ceas
cuprinse ntre 100 kHz i 20 MHz.
Externe n oscilatorul RC RCIO i modul de
Exist cu siguran numeroase avantaje n folosirea elementelor de frecven de stabilizare, dar uneori
acestea nu sunt cu adevrat necesare. Este cea mai mare parte destul de oscilatorul nu functioneaza la
frecventa precis definite, astfel nct integrarea unor astfel de elemente de scumpe reprezint o risip de
bani. Cel mai simplu i mai ieftin n aceste situaii de soluie este s folosii o rezisten i un condensator
de funcionare a oscilatorul. Exist dou moduri:
Microcontrolere PIC - De a A la Z

131


Mod de RC. n mod RC, RC circuitul este conectat la OSC1 de aderen dup cum se arat n figura.
OSC2 de aderen iesiri de oscilatorul RC frecven mprit la 4. Acest semnal poate fi folosit pentru
calibrare, de sincronizare sau alte conditii.

Mod de RCIO. Similar cu cazul precedent, a circuitului RC este conectat la OSC1 PIN. Acest moment,
sunt disponibile OSC2 PIN-ul este folosit ca scop general suplimentare I / O de aderen.
n ambele cazuri, este recomandat s utilizai componente, aa cum este artat n figura.
Frecvena de astfel de oscilatorul este calculat n conformitate cu formula f = 1 / T n care:
f = frecvena [Hz]
T = R * C = constanta de timp [s]
Rezistor R = rezistena []
C = capacitatea de condensator [F]
Ceas intern Moduri
Oscilatorul intern al circuitului este alctuit din dou oscillators separate care pot fi selectate ca ceasul de
sistem sursa:
HFINTOSC oscilatorul este de fabrica calibrate i opereaz la 8 MHz. Frecvena pot fi ajustate n funcie
de utilizator, prin intermediul software-ului, utiliznd biii din registru OSCTUNE.
LFINTOSC de oscilatorul nu este fabrica de calibrat si functioneaza la 31kHz.
Similar cu oscilatorul extern, unul intern poate, de asemenea, funcioneaz n mai multe moduri. Modul
este selectat n acelai mod ca i n cazul de externe, folosind oscilatorul-bii din registrul de configurare
Word. Cu alte cuvinte, totul se face n termen de software pentru PC, program de scris, imediat nainte de
a ncepe microcontroller.
Microcontrolere PIC - De a A la Z

132


Oscilatorul intern n modul INTOSC
n acest mod, OSC1 PIN-ul este disponibil ca scop general I / O n timp ce ieirile de aderen OSC2
selectate interne oscilatorul de frecven mprit la 4.

Oscilatorul intern n modul INTOSCIO
n acest mod, att pin sunt disponibile pentru uz general I / O.
Oscilator intern Setri
Oscilatorul intern este alctuit din dou circuite separate.
1. De nalt frecven intern oscilatorul HFINTOSC este conectat la postscaler (frecvena divider). Se
fabrica calibrate i opereaz la 8MHz. Utilizarea postscaler, acest lucru poate oscilatorul de ieire la un
ceas de surse de apte frecvene care pot fi selectate prin intermediul software-ului, folosind IRCF2, IRCF1
i IRCF0 pin din OSCCON registru.
De HFINTOSC este activat prin selectarea uneia dintre apte frecvene (intre 8 MHz i 125 kHz) i de
stabilire a Sistemului Ceas Source (CS) de bii din registrul OSCCON dupa aceea. Dup cum se vede n
figura de mai jos, totul este efectuat cu biii din registru OSCCON.
Microcontrolere PIC - De a A la Z

133


2. De frecven sczut oscilatorul LFINTOSC este uncalibrated i opereaz la 31 kHz. Acesta este
activat prin selectarea de aceast frecven (biii din registru OSCCON) i de stabilire a CS pic de acelai
registru.
Ceas cu dou viteze de Start-up Mode
Ceas cu dou viteze de Start-up mod este folosit pentru a furniza putere de economii suplimentare de
microcontroler, atunci cnd funcioneaz n modul sleep. Ce este aceast all about?
, Cnd este configurat s funcioneze n LP, XT sau HS moduri, externe, oscilatorul va fi oprita pe trecerea
la starea de repaus, pentru a reduce consumul de energie total al dispozitivului.
Atunci cnd condiiile de Wake-up sunt ndeplinite, microcontroller nu va porni imediat de operare, pentru
c trebuie s ateptai pentru frecventa semnalului de ceas pentru a deveni stabil. Astfel de ntrziere
dureaza exact impulsurile 1024. Dup aceea, microcontroller obinute cu programul de executie.
Problema este c foarte adesea doar cteva instruciunile sunt executate nainte de microcontroler este setat
la modul sleep, din nou. Aceasta nseamn c cea mai mare parte din timp, precum i puterea obinut de
la baterii este pierdut. Aceast problem este rezolvat de ctre oscilatorul folosind interne pentru
executarea programului n timp ce aceste 1024 impulsurile sunt numrate. Apoi, de ndat ce oscilatorul
extern de frecven devine stabil, acesta va prelua n mod automat de "rol". ntregul proces este activat
prin setarea un pic de cuvnt de configurare. n scopul de a programului de microcontroler, este necesar s
selectai Int-Ext switchover opiune n software-ul.
Microcontrolere PIC - De a A la Z

134


Fail-Safe Ceas Monitor
The Fail-Safe Ceas Monitor (FSCM) monitorizeaz funcionarea oscilatorul extern si permite
microcontroller pentru a continua cu programul de executie chiar de externe oscilatorul nu dintr-un motiv
oarecare. n acest caz, oscilatorul intern preia rolul su.
Microcontrolere PIC - De a A la Z

135


De-sigur nu detecteaz un ceas monitorul nu a reuit oscilatorul prin compararea interne i surse externe
de ceas. In cazul in care este nevoie de mai mult de 2mS pentru oscilatorul de ceas externe pentru a sosit,
sursa de ceas va fi automat pornit. Oscilatorul intern, prin urmare, va continua de operare controlat de
bii din registrul OSCCON. n cazul n care OSFIE bii de PIE2 registru este setat, o ntrerupere va fi
generat. Sistemul de ceas va continua s fie de la sursele interne de ceas pn cnd dispozitivul cu succes
repornete externe oscilatorul i napoi pentru a trece de externe operaie.
Similare cu cele anterioare cazuri, acest modul este activat prin schimbarea de configurare cuvntul, chiar
nainte de programare de chip ncepe. De data aceasta, ea se face prin selectarea opiunii Fail-Safe Ceas.
Monitor.
Microcontrolere PIC - De a A la Z

136


OSCTUNE Register
Modificrilor n registrul OSCTUNE afecteaz HFINTOSC frecven, dar nu LFINTOSC frecven. Mai
mult dect att, nu exist nici o indicaie n timpul operaiunii de schimbare care a aprut.

TUN4 - TUN0 Frecventa Tuning bii. Prin combinarea aceste cinci bii, frecvena de 8MHz oscilatorul
schimburi. n acest fel, frecvenele obinute prin impartirea acestuia cu usurinta in postscaler schimbare
prea.
Microcontrolere PIC - De a A la Z

137

TUN4 TUN3 TUN2 TUN1 TUN0 Frecventa
0 1 1 1 1 Maximal
0 1 1 1 0
0 1 1 0 1


0 0 0 0 1
0 0 0 0 0 Calibrat
1 1 1 1 1


1 0 0 1 0
1 0 0 0 1
1 0 0 0 0 Minimal
EEPROM
EEPROM nu este nici o parte din programul de memorie (ROM), nici date de memorie (RAM), dar un
segment de memorie. Chiar si aceste locatii de memorie nu sunt uor de accesat i rapid, ca i alte registre,
ele sunt de mare importan, deoarece EEPROM de date sunt salvate permanent (indiferent de sursa de
alimentare este pe sau n afara). EEPROM de date poate fi de asemenea schimbate in orice moment.
Datorit acestor caracteristici excepionale, fiecare octet din EEPROM este valoros.
Microcontroler PIC16F887 de-a 256 locaii de date EEPROM controlat de bii din urmtoarele registre:
EECON1 (registrul de control)
EECON2 (registrul de control)
EEDAT (o economie de date gata de a scrie i a citi)
EEADR (salveaz adresa de EEPROM locaie pentru a fi accesate)
n plus, nu este adevrat EECON2 registru, n care nu exist fizic. Se folosete n secvena de program
scrie doar.
EEDATH de EEADRH registrele i aparin aceluiai grup ca i registrele folosite n timpul EEPROM a
scrie i a citi. Ambele sunt, prin urmare, le-a folosit pentru program (FLASH) Memorie de scriere i citire.
Din moment ce aceasta este considerat o zon de risc (de siguran, nu vrei sa-ti microcontroler de a
sterge accidental dvs. de program), nu vom discuta despre el n continuare, dar v sftuim s fii ateni.
Registrul EECON1
Microcontrolere PIC - De a A la Z

138


EEPGD - Program de date EEPROM Selectai bii
1 - program de acces de memorie.
0 - Access memorie EEPROM.
WRERR - EEPROM Error Flag bit
1 - Scrie operaiunea este ncheiat prematur i eroarea sa produs.
0 - Access memorie EEPROM.
WREN - EEPROM Write Enable bit.
1 - Scrie-EEPROM de date activat.
0 - Scrie la date EEPROM dezactivat.
WR - Scrie bii de control
1 - initiaza pentru a scrie date EEPROM.
0 - Scrie la date EEPROM este complet.
RD - Citeste bii de control
1 - initiaza citit de la date EEPROM.
0 - Citeste de la date EEPROM dezactivat.
Citete din memorie EEPROM
Pentru a citi memorie de date EEPROM, urmai procedura de mai jos:
Pasul 1: Scrieti o adres (00h - FFh) n registrul EEADR.
Pasul 2: Selectare bloc de memorie EEPROM de compensare a EEPGD bii din registrul EECON1.
Pasul 3: Pentru a citi locatie, set de CD pic de acelai registru.
Pasul 4: Datele sunt stocate n registrul EEDAT i gata de utilizare.
Urmtorul exemplu ilustreaz de date EEPROM se citi:
Microcontrolere PIC - De a A la Z

139

BSF STATUS, RP1; BCF STATUS, RP0; Accesul bancar 2 MOVF adresa, W; Mutare adresa de
la registrul W MOVWF EEADR; Scrie adresa BSF STATUS, RP0; Accesul bancar 3 BCF EECON1,
EEPGD; Selectai EEPROM BSF EECON1, RD; Citeste date BCF STATUS, RP0; Accesul bancar 2
MOVF EEDATA, W; datele sunt stocate n registrul W
Scrie-memorie de date EEPROM
Pentru a scrie date de memorie EEPROM, n primul rnd este necesar s se scrie la registrul EEADR
prima i a datelor la EEDAT registru dup aceea. Apoi, va trebui s urmeze o secven de a iniia scrie
pentru fiecare octet. ntrerupe trebuie s fie dezactivate n timpul acestei proceduri.
EEPROM de date a scrie este ilustrat n exemplul de mai jos:
BSF STATUS, RP1 BSF STATUS, RP0 BTFSC EECON, WR1; ateptai precedent pentru a
finaliza scrie du-te la $ -1; BCF STATUS, RP0; Banca 2 MOVF adresa, W; Mutare pentru a
adresa W MOVWF EEADR; Scrie adresa de MOVF DATE, W ; Mutare date pentru a W MOVWF
EEDATA; scrie date BSF STATUS, RP0; Banca 3 BCF EECON1, EEPGD; Selectai EEPROM BSF
EECON1, WREN; Scrie-EEPROM activat BCF INCON, GIE; Toate ntrerupe dezactivat MOVLW
55h; Obligatoriu secven de start MOVWF EECON2 MOVLW Aah MOVWF EECON2; Obligatoriu
secven sfritul BSF EECON1, WR BSF INTCON, GIE; ntrerupe activat BCF EECON1, WREN;
Scrie-EEPROM cu handicap
Resetare! Black-out, Brown-out sau zgomotele?
La reiniializare, microcontroler, imediat se oprete funcionarea i terge registrele sale. Reset semnal
poate fi generat extern in orice moment (nivel redus de logica pe MCLR pini). Dac este nevoie, ea poate
fi de asemenea generate de logica de control intern. Power-pe cauze ntotdeauna resetate. Anume,
deoarece de multe de tranziie evenimente care au loc atunci cnd este la putere de aprovizionare
(parametru de contact clipeste si spumante, tensiune cretere lent, treptat frecven de ceas de stabilizare,
etc), este necesar s se prevad o anumit or ntrziere nainte de a ncepe microcontroler de operare.
Dou interne timp PWRT-i OST sunt responsabili de asta. Primul dintre ele poate fi activat sau
dezactivat n timpul programului scris. De scenariu este dup cum urmeaz:

Atunci cnd ajunge la putere tensiune de alimentare 1,2 - 1.7V, un circuit de putere numit-up Timer
reiniializeaz microcontroller n termen de aproximativ 72mS. Imediat dup acest moment a trecut,
genereaz un alt semnal de resetare Timer numit Oscilator de start-up Timer cu cuar 1024 oscilatorul
perioade. Cnd aceast ntrziere este de peste (marcat ca n figura de reiniializare T) i MCLR PIN-ul
Microcontrolere PIC - De a A la Z

140

este setat de mare, microcontroller seama c sunt ndeplinite toate condiiile i ncepe s se execute primul
instruire n program.
n afar de-o astfel de "controlat" de resetare, care apare n momentul de fa merge pe putere, exist un alt
dou reiniializeaz numit Black-out i Brown-out care pot s apar n timpul operaiunii, precum i n
momentul de fa merge putere off.
Black-out de resetare

Black-out de reiniializare are loc n momentul n care puterea se duce n mod normal de aprovizionare off.
n acest caz, nu are nici un microcontroler de timp pentru a face orice imprevizibil pentru c pur i simplu
de tensiune scade foarte rapid sub valoarea minim. Cu alte cuvinte-lumina goes off, cortina cade n jos i
spectacolul este de peste!
Brown-out de resetare

Atunci cnd tensiunea de alimentare scade lent (de exemplu tipic este ca bateria de descrcare de gestiune,
dei experienele microcontroler cdere de tensiune cu mult mai repede ca un proces lent), treptat se
opreste electronice interne de funcionare i aa-numitul Brown-out a reseta apare. n acest caz, nainte de
a microcontroller opriri de operare exist pericolul ca un realist, circuite care funcioneaz la tensiuni mai
mari de start efectua imprevizibil. Ea poate, de asemenea, cauze mortale de modificri din programul in
sine, pentru c este salvat in on-chip de memorie flash.
Zgomotele
Microcontrolere PIC - De a A la Z

141


Acesta este un fel de resetare Brown-out care se produce n mediul industrial, atunci cnd sursa de
alimentare de tensiune "clipete" pentru un moment i valoarea sa scade sub nivelul minim. Chiar scurt, o
astfel de putere de zgomot n linia de mai catastrophically afecta funcionarea aparatului.
MCLR de aderen
Logica de zero (0) pe MCLR de aderen cauzele imediate i regulate de reiniializare. Este recomandat
de a fi conectate dup cum se arat n figura de mai jos. Funcia de componente suplimentare este de a
susine "pure", o logica (1) pe durata normal de funcionare. Dac valorile lor sunt de a furniza astfel de
nalt nivel pe logica PIN-ul numai la T este de peste reseta, microcontroler va ncepe imediat de operare.
Aceast caracteristic poate fi foarte utile atunci cnd este necesar pentru a sincroniza de funcionare a
microcontroler cu suplimentar electronic sau exploatarea de mai multe microcontrolere.

n scopul de a evita orice eroare care poate s apar pe Brown-out reseta, PIC 16F887 a construit n
"mecanism de aparare". Acesta este un simplu, dar eficient de circuit care reacioneaz de fiecare dat de
tensiunea de alimentare scade sub 4V si detine acest nivel pentru mai mult de 100 de micro-secunde. n
acest caz, acest circuit genereaza semnalul de resetare, ct i de faptul c momentul n care funcioneaz
ntregul microcontroler ca doar dac a fost pornit.
Microcontrolere PIC - De a A la Z

142



CAPITOLUL 9: SET DE INSTRUCIUNI

A fost deja menionat faptul c un microcontroler difer de la alte circuite integrate. Cele mai multe dintre
ele sunt gata pentru instalare n int, la fel de dispozitiv care sunt, ceea ce nu este cazul unui
microcontroler. Pentru c microcontroler pot s opereze, are nevoie de instruciuni precise cu privire la
ceea ce facem. Cu alte cuvinte, un program de microcontroler, care ar trebui s executai n scris i trebuie
s fie ncrcate n microcontroller. Acest capitol acoper comenzile care microcontroller "intelege". Set de
instruciuni pentru 16FXX cuprinde 35 de instruciuni n total. Astfel de un numr mic de instruciuni este
specific de microcontroler RISC, pentru c acestea sunt bine-optimizat de la aspectul de viteza de operare,
simplitate n arhitectur i codul de compacitatea. Singurul dezavantaj al arhitecturii RISC, este c este de
ateptat, programator pentru a face fa cu aceste instruciuni.
Instruciune Descriere Operaia

Steagul
CLK *
Instruciuni de transfer de date
MOVLW k Mutare constant de la W k -> W 1
MOVWF f Mutare la f W W -> F 1
MOVF f, d Mutare f d f -> D Z 1 1, 2
CLRW Senin W 0 -> W Z 1
CLRF f Cer senin, f 0 -> F Z 1 2
SWAPF f, d Swap nibbles n f
f (7:4), (3:0) -> F (3:0),
(7:4)
1 1, 2
Arithmetic-logica Instruciuni
ADDLW k Adugai W i constant W + K -> W
C, DC,
Z
1
ADDWF f, d Adugai W i f W + f -> D
C, DC,
Z
1 1, 2
SUBLW k Scdei W de la constanta kW -> W
C, DC,
Z
1
SUBWF f, d Scdei W de la f Fw -> D
C, DC,
Z
1 1, 2
ANDLW k
Logic i cu W cu
constanta
W si K -> W Z 1
ANDWF f, d Logic i cu W cu f W i F -> D Z 1 1, 2
ANDWF f, d Logic i cu W cu f W i F -> D Z 1 1, 2
IORLW k
Logice sau cu W, cu
constanta
W sau K -> W Z 1
Microcontrolere PIC - De a A la Z

143

IORWF f, d Logice sau cu W cu f W sau F -> D Z 1 1, 2
XORWF f, d
Logice exclusive sau cu
W, cu constanta
W XOR K -> W Z 1 1, 2
XORLW k
Logice exclusive sau cu
W cu f
W XOR f -> D Z 1
INCF f, d Increment f, pn la 1 f +1 -> F Z 1 1, 2
DECF f, d Decrement f, pn la 1 F-1 -> F Z 1 1, 2
RLF f, d
Rotire stnga prin f
CARRY bii
C 1 1, 2
RRF f, d
Rotire dreapta prin f
CARRY bii
C 1 1, 2
COMF f, d Completeaz f f -> D Z 1 1, 2
Bit-orient Instruciuni
BCF f, b Senin de bii b n f 0 -> f (b) 1 1, 2
BSF f, b Senin de bii b n f 1 -> f (b) 1 1, 2
Programul de control Instruciuni
BTFSC f, b
Test de bii b f. Salt dac
urmtoarele instruciuni
clare.
Salt dac f (b) = 0 1 (2) 3
BTFSS f, b
Test de bii b f. Salt
urmtoarele instruciuni
dac este lsat.
Salt dac f (b) = 1 1 (2) 3
DECFSZ f, d
Decrement f. Salt dac
urmtoarele instruciuni
clare.
F-1 -> D omite, dac Z =
1
1 (2)
1, 2,
3
INCFSZ f, d
Increment f. Salt
urmtoarele instruciuni
dac este lsat.
f +1 -> D omite, dac Z
= 0
1 (2)
1, 2,
3
Du-te la K Du-te la adresa k -> PC 2
CALL k Call subroutine PC-ul -> tos, k -> PC 2
RETURNARE Revenire la subroutine Tos -> PC 2
RETLW k
ntoarcei-v cu constant
n W
k -> W, tos -> PC 2
RETFIE Revenire la ntrerupere Tos -> PC, 1 -> GIE 2
Alte instruciuni
NOP Nici o operaiune nu Tos -> PC, 1 -> GIE 1
CLRWDT Cer senin, watchdog timer
0 -> WDT, 1 -> pentru a,
1 -> PD
LA,
PD
1
Dormi Du-te n modul sleep
0 -> WDT, 1 -> pentru, 0
-> PD
LA,
PD
1
Microcontrolere PIC - De a A la Z

144

* 1 Cnd un I / O registru este modificat n funcie de sine, valoarea va fi folosit ca valoare prezent pe pin.
* 2 Dac instruciunea este executat pe rmn registru i dac d = 1, prescaler va fi ters.
* 3 Dac PC-ul este modificat sau rezultatul testului este o logica (1), necesit dou cicluri de instruire.
Instruciuni de transfer de date
De transfer de date cu microcontroller are loc ntre registrul de lucru W (numit acumulator) i un registru
care reprezinta orice locatie din memoria RAM interne, indiferent dac este vorba speciale sau funcia n
scop general registre.
Primele trei instruciuni de literatur pentru a muta registrul W (MOVLW este de la literatur pentru a
muta W), mutai date de la W nregistreaz-te pentru a RAM i de la RAM la registrul W (sau n aceeai
locaie RAM, cu schimbarea doar pe pavilion Z). Instruciunea CLRF f terge registru, ntruct CLRW
terge W registru. Instruciunea SWAPF f swap nibbles n termen de registru (o nibble contine patru bii).
Arithmetic-logica Instruciuni
Similare cu cele mai multe microcontrolere PIC suport doar dou instruciuni aritmetice-plus i Navigare.
Steaguri C, DC, Z sunt stabilite n mod automat n funcie de rezultatele Navigare plus sau. Singura
excepie este pavilionul C. Din Navigare se face ca plus cu valoare negativ, pavilionul C este Inverted
Navigare dup. Aceasta nseamn c pavilionul C este stabilit n cazul n care este posibil, pentru a efectua
operaia i eliminate n cazul n care se scade numrul mai mare de la un mai mici. Logica de un (1) din
PIC este capabil de a efectua operaiuni i, sau, ex-sau, inverting (COMF) i rotaie (RLF i RRF).
Instruciuni de roti, care de fapt un registru roti sale de bii prin pavilionul C de ctre un pic stanga (fata de
bii 7) sau dreapta (spre bii 0). De bii mutat de la registru este mutat la pavilionul C, care este automat
mutat n bii pe partea opus a registrului.
Bit-orient Instruciuni
Instruciunile BCF i BSF clare sau orice set de bii n memorie. Dei pare a fi o operaiune simpl, nu
este asa. Primul procesor afiri ntregul byte, schimb un pic si sa rescrie ntregul byte n aceeai locaie.
Programul de control Instruciuni
PIC16F887 execut instruciunile du-te, CALL, ntoarcei-v n acelai fel ca toate celelalte
microcontrolere face. O diferen este c stiva este independent de la interne RAM i dispune de 8
niveluri. The 'RETLW k' este identic cu instruciuni pentru a v ntoarce instruciunea, cu excepia c o
constant definit de instruire operand este scris in registrul W, nainte de a reveni la subroutine. Aceast
instruire tabels Lookup permite s fie uor de creat, prin crearea unui tabel ca o subroutine format din
'RETLWk "instruciuni de utilizare, n cazul n care literals" k "aparin tabelului. Urmtorul pas este de a
scrie poziia constant k (0, 1, 2, 3 ... n) de a Wregister de apel i de subroutine (tabel), folosind
instruciunea CALL. Tabelul de mai jos const din urmtoarele literals: k0, k1, k2 ... kn.
Principal movlw 2; scrie numrul 2 pentru a acumulatorului Privire de apel; trece
la cutarea de mas Privire addwf PCL, f; aduga acumulator i programul de cur;
adresa de inchiriere (PCL) retlw k0; ntoarce de la subroutine (acumulator conine k0)
retlw k1; .. . retlw k2; ... ... ; ... ... ; ... retlw kn; ntoarce de la
subroutine (acumulator conine kN)
Microcontrolere PIC - De a A la Z

145

Pe prima linie a subroutine (instruire ADDWF PCL, f) pur i simplu adaug constanta "k" W de la registru
i tabelul de start adresa, care este stocat n registrul PCL. Rezultatul este real n programul de date adresa
de memorie. Revenind de la subroutine, W registru va conine adreseaz constant k. n acest caz, este
constanta 'k2'.
RETFIE (intoarcerea din Interrupt) reprezinta ntoarce la rutina de ntrerupere. n contrast cu revenirea
instruire, se pot seta automat de bii GIE (Global Interrupt Enable). Cand o ntrerupere se produce acest
bit este automat eliminate. Doar programul Counter este mpins la stiva, ceea ce nseamn c nu exist nici
o auto salva registrele de statutul i de starea curent, fie. Problema este rezolvat de ctre statutul de
economisire a tuturor registrelor de important, la nceputul rutina de ntrerupere. Aceste valori sunt
regsite la aceste registre, imediat nainte de a pleca de rutina de ntrerupere.
Condiionat salturi sunt executate de ctre dou instruciuni: BTFSC i BTFSS. n funcie de starea de
bii a fi testate n "f" registru, urmtoarele instruciuni vor fi omise sau nu.
Instruciuni de timp de execuie
Toate instruciunile sunt singur ciclu de instruciuni. Singura excepie poate fi condiionat filiala
instruciuni (dac condiie este ndeplinit) sau instruciunile fiind executat la programul contra. n ambele
cazuri, dou cicluri sunt necesare pentru executarea de instruire n cazul n care cel de-al doilea ciclu este
executat ca NOP (No Operation). Un ciclu de instruire const n patru cicluri de ceas. Dac 4MHz
oscilatorul este utilizat, un nominal de timp pentru instruire de executie este de 1 S. n caz de salt, de
instruire timp de execuie este de 2 S.
Legenda
f - Orice locaie de memorie (registru)
W - registru de lucru (acumulator)
b - BIT adresa n termen de un registru de 8 bii
d - destinaie de bii
[etichet] - set de 8 caractere care indic adresa de start a special n cadrul programului
Tos - Partea de sus a stivei
[] - Opiunea
<> - De bii n domeniul registru (mai multe adrese de bii)
C - Carry / Borrow pic de starea registru
DC - Digitlis Carry pic de starea registru
Z - Zero pic de starea registru
ADDLW - Adauga literatur i W
Sintaxa: [etichet] ADDLW k
Descriere: Coninutul registrului W se adaug n 8 bii k literatur. Rezultatul este stocat n registrul W.
Operaia: (W) + K -> W
Operand: 0 k 255
Microcontrolere PIC - De a A la Z

146

Stare afectate: C, DC, Z
Numr de cicluri: 1
Exemplu:
.... [etichet] ADDLW 0x15
nainte de instruire de executie: 0x10 W = Dup instruire: 0x25 W = C = 0
(rezultatul nu este mai mare dect 0xff, ceea ce nseamn c nu a avut loc Carry).
ADDWF - Adauga W i f
Sintaxa: [etichet] ADDWF f, d
Descriere: Adaug coninutul i W i f registre.
Dac w d = d = 0 sau rezultatul este stocat n registrul W.
Dac d = f = 1 sau d rezultatul este stocat n registrul f.
Operaia: (W) + (f) -> D
Operand: 0 f 127, D [0,1]
Stare afectate: C, DC, Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] ADDWF REG, W
nainte de instruire de executie: 0x17 W = REG = 0xC2 Dup instruire: W = 0xD9 REG =
0xC2 C = 0 (nr. transporta se produce, i anume, rezultatul este maxim 8 bii lung).
Exemplul 2:
.... [etichet] ADDWF INDF, f
nainte de instruire de executie: 0x17 W = = 0xC2 Register FSR la adresa 0xC2
conine valoarea 0x20 Dup instruire: 0x17 W = FSR = 0xC2, 0xC2 adresa de la Registrul
conine valoarea 0x37
ANDLW - i literatur cu W
Sintaxa: [etichet] ANDLW k
Descriere: Coninutul registrului W este AND'ed cu 8 bii k literatur. Aceasta nseamn c rezultatul va
contine un (1) numai dac ambele corespunztoare de bii, operand sunt cele a (1). Rezultatul este stocat n
registrul W.
Operaia: (W) si K -> W
Operand: 0 k 255
Microcontrolere PIC - De a A la Z

147

Stare afectate: Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] ANDLW 0x5F
nainte de instruire de executie: W = 0xA3; 1010 0011 (0xA3); 0101 1111 (0x5F) -----
------------- Dup instruire: = 0x03 W; 0000 0011 (0x03) Z = 0 (rezultatul nu este 0)
Exemplul 2:
.... [etichet] ANDLW 0x55
nainte de instruire de executie: W = 0xAA; 1010 1010 (0xAA); 0101 0101 (0x55) -----
------------- Dup instruire: = 0x00 W; 0000 0000 (0x00) Z = 1 (rezultatul este 0)
ANDWF - i W cu f
Sintaxa: [etichet] ANDWF f, d
Descriere: W registru, precum i cu f registru.
Dac d = w sau d = 0, rezultatul este stocat n registrul W.
Dac d = f = 1 sau d, rezultatul este stocat n registrul f.
Operaia: (W) i (f) -> D
Operand: 0 f 127, D [0,1]
Stare afectate: Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] ANDWF REG, f
nainte de instruire de executie: = 0x17 W, REG = 0xC2; 0001 0111 (0x17); 1100 0010
(0xC2) ------------------ Dup instruire: = 0x17 W, REG = 0x02; 0000 0010 (0x02)
Exemplul 2:
.... [etichet] ANDWF FSR, W
nainte de instruire de executie: = 0x17 W, FSR = 0xC2; 0001 0111 (0x17); 1100 0010
(0xC2) ------------------ Dup instruire: = 0x02 W, FSR = 0xC2; 0000 0010 (0x02)
BCF - BIT senin f
Sintaxa: [etichet] BCF f, b
Descriere: Bit b din registrul f este golit.
Microcontrolere PIC - De a A la Z

148

Actionare: (0) -> f (b)
Operand: 0 f 127, 0 b 7
Stare afectate: --
Numr de cicluri: 1
Exemplul 1:
.... [etichet] BCF REG, 7
nainte de instruire de executie: REG = 0xC7; 1100 0111 (0xC7) Dup instruire: REG =
0x47; 0100 0111 (0x47)
Exemplul 2:
.... [etichet] BCF INDF, 3
nainte de instruire de executie: 0x17 W = = 0xC2 Register FSR la adresa (FSR)
conine valoarea 0x2F Dup instruire: 0x17 W = = 0xC2 Register FSR la adresa (FSR)
conine valoarea 0x27
BSF - BIT set f
Sintaxa: [etichet] BSF f, b
Descriere: Bit b din registrul f este setat.
Actionare: 1 -> f (b)
Operand: 0 f 127, 0 b 7
Stare afectate: --
Numr de cicluri: 1
Exemplul 1:
.... [etichet] BSF REG, 7
nainte de instruire de executie: REG = 0x07; 0000 0111 (0x07) Dup instruire: REG =
0x87; 1000 0111 (0x87)
Exemplul 2:
.... [etichet] BSF INDF, 3
nainte de instruire de executie: 0x17 W = = 0xC2 Register FSR la adresa (FSR)
conine valoarea 0x20 Dup instruire: 0x17 W = = 0xC2 Register FSR la adresa (FSR)
conine valoarea 0x28
BTFSC - Bit test f, dac Salt senin
Microcontrolere PIC - De a A la Z

149

Sintaxa: [etichet] BTFSC f, b
Descriere: Dac b bii din registrul f este 0, urmtoarea instruciune este omis i un NOP este executat n
loc. n acest caz, dou-ciclu de instruire este necesar.
Actionare: Salt la urmtoarea instruciune dac f (b) = 0
Operand: 0 f 127, 0 b 7
Stare afectate: --
Numr de cicluri: 1 sau 2 n funcie de bii b
Exemplu:
.... LAB_01 BTFSC REG, 1; Test de bii 1 din REG LAB_02 .... ; Salt aceast linie,
dac bit = 1 LAB_03 .... ; Salt aici dac bit = 0
nainte de executarea de instruire: Programul a fost contra la adresa LAB_01. Dup
instruire: - dac bii 1 din REG eliminate, programul de ghieu de puncte pentru a
adresa LAB_03. -- Dac bii 1 din REG este setat, contor de program puncte pentru a
adresa LAB_02.
BTFSS - Bit test f, Salt Dac este setat
Sintaxa: [etichet] BTFSS f, b
Descriere: Dac b bii din registrul f este 1, urmtoarea instruciune este omis i un NOP este executat n
loc. n acest caz, dou-ciclu de instruire este necesar.
Actionare: Salt la urmtoarea instruciune dac f (b) = 1
Operand: 0 f 127, 0 b 7
Stare afectate: --
Numr de cicluri: 1 sau 2 n funcie de bii b
Exemplu:
.... LAB_01 BTFSS REG, 3; Test de bii 3 din REG LAB_02 .... ; Salt aceast linie,
dac bit = 0 LAB_03 .... ; Salt aici dac bit = 1
nainte de executarea de instruire: Programul a fost contra la adresa LAB_01 Dup
instruire: - dac bii 3 din REG eliminate, programul de ghieu de puncte pentru a
adresa LAB_03. -- Dac bii 3 din REG eliminate, programul de ghieu de puncte pentru
a adresa LAB_02.
CALL - solicit Subroutine
Sintaxa: [etichet] CALL k
Microcontrolere PIC - De a A la Z

150

Descriere: subroutine solicit. n primul rnd, la urmtoarea adres de instruire pentru a executa este
mpins spre stiva. Acesta este PC-ul +1 adresa. Ulterior, subrou adresa de tine este scris in program
contra.
Operaia: (PC) + 1 -> (Top of Stack - TOS)
k -> PC (10: 0), (PCLATH (4: 3)) -> PC (12: 11)
Operand: 0 k 2047
Steagul: --
Stare afectate: 2
Exemplu:
.... LAB_01 CALL LAB_02; Call subroutine LAB_02 .... .... LAB_02 ....
nainte de instruire de executie: PC = adresa LAB_01 tos (partea superioar a
stivei) = x Dup instruire: PC = adresa LAB_02 tos (partea superioar a stivei) =
LAB_01
CLRF - Senin f
Sintaxa: [etichet] CLRF f
Descriere: Coninutul este golit registrul f i Z pavilionul statutul registru este setat.
Operaia: 0 -> F
Operand: 0 f 127
Stare afectate: Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] CLRF TRISB
nainte de instruire de executie: TRISB = 0xff Dup instruire: 0x00 = TRISB Z = 1
Exemplul 2:
nainte de instruire de executie: FSR = 0xC2 Register la adresa 0xC2 conine
valoarea 0x33 Dup instruire: FSR = 0xC2 Register la adresa 0xC2 conine valoarea 0x00
Z = 1
CLRW - Senin W
Sintaxa: [etichet] CLRW
Microcontrolere PIC - De a A la Z

151

Descriere: nregistrare W este golit i Z pavilionul statutul registru este setat.
Operaia: 0 -> W
Operand: --
Stare afectate: Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] CLRW
nainte de instruire: 0x55 W = Dup instruire: 0x00 W = Z = 1
CLRWDT - Opinii senin Timer
Sintaxa: [etichet] CLRWDT
Descriere: Readuce de watchdog timer-i WDT prescaler. Stare bii pentru PD i sunt stabilite.
Operaia: 0 -> WDT 0 -> WDT prescaler 1 -> pentru 1 -> PD
Operand: --
Stare afectate: Pentru a, PD
Numr de cicluri: 1
Exemplu:
.... [etichet] CLRWDT
nainte de instruire de executie: WDT contra = x WDT prescaler = 1:128 Dup
instruire: WDT contra = 0x00 WDT prescaler = 0 la PD = 1 = 1 WDT prescaler = 1: 128
COMF - completeaz f
Sintaxa: [etichet] COMF f, d
Descriere: Coninutul de registru este completat f (logica de zerouri (0) sunt nlocuite de cele (1) i vice-
versa). Dac w d = d = 0 sau rezultatul este stocat n W. Dac d = f = 1 sau d rezultatul este stocat n
registrul f.
Operaia: (f) -> D
Operand: 0 f 127, D [0,1]
Stare afectate: Z
Microcontrolere PIC - De a A la Z

152

Numr de cicluri: 1
Exemplul 1:
.... [etichet] COMF REG, W
nainte de instruire de executie: REG = 0x13; 0001 0011 (0x13); completarea --------
---------- Dup instruire: REG = 0x13; 1110 1100 (0xEC) W = 0xEC
Exemplul 2:
.... [etichet] COMF INDF, f
nainte de instruire de executie: FSR = 0xC2 Register la adresa (FSR) conine
valoarea 0xAA Dup instruire: FSR = 0xC2 Register la adresa (FSR) conine valoarea
0x55
DECF - Decrement f
Sintaxa: [etichet] DECF f, d
Descriere: Decrement f de ctre un registru. Dac d = w sau d = 0, rezultatul este stocat n registrul W.
Dac d = f = 1 sau d, rezultatul este stocat n registrul f.
Operaia: (f) - 1 -> D
Operand: 0 f 127, D [0,1]
Stare afectate: Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] DECF REG, f
nainte de instruire de executie: REG 0x01 = Z = 0 Dup instruire: REG 0x00 = Z = 1
Exemplul 2:
.... [etichet] DECF REG, W
nainte de instruire de executie: REG = 0x13 W = x, Z = 0 Dup instruire: REG = 0x13
= 0x12 W, Z = 0
DECFSZ - Decrement f, dac Salt 0
Sintaxa: [etichet] DECFSZ f, d
Descriere: Decrement f de ctre un registru. Dac d = w sau d = 0, rezultatul este stocat n registrul W.
Dac d = f = 1 sau d, rezultatul este stocat n registrul f. Dac rezultatul este 0, atunci un NOP este
executat n loc. n acest caz, dou-ciclu de instruire este necesar.
Operaia: (f) - 1 -> D
Microcontrolere PIC - De a A la Z

153

Operand: 0 f 127, D [0,1]
Stare afectate: --
Numr de cicluri: 1 sau 2 n funcie de rezultat.
Exemplul 1:
.... MOVLW .10 MOVWF CNT; 10 -> CNT Bucl ...... ...... ; Bloc de instruciuni
...... DECFSZ CNT, f; REG decrement de ctre un du-te la Bucl; Salt aceast linie,
dac = 0 LAB_03 ....... ; Salt aici dac = 0
n acest exemplu, blocul de instruciuni este executat ori de cte ori valoarea iniial a CNT este variabil,
care n acest exemplu este de 10.
Du-te - Sucursala necondiionat
Sintaxa: [etichet] du-te la K
Descriere: salt necondiionat la adresa de k.
Operaia: (k) -> PC (10:0), (PCLATH (4:3)) -> PC (12:11)
Operand: 0 k 2047
Stare afectate: --
Numr de cicluri: 2
Exemplu:
.... LAB_00 du-te la LAB_01; Salt la LAB_01 ..... ..... LAB_01 ..... ; Programul
de aici continu
nainte de instruire de executie: PC = LAB_00 Dup ce adresa de instruire: PC =
LAB_01 adresa
INCF - Increment f
Sintaxa: [etichet] INCF f, d
Descriere: Increment f de ctre un registru.
Dac d = w sau d = 0, rezultatul este stocat n registrul W.
Dac d = f = 1 sau d, rezultatul este stocat n registrul f.
Operaia: (f) + 1 -> D
Operand: 0 f 127, D [0,1]
Stare afectate: Z
Microcontrolere PIC - De a A la Z

154

Numr de cicluri: 1
Exemplul 1:
.... [etichet] INCF REG, W
nainte de instruire de executie: REG = 0x10 W = x, Z = 0 Dup instruire: REG = 0x10
= 0x11 W, Z = 0
Exemplul 2:
.... [etichet] INCF REG, f
nainte de instruire de executie: REG = 0xff Z = 0 Dup instruire: REG 0x00 = Z = 1
INCFSZ - Increment f, dac Salt 0
Sintaxa: [etichet] INCFSZ f, d
Descriere: nregistrare f se incremented de unul. Dac d = w sau d = 0, rezultatul este stocat n registrul
W. Dac d = f = 1 sau d, rezultatul este stocat n registrul f. Dac rezultatul este 0, atunci un NOP este
executat n loc. n acest caz, dou-ciclu de instruire este necesar.
Operaia: (f) + 1 -> D
Operand: 0 f 127, D [0,1]
Stare afectate: --
Numr de cicluri: 1 sau 2 n funcie de rezultat.
Exemplu:
.... LAB_01 INCFSZ REG, f; Increment REG de ctre un LAB_02 ....... ; Salt aceast
linie, dac rezultatul este 0 LAB_03 ....... ; Salt aici dac rezultatul este 0
Coninutul programului de instruire a contracara nainte de executie, PC = LAB_01address.
Coninutul REG dup instruire, REG = REG +1. Dac REG = 0, contor de program puncte pentru a
adresa LAB_03 etichet. Altfel, programul de puncte pentru a contracara urmtoarea adres de instruire, i
anume de a adresa LAB_02.
IORLW - Inclusive SAU literatur cu W
Sintaxa: [etichet] IORLW k
Descriere: Coninutul i W registru este OR'ed cu 8 bii k literatur. Rezultatul este stocat n registrul W.
Operaia: (W) sau (k) -> W
Operand: 0 k 255
Microcontrolere PIC - De a A la Z

155

Stare afectate: --
Numr de cicluri: 1
Exemplu:
.... [etichet] IORLW 0x35
nainte de instruire de executie: W = 0x9A Dup instruire: 0xBF W = Z = 0
IORWF - Inclusive SAU W cu f
Sintaxa: [etichet] IORWF f, d
Descriere: Coninutul este OR'ed f registru cu coninutul W registru. Dac d = w sau d = 0, rezultatul este
stocat n registrul W. Dac d = f = 1 sau d, rezultatul este stocat n registrul f.
Operaia: (W) sau (f) -> D
Operand: 0 f 127, D -> [0,1]
Stare afectate: Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] IORWF REG, W
nainte de instruire de executie: REG = 0x13, 0x91 W = Dup instruire: REG = 0x13,
0x93 W = Z = 0
Exemplul 2:
.... [etichet] IORWF REG, f
nainte de instruire de executie: REG = 0x13, 0x91 W = Dup instruire: REG = 0x93,
0x91 W = Z = 0
MOVF - Mutare f
Sintaxa: [etichet] MOVF f, d
Descriere: Coninutul de registru f este mutat la o destinaie stabilit de operand d. Dac d = w sau d = 0,
coninutul este mutat la registrul W. Dac d = f = 1 sau d, coninutul rmne n registrul f. Opiunea d = 1
este utilizat pentru a testa coninutul registrului f, deoarece aceasta influeneaz n mod instruire Z
pavilionul statutul registru.
Operaia: (f) -> D
Operand: 0 f 127, D -> [0,1]
Microcontrolere PIC - De a A la Z

156

Stare afectate: Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] MOVF FSR, W
nainte de instruire de executie: FSR = 0xC2 = 0x00 W Dup instruire: W = 0xC2 Z = 0
Exemplul 2:
.... [etichet] MOVF INDF, f
nainte de instruire de executie: 0x17 W = FSR = 0xC2, 0xC2 registru la adresa
conine valoarea 0x00 Dup instruire: 0x17 W = FSR = 0xC2, 0xC2 registru la adresa
conine valoarea 0x00, Z = 1
MOVLW - Mutare n literatur s W
Sintaxa: [etichet] MOVLW k
Descriere: 8 bii literatur k este mutat la registrul W.
Actionare: K -> (W)
Operand: 0 k 255
Stare afectate: --
Numr de cicluri: 1
Exemplul 1:
.... [etichet] MOVLW 0x5A
Dup instruire: 0x5A = W
Exemplul 2:
Const equ 0x40 [etichet] MOVLW Const
nainte de instruire de executie: 0x10 W = Dup instruire: 0x40 W =
MOVWF - Mutare pentru a W f
Sintaxa: [etichet] MOVWF f
Descriere: Coninutul registrului W este mutat la registrul f.
Operaia: (W) -> F
Operand: 0 f 127
Microcontrolere PIC - De a A la Z

157

Stare afectate: --
Numr de cicluri: 1
Exemplul 1:
.... [etichet] MOVWF OPTION_REG
nainte de instruire de executie: OPTION_REG = 0x20 W 0x40 = Dup instruire:
OPTION_REG = 0x40 = 0x40 W
Exemplul 2:
.... [etichet] MOVWF INDF
nainte de instruire de executie: 0x17 W = FSR = 0xC2, 0xC2 registru la adresa
conine valoarea 0x00 Dup instruire: 0x17 W = FSR = 0xC2, 0xC2 registru la adresa
conine valoarea 0x17
NOP - Nici o operaiune nu
Sintaxa: [etichet] NOP
Descriere: Nici o operaiune nu.
Funcionarea: --
Operand: --
Stare afectate: --
Numr de cicluri: 1
Exemplu:
.... [etichet] NOP; 1us ntrziere (oscilatorul 4MHz)
nainte de instruire de executie: PC = X dup instruire: PC = x + 1
RETFIE - Revenire de la Interrupt
Sintaxa: [Etichete] RETFIE
Descriere: ntoarcei-v la subroutine. Valoarea este poped din stiv i ncrcate n program counter.
ntrerupe sunt activate prin setarea bitului GIE din registrul INTCON.
Actionare: tos -> PC, 1 -> GIE
Operand: --
Stare afectate: --
Microcontrolere PIC - De a A la Z

158

Numr de cicluri: 2
Exemplu:
.... [etichet] RETFIE
nainte de instruire de executie: PC = x GIE (ntrerupere a permite pic de scrobeal
de registru) = 0 Dup instruire: PC = tos (partea superioar a stivei) GIE = 1
RETLW - Revenire cu literatur n W
Sintaxa: [etichet] RETLW k
Descriere: 8 bii literatur k este ncrcat n registrul W. Valoarea din partea de sus a stivei este ncrcat
n program counter.
Operaia: (k) -> W; partea superioar a stivei (sus) -> PC
Operand: --
Stare afectate: --
Numr de cicluri: 2
Exemplu:
.... [etichet] RETLW 0x43
nainte de instruire de executie: W = x = x PC tos (partea superioar a stivei) = x
Dup instruire: 0x43 W = PC = tos (partea superioar a stivei) tos (partea superioar
a stivei) = tos - 1
RETURNARE - Revenire de la Subroutine
Sintaxa: [etichet] RETURNARE
Descriere: ntoarcei-v la subroutine. Valoarea din partea de sus a stivei este ncrcat n program
counter. Acesta este un ciclu de instruire-doi.
Actionare: tos -> contor de program PC-ul.
Operand: --
Stare afectate: --
Numr de cicluri: 2
Exemplu:
.... [etichet] RETURNARE
Microcontrolere PIC - De a A la Z

159

nainte de instruire de executie: PC = x tos (partea superioar a stivei) = x Dup
instruire: PC = tos (partea superioar a stivei) tos (partea superioar a stivei) =
tos - 1
RLF - Rotire la stnga prin Carry f
Sintaxa: [etichet] RLF f, d
Descriere: Coninutul de registru f este rotit un pic spre stnga prin Carry flag. Dac d = w sau d = 0,
rezultatul este stocat n registrul W. Dac d = f = 1 sau d, rezultatul este stocat n registrul f.
Operaia: (f (n)) -> d (n +1), F (7) -> C, C -> D (0);
Operand: 0 f 127, D [0,1]
Stare afectate: C
Numr de cicluri: 1

Exemplul 1:
.... [etichet] RLF REG, W
nainte de instruire de executie: 1110 0110 REG = C = 0 Dup instruire: REG = 1110
0110 = 1100 1100 W C = 1
Exemplul 2:
.... [etichet] RLF REG, f
nainte de instruire de executie: 1110 0110 REG = C = 0 Dup instruire: REG 1100
1100 = C = 1
RRF - Rotire dreapta prin Carry f
Sintaxa: [etichet] RRF f, d
Descriere: Coninutul de registru f este rotit un pic dreapta prin Carry flag. Dac d = w sau d = 0,
rezultatul este stocat n registrul W. Dac d = f = 1 sau d, rezultatul este stocat n registrul f.
Operaia: (f (n)) -> d (n-1), F (0) -> C, C -> D (7);
Operand: 0 f 127, D -> [0,1]
Stare afectate: C
Microcontrolere PIC - De a A la Z

160

Numr de cicluri: 1

Exemplul 1:
.... [etichet] RRF REG, W
nainte de instruire de executie: REG = 1110 0110 = W x C = 0 Dup instruire: REG =
1110 0110 = 0111 0011 W C = 0
Exemplul 2:
.... [etichet] RRF REG, f
nainte de instruire de executie: REG = 1110 0110, C = 0 Dup instruire: REG = 0111
0011, C = 0
Sleep - Intrai n modul sleep
Sintaxa: [etichet] Sleep
Descriere: procesor intr n starea de repaus. De oscilatorul este oprit. PD bii (Power Down) din
registrul de stare este golit. LA pic de acelai registru este setat. De WDT si sa prescaler sunt eliminate.
Operaia: 0 -> WDT, 0 -> WDT prescaler, 1 -> pentru, 0 -> PD
Operand: --
Stare afectate: Pentru a, PD
Numr de cicluri: 1
Exemplu:
.... [etichet] Sleep
nainte de instruire de executie: WDT contra = x = x WDT prescaler Dup instruire:
WDT contra = 0x00 WDT prescaler = 0 la PD = 1 = 0
SUBLW - Scdei W de la literatur
Sintaxa: [etichet] SUBLW k
Descriere: Coninutul registrului W se scade din literatur k. Rezultatul este stocat n registrul W.
Actionare: k - (W) -> W
Microcontrolere PIC - De a A la Z

161

Operand: 0 k 255
Stare afectate: C, DC, Z
Numr de cicluri: 1
Exemplu:
.... [etichet] SUBLW 0x03
nainte de instruire de executie: = 0x01 W, C = x, Z = X dup instruire: = 0x02 W, C
= 1, Z = 0, rezultatul este pozitiv nainte de instruire de executie: = 0x03 W, C = x,
Z = X dup instruciunea: = 0x00 W, C = 1, Z = 1 rezultat este 0 nainte de instruire
de executie: = 0x04 W, C = x, Z = X dup instruire: W = 0xff, C = 0, Z = 0 rezultat
este negativ
SUBWF - Scdei W de la f
Sintaxa: [etichet] SUBWF f, d
Descriere: Coninutul registrului W este f scade de la registru.
Dac d = w sau d = 0, rezultatul este stocat n registrul W. Dac d = f = 1 sau d, rezultatul este stocat n
registrul f.
Operaia: (f) - (W) -> D
Operand: 0 f 127, D [0,1]
Stare afectate: C, DC, Z
Numr de cicluri: 1
Exemplu:
.... [etichet] SUBWF REG, f
nainte de instruire de executie: REG = 3, W = 2, C = x, Z = X dup instruire: REG =
1, W = 2, C = 1, Z = 0, rezultatul este pozitiv nainte de instruire de executie: REG
= 2, V = 2, C = x, Z = X dup instruire: REG = 0, W = 2, C = 1, Z = 1 rezultat este 0
nainte de instruire de executie: REG = 1, W = 2, C = x, Z = X dup instruire: REG =
0xff, W = 2, C = 0, Z = 0 rezultat este negativ
SWAPF - Swap Nibbles n f
Sintaxa: [etichet] SWAPF f, d
Descriere: superioare i inferioare nibbles din registru sunt f swapped. Dac d = w sau d = 0, rezultatul
este stocat n registrul W. Dac d = f = 1 sau d, rezultatul este stocat n registrul f.
Operaia: F (0:3) -> D (4:7), F (4:7) -> D (0:3);
Operand: 0 f 127, D [0,1]
Microcontrolere PIC - De a A la Z

162

Stare afectate: --
Numr de cicluri: 1
Exemplul 1:
.... [etichet] SWAPF REG, W
nainte de instruire de executie: REG = 0xF3 Dup instruire: REG = 0xF3 W = 0x3F
Exemplul 2:
.... [etichet] SWAPF REG, f
nainte de instruire de executie: REG = 0xF3 Dup instruire: REG = 0x3F
XORLW - exclusive sau literatur cu W
Sintaxa: [etichet] XORLW k
Descriere: Coninutul registrului W este XOR'ed cu 8 bii k literatur. Rezultatul este stocat n registrul
W.
Operaia: (W). XOR. K -> W
Operand: 0 k 255
Stare afectate: Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] XORLW 0xAF
nainte de instruire de executie: W = 0xB5; 1011 0101 (0xB5); 1010 1111 (0xAF) -----
------------- Dup instruire: 0x1A = W; 0001 1010 (0x1A) Z = 0
Exemplul 2:
Const equ 0x37 [etichet] XORLW Const
nainte de instruire de executie: W = 0xAF; 1010 1111 (0xAF) Const = 0x37; 0011 0111
(0x37) ---------------------------- --- Dup instruire: = 0x98 W; 1001 1000 (0x98) Z =
0
XORWF - exclusive sau W cu f
Sintaxa: [etichet] XORWF f, d
Descriere: Coninutul este XOR'ed f registru cu coninutul registrului W. Un pic de rezultat este setat
doar n caz de bii corespunztoare operands sunt diferite. Dac d = w sau d = 0, rezultatul este stocat n
registrul W. Dac d = f = 1 sau d, rezultatul este stocat n registrul f.
Microcontrolere PIC - De a A la Z

163

Operaia: (W). XOR. K -> D
Operand: 0 f 127, D [0,1]
Stare afectate: Z
Numr de cicluri: 1
Exemplul 1:
.... [etichet] XORWF REG, f
nainte de instruire de executie: REG = 0xAF, W = 0xB5; 1010 1111 (0xAF); 1011 0101
(0xB5) ------------------ Dup instruire: REG = 0x1A, W = 0xB5; 0001 1010 (0x1A)
Exemplul 2:
.... [etichet] XORWF REG, W
nainte de instruire de executie: REG = 0xAF, W = 0xB5; 1010 1111 (0xAF); 1011 0101
(0xB5) ------------------ Dup instruire: REG = 0xAF, W = 0x1A; 0001 1010 (0x1A)
n plus fa de instruciunile precedente, Microchip a introdus, de asemenea, alte instruciuni. Mai exact,
acestea nu sunt instruciuni ca atare, dar macro-uri suportate de ctre MPLAB. Microchip le denumete
"Instruciuni speciale", deoarece toate acestea sunt, de fapt, obinute prin combinarea deja.
Instruciune Descriere Echivalent de instruciuni Stare afectate
ADDCF f, d Adugai transporta cu
BTFSC
INCF
STARE, C
ADDDCF f, d Adugai cu Digitlis Carry
BTFSC
INCF
STARE, DC
B k Ramur Du-te
BC k
Compartiment clasificatorului
pe Carry
BTFSC
Du-te
STARE, C
BDC k
Compartiment clasificatorului
pe Digitlis Carry
BTFSC
Du-te
STARE, DC
BNC k Filiala nr pe Carry
BTFSS
Du-te
STARE, C
BNDC k Filiala nr pe Digitlis Carry
BTFSS
Du-te
STARE, DC
BNZ k Filiala nr la zero
BTFSS
Du-te
STARE, Z
BZ k
Compartiment clasificatorului
la zero
BTFSC
Du-te
STARE, Z
CLRC Clear Carry BCF STARE, C
CLRDC Clear Digit Carry BCF STATUS,DC
CLRZ Clear Zero BCF STATUS,Z
Microcontrolere PIC - De a A la Z

164

MOVFW f Move File to W MOVF
SETC f Set Carry BSF STATUS,C
SETDC Set Digit Carry BSF STATUS,DC
SETZ Set Zero BSF STATUS,Z
SKPC Skip on Carry BTFSS STATUS,C
SKPDC Skip on Digit Carry BTFSS STATUS,DC
SKPNC Skip on No Carry BTFSC STATUS,Z
SKPNDC Skip on No Digit Carry BTFSC STATUS,DC
SKPNZ Skip on Non Zero BTFSC STATUS,Z
SKPZ Skip on Zero BTFSS STATUS,Z
SUBCF f, d Subtract Carry from File
BTFSC
DECF
STATUS,C
SUBDCF f, d Subtract Digit Carry from File
BTFSC
DECF
STATUS,DC
TSTF f Test File MOVF



Va placut acest material? Atunci vizitati: www.tehnium-azi.ro