Katedra Optoelektroniki i Systemów
Elektronicznych
Wydział Elektroniki, Telekomunikacji
i Informatyki
Politechniki Gdańskiej
LABORATORIUM
MIKROSTEROWNIKI
I
MIKROSYSTEMY ROZPROSZONE
Dokumentacja mikrokontrolera PIC18F452
firmy Microchip
Gdańsk 2008
2
1 Główne cechy mikrokontrolera PIC 18F452:
•
architektura zoptymalizowana do języka programowania C,
-
kod źródłowy zgodny z rodziną PIC16 i PIC17,
•
pamięć programu 32Kbajtów,
•
pamięć danych 1.5Kbajta,
•
prędkość operacji:
-
DC – 40MHz – wejście zegarowe,
-
4MHz – 10MHz – wejście zegarowe z aktywną pętlą PLL,
•
instrukcje 16-bitowe, dane 8-bitowe,
•
100.000 cykli zapisu/odczytu pamięci FLASH,
•
1.000.000 cykli zapisu/odczytu pamięci EEPROM,
•
przechowywanie danych w pamięci FLASH, EEPROM >40 lat,
•
Power-on-reset (układ resetu po włączeniu zasilania) (POR),
•
Power-up-timer (PWRT) oraz Oscillator Start-up Timer (OST),
•
Watchdog Timer (WDT) z własnym oscylatorem RC,
•
programowalne zabezpieczenie kodu przed odczytem,
•
tryb zmniejszonego poboru mocy SLEEP,
•
możliwość wyboru opcji oscylatora,
•
możliwość programowania w systemie poprzez dwa piny (ICSP),
Charakterystyka urządzeń peryferyjnych:
•
trzy zewnętrzne wejścia przerwaniowe,
•
Timer0 – 8-bitowy zegar / 16-bitowy licznik z 8-bitowym programowalnym
preskalerem,
•
Timer1 – 16-bitowy zegar/licznik,
•
Timer2 – 8-bitowy zegar/licznik z 8-bitowym rejestrem okresu ( z przeznaczeniem dla
PWM),
•
Timer3 – 16-bitowy zegar/licznik,
•
opcja drugiego oscylatora Timer1/Timer3,
•
dwa moduły przechwytujące/porównujące/PWM mogą być skonfigurowane jako:
-
przechwytywanie 16-bitowe o maksymalnej rozdzelczości 6.25ns,
-
porównywanie 16-bitowe o maksymalnej rozdzielczości 100ns,
-
PWM o rozdzielczości 1 do 10 bitów
♦
maksymalna częstotliwość przy rozdzielczości 8-bitów – 156kHz,
♦
maksymalna częśtotliwość przy rozdzielczości 10-bitów – 39kHz,
•
synchroniczny port szeregowy (Master Synchronous Serial Port) o dwóch trybach
pracy:
-
3-przewodowy interfejs SPI,
-
tryb I
2
C
TM
(tryb Master/Slave),
•
tryb USART (wspomaga RS-465 i RS-232),
•
port równoległy (PSP Parallel Slave Port),
Charakterystyka urządzeń analogowych:
•
10-bitowy przetwornik analogowo/cyfrowy:
3
-
konwersja AC możliwa w trybie SLEEP,
-
liniowość
≤
1 LSb,
•
programowana detekcja niskiego napięcia (PLVD),
Rys. 1.1. Rozkład wyprowadzeń mikrokontrolera PIC18F452
Rys. 1.2. Jednostka arytmetyczno – logiczna ALU
4
Rys. 1.3. Schemat blokowy mikrokontrolera PIC18F452
5
Opis wyprowadzeń mikrokontrolera PIC18F452
Nazwa pinu
Numer
pinu
Wejście/
Wyjście
Typ
bufora
Opis
______
MCLR/Vpp
______
MCLR
Vpp
1
we
we
ST
ST
Wejście zerowania, aktywne
poziomem niskim.
Wejście napięcia programującego.
NC
-
-
-
Nie podłączone.
OSC1/CLKI
OSC1
CLKI
13
we
we
ST
CMOS
Wejście oscylatora.
Wejście zewnętrznego zegara.
OSC2/CLKO/RA6
OSC2
CLK0
RA6
14
we
we
we/wy
-
-
TTL
Wyjście oscylatora. Podłączone do
oscylatora lub rezonatora w trybie
crystal.
W trybie RC, CLKO jest wyjściem o
częstotliwości ¼ OSC1 i oznacza
czas wykonania instrukcji.
Uniwersalny port we/wy.
PORTA jest dwukierunkowym portem we / wy.
RA0/AN0
RA0
AN0
RA1/AN1
RA1
AN1
RA2/AN2/V
REF-
RA2
AN2
V
REF-
RA3/AN3/ V
REF+
RA3
AN3
V
REF+
RA4/T0CKI
RA4
T0CKI
__
RA5/AN4/SS/LVDI
2
3
4
5
6
7
we/wy
we
we/wy
we
we/wy
we
we
we/wy
we
we
we/wy
we
we/wy
TTL
Analog
TTL
Analog
TTL
Analog
Analog
TTL
Analog
Analog
SD/OD
ST
TTL
we/wy cyfrowe.
Wejście analogowe 0.
we/wy cyfrowe.
Wejście analogowe 1.
we/wy cyfrowe.
Wejście analogowe 2.
Ź
ródło ujemnego napięcia
referencyjnego.
we/wy cyfrowe.
Wejście analogowe 3.
Ź
ródło dodatniego napięcia
referencyjnego.
We/wy cyfrowe, wyjście z otwartym
drenem
Wejście zegarowe modułu Timer0.
We/wy cyfrowe.
Wejście analogowe 4.
6
N
RA5
AN4
SS
LVDIN
RA6
we
we
we
Analog
ST
Analog
Wybór układu Slave dla
synchronicznego portu szeregowego.
Detekcja niskiego napięcia
wejściowego.
Patrz pin 14
PORTB jest dwukierunkowym portem we/wy, programowo mogą być dołączane
wewnętrzne rezystory podciągające (pull-up).
RB0/INT0
RB0
INT0
RB1/INT1
RB1
INT1
RB2/INT2
RB2
INT2
RB3/CCP2
RB3
CCP2
RB4
RB5/PGM
RB5
PGM
RB6/PGC
RB6
PGC
RB7/PGD
RB7
PGD
33
34
35
36
37
38
39
40
we/wy
we
we/wy
we
we/wy
we
we/wy
we/wy
we/wy
we/wy
we/wy
we/wy
we/wy
we/wy
we/wy
TTL
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
We/wy cyfrowe.
Przerwanie zewnętrzne 0.
We/wy cyfrowe.
Przerwanie zewnętrzne 1.
We/wy cyfrowe.
Przerwanie zewnętrzne 2.
We/wy cyfrowe.
Wejście modułu Capture2, wyjście
modułów Compare2i PWM2.
We/wy cyfrowe, źródło przerwania.
We/wy cyfrowe, źródło przerwania.
Wejście programowania
niskonapięciowego (LVP).
We/wy cyfrowe, źródło przerwania.
Pin Debugera, wejście sygnału
zegarowego dla programowania
szeregowego.
We/wy cyfrowe, źródło przerwania.
Pin Debugera, wejście sygnału
danych dla programowania
szeregowego.
7
PORTC jest dwukierunkowym portem we/wy.
RC0/T1OSO/T1CK
I
RC0
T1OSO
T1CKI
RC1/T1OSI/CCP2
RC1
T1OSI
CCP2
RC2/CCP1
RC2
CCP1
RC3/SCK/SCL
RC3
SCK
SCL
RC4/SDI/SDA
RC4
SDI
SDA
RC5/SDO
RC5
SDO
RC6/TX/CK
RC6
TX
CK
RC7/RX/DT
RC7
RX
DT
15
16
17
18
23
24
25
26
we/wy
wy
we
we/wy
we
we/wy
we/wy
we/wy
we/wy
we/wy
we/wy
we/wy
we
we/wy
we/wy
wy
we/wy
wy
we/wy
we/wy
we
we/wy
ST
-
ST
ST
CMOS
ST
ST
ST
ST
ST
ST
ST
ST
ST
ST
-
ST
-
ST
ST
ST
ST
We/wy cyfrowe.
Wyjście oscylatora modułu Timer1.
Wejście sygnału zegarowego
modułów Timer1/Timer2.
We/wy cyfrowe.
Wejście oscylatora modułu Timer1.
Wejście modułu Capture2, wyjścia
modułów Capture2 i PWM2.
We/wy cyfrowe.
Wejście modułu Capture1, wyjścia
modułów Compare1 i PWM1.
We/wy cyfrowe.
We/wy zegarowe dla SPI.
We/wy zegarowe dla I
2
C
We/wy cyfrowe.
Wejście danych dla SPI.
We/wy danych dla I
2
C.
We/wy cyfrowe.
Wyjście danych dla SPI.
We/wy cyfrowe.
Transmisja asynchroniczna USART.
Sygnał zegarowy dla USART
We/wy cyfrowe.
Asynchroniczny odbiór danych
USART
Synchroniczna transmisja danych
USART (patrz na związek sygnałów
TX/CK).
8
PORTD może być dwukierunkowym portem we/wy, lub portem równoległym, dla portu
równoległego wszystkie wejścia są typu TTL.
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
19
20
21
22
27
28
29
30
we/wy
we/wy
we/wy
we/wy
we/wy
we/wy
we/wy
we/wy
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
TTL
We/wy cyfrowe.
Dane portu równoległego.
We/wy cyfrowe.
Dane portu równoległego.
We/wy cyfrowe.
Dane portu równoległego.
We/wy cyfrowe.
Dane portu równoległego.
We/wy cyfrowe.
Dane portu równoległego.
We/wy cyfrowe.
Dane portu równoległego.
We/wy cyfrowe.
Dane portu równoległego.
We/wy cyfrowe.
Dane portu równoległego.
PORTE jest dwukierunkowym portem we/wy.
___
RE0/RD/AN5
RE0
RD
AN5
___
RE1/WR/AN6
RE1
WR
AN6
__
RE2/CS/AN7
RE2
CS
AN7
8
9
10
we/wy
we/wy
we/wy
ST
TTL
Analog
ST
TTL
Analog
ST
TTL
Analog
We/wy cyfrowe.
Sterowanie odczytem dla danych
portu równoległego.
Analogowe wejście 5.
We/wy cyfrowe.
Sterowanie odczytem dla danych
portu równoległego.
Analogowe wejście 6.
We/wy cyfrowe.
Sygnał wyboru dla portu
równoległego.
Analogowe wejście 7.
Vss
12,31
P
-
Masa układów logicznych i linii
we/wy
VDD
11,32
P
-
Plus napięcia zasilania układów
logicznych i linii we/wy.
9
2 Adresowanie pośrednie, rejestry INDF i FSR
Adresowanie pośrednie jest sposobem adresowania pamięci danych, w którym adres
komórki zawierającej daną zmienia się. Rejestr FSR (File Select Register) wskazuje miejsce,
w którym dana ma być zapisana, lub z którego dana ma być odczytana. Mechanizm ten
szczególnie jest użyteczny przy tworzeniu tablic danych oraz przy konstruowaniu
programowego stosu.
Rys. 2.1. Adresowanie pośrednie
Adresowanie pośrednie wykorzystuje rejestr INDF. Nie jest on rejestrem fizycznym.
Instrukcje wykonywane na INDF dotyczą komórki pamięci wskazywanej przez rejestr FSR
(File Select Register). Przykładowo: wpisana dana do rejestru INDF zostanie zapisana w
komórce o adresie wskazywanym przez FSR, odczytując daną, rejestrem FSR wskazujemy
jej lokalizację, następnie poprzez rejestr INDF odczytujemy jej wartość. Istnieją trzy rejestry
pośredniego adresowania.
Aby zapisać 12-bitowy adres każdy z tych rejestrów został podzielony na dwa rejestry 8-
bitowe, mianowicie:
rejestr FSR0 na który składają się rejestry FSR0H : FSR0L,
rejestr FSR1 na który składają się rejestry FSR1H : FSR1L,
rejestr FSR2 na który składają się rejestry FSR2H : FSR2L,
Dodatkowo istnieją trzy rejestry INDF: INDF0, INDF1, INDF2, które nie są
rejestrami fizycznie zaimplementowanymi w strukturę mikrokontrolera.
Operacje adresowania pośredniego
Gdy dostęp do danej poprzez rejestr INDF jest możliwy należy określić w jaki sposób
rejestr FSR będzie modyfikowany.
Istnieje pięć sposobów zmiany rejestru FSR:
po odczytaniu/zapisaniu danej nie zmieniaj rejestru FSR,
po odczytaniu/zapisaniu danej zmniejsz wartość FSR,
POSTDEC
(post-decrement),
po odczytaniu/zapisaniu danej zwiększ wartość FSR,
POSTINC
(post-increment),
10
zwiększenie wartość FSR, następnie odczytanie/zapisanie danej,
PREINC
(pre-
increment),
użycie zawartości rejestru WREG jako offsetu dla rejestru FSR,
PLUSW
,
Wykorzystując tryby post-decrement i post-increment efekt zmiany rejestru FSR nie
jest odzwierciedlony w rejestrze STATUS. Przykładowo jeżeli rejestr FSR osiągnie wartość
równą 0, bit Z rejestru STATUS nie zostanie ustawiony.
3 Rejestry związane z funkcjami CPU
Rejestr STATUS
Rejestr STATUS określa stan jednostki arytmetyczno-logicznej ALU (Arithmetic-
Logic Unit). Bity rejestru STATUSU są odpowiednio ustawiane, bądź zerowane zależnie od
wyniku działania ALU.
Użytkownik ma możliwość zmiany wartości poszczególnych bitów. Wykonanie
instrukcji
CLRF STATUS
spowoduje wyzerowanie trzech najstarszych bitów i ustawienie
bitu Z. Rejestr STATUS będzie miał postać
000u u1uu
(gdzie
u
- wartości niezmienione).
Z tego powodu do zmiany rejestru STATUS zaleca się używanie instrukcji
BCF
,
BSF
,
SWAPF
,
MOVFF
,
MOVWF
. Instrukcje te nie zmieniają stanu bitów Z, C, DC, OV, oraz N.
U-0
U-0
U-0
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x
-
-
-
N
OV
Z
DC
C
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7-5
bity niezaimplementowane
bit 4
N:
bit negacji
1 = wynik operacji jest ujemny
0 = wynik operacji jest dodatni
bit 3
OV:
bit przepełnienia
1 = wystąpiło przepełnienie
0 = nie wystąpiło przepełnienie
bit 2
Z:
bit zera
1 = wynik operacji arytmetycznej lub logicznej jest zero
0 = wynik operacji arytmetycznej lub logicznej jest różny od zera
bit 1
DC:
bit przeniesienia połówkowego / pożyczki
dla instrukcji
ADDWF
,
ADDWL
,
SUBLW
,
SUBWF
1 = wystąpiło przeniesienie z 3 na 4 bit
0 = nie wystąpiło przeniesienie z 3 na 4 bit
bit 0
C:
bit przeniesienia / pożyczki
dla instrukcji
ADDWF
,
ADDWL
,
SUBLW
,
SUBWF
1 = wystąpiło przeniesienie z najbardziej znaczącego bitu
0 = nie wystąpiło przeniesienie z najbardziej znaczącego bitu
11
Rejestr RCON (Reset Control)
Rejestr RCON zawiera informacje o źródle powstania RESETU. Rejestr jest zapisywalny
i odczytywalny.
R/W-0
U-0
U-0
R/W-1
R-1
R-1
R/W-0
R/W-0
IPEN
-
-
~RI
~TO
~PD
~POR
~BOR
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
IPEN:
priorytet przerwania
1 = obsługa priorytetów przerwania (low/high)
0 = brak obsługi priorytetów przerwania (wszystkie przerwania
traktowane są jako high)
bit 6-5
bity niezaimplementowane
bit 4
~RI:
flaga od wystąpienia instrukcji
RESET
1 = nie została wykonana instrukcja
RESET
0 = została wykonana instrukcja
RESET
(flaga ta musi byś ustawiona programowo po wystąpieniu resetu Brown-out)
bit 3
~TO:
flaga resetu od licznika Watchdog
1 = po włączeniu zasilania, po wykonaniu instrukcji CLRWDT, SLEEP
0 = reset od licznika Watchdog
bit 2
~PD:
flaga zaniku napięcia zasilania
1 = po zaniku napięcia zasilania, lub po wykonaniu instrukcji CLRWDT
0 = po wykonaniu instrukcji SLEEP
bit 1
~POR:
reset po włączeniu napięcia zasilania
1 = nie wystąpił reset po włączeniu zasilania
0 = wystąpił reset po włączeniu zasilania
(musi być ustawiony programowo po wystąpieniu ~POR)
bit 0
~BOR:
(Brown-out Reset) reset zaniku napięcia zasilania poniżej wartości
progowej
1 = nie wystąpił reset Brown-out
0 = wystąpił reset Brown-out
(musi być ustawiony programowo po wystąpieniu ~BOR)
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
12
4 Organizacja pamięci
Pamięć mikroprocesora można podzielić na dwie odrębne części: pamięć programu
oraz pamięć danych. W pamięci danych mogą być przechowywane dane pomiarowe, czy
przejściowe wyniki obliczeń. Mikroprocesor może odczytywać oraz zapisywać dane. Niestety
po zaniku napięcia zasilania dane te ulegają zanikowi. Wśród pamięci danych wyróżnić
można również pamięć, w której raz zapisana informacja nie ulega utracie nawet po zaniku
napięcia zasilania. W pamięciach tych EEPROM (Electrically EPROM) kasowanie
zawartości odbywa się w sposób elektryczny. Służy do przechowywania ważnych danych
takich jak np. nastawy urządzeń kalibracyjnych. Pamięć programu służy do przechowywania
instrukcji wykonywanego programu.
Pamięć programu
Pamięć programu jest zaimplementowana jako jeden niezależny blok, gdzie wektor
RESET znajduje się pod adresem 0000h, natomiast wektory przerwań zostały umieszczone
pod dwoma adresami 0008h i 0018h, którym odpowiadają wysoki i niski priorytet obsługi.
Instrukcje
CALL
i
GOTO
mogą adresować cały obszar mapy pamięci, natomiast
BRA
,
i
RCALL
mają ograniczony zasięg (+1023 do -1024 komórek pamięci programu).
13
D3.1. Mapa pamięci programu i stosu
Pamięć danych
Pamięć danych podzielona jest na 16 banków, z których każdy zawiera 256 bajtów.
Wyboru banku dokonuje się poprzez rejestr BSR (Bank Select Register). W rejestrze tym
cztery młodsze bity określają numer banku, pozostałe bity nie zostały zaimplementowane. W
pamięci danych znajdują się rejestry funkcji specjalnych SFR (Special Function Registers)
używane do kontroli stanu mikrokontrolera i urządzeń peryferyjnych, rozpoczynają się od
ostatniej pozycji Banku 15 (0xFFF), oraz rejestry ogólnego przeznaczenia GPR (General
Purpose Registers) stosowane do przechowywania danych zależnie od potrzeb użytkownika,
rozpoczynają się od pierwszej pozycji Banku 0.
14
D3.2. Mapa pamięci danych
Organizacji pamięci danych towarzyszy mechanizm banku dostępu (Access Bank).
Składa się na niego starsza część 128 bajtów Banku 15, która stanowi zbiór rejestrów funkcji
specjalnych SFR, oraz młodsza część 128 bajtów Banku 0, będąca rejestrami ogólnego
przeznaczenia GPR. Taki obszar pamięci danych stosowany jest przy definiowaniu lokalnych
zmiennych różnych podprogramów, szybkim zapisywaniu/przełączaniu kontekstu zmiennych,
definiowaniu wspólnych zmiennych oraz szybkim przełączaniu rejestrów funkcji specjalnych
SFR.
Aby móc korzystać z właściwości banku dostępu w kodzie instrukcji asemblera należy
odpowiednio ustawić bit ‘
a
’ będącym jednym z argumentów instrukcji. Przykładowo
instrukcja
ADDWF
f,d,a
oznacza dodanie zawartości rejestru W do zawartości rejestru f. Bit
‘
d
’ określa, gdzie wynik operacji dodawania zostanie umieszczony, czy w rejestrze f (dla
‘
d
’=1), czy też w rejestrze W (dla ‘
d
’=0). Bit ‘
a
’, o którym była wcześniej mowa określa,
który bank jest wykorzystywany do przeprowadzenia dodawania. Jeżeli ‘
a
’=1,
wykorzystywany jest bank wskazywany przez rejestr BSR, jeżeli ‘
a
’=0, stosowany jest bank
dostępu.
15
Zbiór rejestrów funkcji specjalnych SFR, stanowiących integralną część pamięci
danych oraz banku dostępu przedstawiony jest na Rys.2.6.
D3.3. Rejestry funkcji specjalnych SFR
16
Pamięć danych EEPROM
Przy obsłudze bloku pamięci EEPROM, rejestr EEDATA przechowuje 8-bitową
daną przeznaczoną do zapisu/odczytu, zaś w rejestrze EEADR znajduje się adres dostępu do
komórki pamięci. Użytkownik dysponuje 256 bajtami pamięci EEPROM o adresach od
00h-FFh.
Zapis do komórki zapełnionej spowoduje skasowanie jej zawartości i wpisanie nowej
danej (erase-before-write). Czas wpisu zależny od napięcia zasilania zmieniającego się od
V
MIN
= 4.2V do V
DD
= 5.5V oraz temperatury, jest kontrolowany przez wewnętrzny zegar i
typowo wynosi T
DEW
= 4ms.
Bity RD i WR rejestru EECON1 rozpoczynają odpowiednio operację odczytu jak i
zapisu. Mogą one być ustawiane programowo, zerowanie odbywa się sprzętowo stosownie do
zakończenia odpowiedniej operacji. Brak możliwości programowego zerowania bitu WR
zapobiega przypadkowemu lub przedwczesnemu zakończeniu zapisu.
Ustawienie bitu WREN jest jednoznaczne z umożliwieniem dokonania operacji
zapisu. Bit ten po włączeniu zasilania jest ustawiony na ‘0’. Kiedy proces zapisu zostanie
przerwany przez reset ~MCLR, lub przez przepełnienie licznika Watch-dog (WDT-reset), bit
WRERR jest ustawiony na ‘1’. W takim przypadku użytkownik odczytując stan bitu WRERR
może wznowić proces zapisu, należy wówczas ponownie „załadować” daną i adres do
rejestrów EEDATA i EEADR.
UWAGA!
Kiedy zakończy się proces zapisu, ustawiana jest flaga EEIF w rejestrze PIR2.
Flaga ta musi być programowo zerowana.
17
Rejestr EECON1 (adres FA6h)
R/W-x
R/W-x
U-0
R/W-0
R/W-x
R/W-0
R/S-0
R/S-0
EEPGD
CFGS
-
FREE
WRERR
WREN
WR
RD
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
EEPGD:
wybór rodzaju pamięci FLASH/EEPROM
1 = pamięć programu FLASH
0 = pamięć danych EEPROM
bit 6
CFGS:
pamięć FLASH/pamięć EEPROM lub bity konfiguracyjne
1 = dostęp do bitów konfiguracyjnych
0 = dostęp do pamięci FLASH lub pamięci EEPROM
bit 5
bit niezaimplementowany
bit 4
FREE:
bit zezwolenia skasowania komórki pamięci FLASH
1 = skasowanie komórki pamięci wskazywanej przez rejestr TBLPTR przy
następnej operacji zapisu WR
(bit kasowany po ukończeniu operacji zapisu)
0 = wykonanie tylko zapisu
bit 3
WRERR:
bit błędu zapisu do pamięci FLASH/EEPROM
1 = operacja zapisu została przedwcześnie zakończona
0 = operacja zapisu zakończona powodzeniem
bit 2
WREN:
bit zezwolenia zapisu do FLASH/EEPROM
1 = zezwolenie zapisu
0 = zakaz zapisu do EEPROM
bit 1
WR:
bit kontroli zapisu
1 = rozpoczyna operację kasowania/zapisu do EEPROM lub do FLASH
(operacja jest kontrolowana przez wewnętrzny zegar, bit jest zerowany
sprzętowo po zakończeniu zapisu, bit WR może być tylko ustawiany
programowo)
0 = zapis do EEPROM ukończony
bit 0
RD:
bit kontroli odczytu
1 = rozpoczyna operację odczytu EEPROM
(bit RD zerowany jest sprzętowo, bit RD może być tyko ustawiany
programowo)
0 = odczyt nie został rozpoczęty
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
18
Odczyt pamięci danych EEPROM
Chcąc odczytać daną z pamięci EEPROM należy:
wpisać do rejestru EEADR adres spod którego dana ma być odczytana,
wybrać rodzaj pamięci przez wyzerowanie bitu EEPGD w rejestrze EECON1,
umożliwić dostęp do pamięci EEPROM przez wyzerowanie bitu CFGS w rejestrze
EECON1,
rozpocząć operację odczytu ustawieniem bitu RD rejestru EECON1,
dana dostępna w rejestrze EEDATA,
MOVLW ADRES_DANEJ
MOVWF EEADR ; adres danej
BCF EECON1, EEPGD ; wybór EEPROM
BCF EECON1, CFGS ; dost
ę
p do EEPROM
BCF EECON1, RD ; odczyt EEPROM
MOVF EEDATA, W ; dana w rejestrze W
Listing D1.1 Odczyt pamięci danych EEPROM
Zapis do pamięci danych EEPROM
Chcąc zapisać daną do pamięci EEPROM należy:
do rejestru EEADR wpisać adres wskazujący miejsce zapisu danej,
do rejestru EEDATA wpisać daną do zapisu w EEPROM-ie,
wybrać rodzaj pamięci przez wyzerowanie bitu EEPGD w rejestrze EECON1,
umożliwić dostęp do pamięci EEPROM przez wyzerowanie bitu CFGS w rejestrze
EECON1,
zezwolić na operację zapisu ustawieniem bitu WREN rejestru EECON1,
zablokować przerwania zerując bit GIE(Global Interrupt Enable) rejestru INTCON (o
ile przerwania są używane),
wykonać sekwencję instrukcji:
•
zapisać wartość 55h do rejestru EECON2 w dwóch krokach
(najpierw do rejestru W, później do rejestru EECON2),
•
zapisać wartość AAh do rejestru EECON2 w dwóch krokach
(najpierw do rejestru W, później do rejestru EECON2),
rozpocząć operację zapisu ustawieniem bitu WR rejestru EECON1,
odblokować przerwania ustawiając bit GIE (Global Interrupt Enable) rejestru
INTCON (o ile przerwania są używane),
19
MOVLW ADRES_DANEJ
MOVWF EEADR ; adres danej
MOVLW DANA_DO_ZAPISANIA ;dana do zapisania
MOVWF EEDATA
BCF EECON1, EEPGD ; wybór EEPROM
BCF EECON1, CFGS ; dost
ę
p do EEPROM
BSF EECON1, WREN ; zezwolenie na zapis
BCF INTCON, GIE ; blokada przerwa
ń
wymagana MOVLW 55h
sekwencja
MOVWF EECON2
instrukcji MOVLW AAh
MOVWF EECON2
BSF EECON1, WR ; rozpocz
ę
cie zapisu
BSF INTCON, GIE ; odblokowanie
;przerwa
ń
.
. ; kod u
ż
ytkownika
.
BCF EECON1, WREN ; zako
ń
czenie zapisu,
; flaga przerwania
; EEIF
; rejestru INTCON
; ustawiona na 1
Listing D3.1. Zapis do pamięci danych EEPROM
Wspomniana wyżej wymagana sekwencja instrukcji musi być wykonywana dla
każdego zapisywanego bajtu. Brak tych instrukcji uniemożliwi zapis do EEPROM. Zaleca
się, aby przed wykonaniem instrukcji zapisu do rejestru EECON2 zablokować przerwania.
Bit WREN powinien być wyzerowany przez czas normalnej pracy programu, ustawiany
jedynie przy zapisie do EEPROM. Zapobiega się w ten sposób przypadkowemu zapisowi do
EEPROM np. nieskończona pętla. Rozpoczęcie zapisu będzie możliwe, jeżeli w poprzedniej
instrukcji bit WREN został ustawiony na ‘1’. Po zakończeniu zapisu bit WR jest zerowany
sprzętowo, flaga zakończenia zapisu EEIF rejestru INTCON zostanie ustawiona.
5 Mnożenie wspomagane sprzętowo
Jednostka arytmetyczno logiczna w swojej strukturze zawiera sprzętowy mechanizm
wspomagający mnożenie. Umożliwia to wykonywanie mnożenia w jednym cyklu
rozkazowym. Mnożąc dwie liczby 8-bitowe otrzymany wynik umieszczany jest w parze
rejestrów PRODH:PRODL.
Zalety mnożenia sprzętowego:
zmniejszenie zajętości mikroprocesora (większa przepustowość),
zredukowanie wielkości kodu przy algorytmach mnożących,
20
Czas wykonywanych operacji pozwala na wykorzystanie urządzenia w aplikacjach
wcześniej zarezerwowanych tylko dla Procesorów Sygnałowych.
Czas
Rodzaj
mno
ż
enia
Metoda mno
ż
enia
Pami
ęć
programu
(słowa)
Cykle
(max)
40MHz
10MHz
4MHz
Mno
ż
enie bez wspomagania
sprz
ę
towego
13
69
6.9
µ
s
27.6
µ
s
69
µ
s
8 x 8 unsigned
Mno
ż
enie sprz
ę
towe
1
1
100ns
400ns
1
µ
s
Mno
ż
enie bez wspomagania
sprz
ę
towego
33
91
9.1
µ
s
36.4
µ
s
91
µ
s
8 x 8 signed
Mno
ż
enie sprz
ę
towe
6
6
600ns
2.4
µ
s
6
µ
s
Mno
ż
enie bez wspomagania
sprz
ę
towego
21
242
24.2
µ
s
96.8
µ
s
242
µ
s
16 x16
unsigned
Mno
ż
enie sprz
ę
towe
24
24
2.4
µ
s
9.6
µ
s
24
µ
s
Mno
ż
enie bez wspomagania
sprz
ę
towego
52
254
25.4
µ
s
102.6
µ
s
254
µ
s
16 x 16 signed
Mno
ż
enie sprz
ę
towe
36
36
3.6
µ
s
14.4
µ
s
36
µ
s
Tabela D4.1. Porównanie metod mnożenia
6 Przerwania
Zmieniając wartość bitu IPEN w rejestrze RCON, użytkownik może zdecydować, czy
używać priorytetów przerwań, czy też wszystkie przerwania traktować jednakowo – jak
przerwania o wysokim priorytecie. Chcąc wykorzystywać przerwania należy sterować bitami
odpowiedzialnymi za globalne blokowanie/odblokowywanie przerwań. Bit GIEH rejestru
INTCON odblokowuje przerwania wysokiego priorytetu, bit GIEL rejestru INTCON
odblokowuje przerwania priorytetu niskiego.
Wykorzystując kod obsługi przerwań mikrokontrolerów rodziny PIC18Cxxx w
mikrokontrolerach rodziny PIC
mid-range, ustawieniem bitu IPEN=0 rejestru RCON
zapewniona jest zgodność obsługi przerwań. Wszystkie przerwania przekazywane są pod
adres 000008h.
Pojawienie się przerwania powoduje ustawienie bitu GIE=0 uniemożliwiając tym
samym przyjęcie następnego przerwania. Adres powrotu z obsługi przerwania jest
umieszczany na stosie, do licznika rozkazów PC (Program Counter) umieszczany jest adres
wektora przerwania (000008h lub 000018h). Źródło przerwania może być określone poprzez
przeglądanie bitów flag przerwań. Bit flagi musi być zerowany programowo przed
ponownym odblokowaniem przerwań. Zapobiega to powtarzaniu się przerwań.
Dla przerwań zewnętrznych (portu B), występuje opóźnienie przyjęcia przerwania
równe trzem lub czterem cyklom rozkazowym.
21
D5.1. Układ przerwań
Rysunek D5.1 przedstawia układ przerwań z wszystkimi dostępnymi bitami
stosowanymi przy obsłudze przerwań, przedstawia również podział urządzeń posiadających
wysoki, oraz niski priorytet obsługi.
22
Rejestr INTCON
( Rejestry INTCON - INTCON3 są rejestrami odczytywalnymi/zapisywalnymi, zawierają bity
zezwalania na wystąpienie przerwania, ustalania priorytetów oraz bity flag ).
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-x
GIE/GIEH PEIE/GIEL TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
bit 7
Bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
GIE/GIEH:
bit globalnego zezwolenia na przerwanie:
gdy IPEN=0
1 = odblokowanie wszystkich nie zamaskowanych przerwań,
0 = wszystkie przerwania zablokowane,
gdy IPEN=1
1 = odblokowanie przerwań wysokiego priorytetu,
0 = wszystkie przerwania zablokowane,
bit 6
PEIE/GIEL:
zezwolenie na przerwanie od układów peryferyjnych:
gdy IPEN=0
1 = odblokowanie wszystkich nie zamaskowanych przerwań od układów
peryferyjnych,
0 = wszystkie przerwania od urządzeń peryferyjnych zablokowane,
gdy IPEN=1
1 = odblokowanie przerwań niskiego priorytetu od układów peryferyjnych,
0 = zablokowanie wszystkich przerwań niskiego priorytetu od układów
peryferyjnych,
bit 5
TMR0IE:
zezwolenie na przerwanie od przepełnienia licznika TMR0:
1 = odblokowanie przerwania od przepełnienia licznika TMR0,
0 = zablokowanie przerwania od przepełnienia licznika TMR0,
bit 4
INT0IE:
zezwolenie na przerwanie zewnętrzne z linii RB0/INT0:
1 = odblokowanie przerwania zewnętrznego na linii RB0/INT0,
0 = zablokowanie przerwania zewnętrznego na linii RB0/INT0,
bit 3
RBIE:
zezwolenie na przerwanie pochodzące od zmiany stanu PORTuB:
1 = odblokowanie przerwania od zmiany stanu na liniach PORTuB,
0 = zablokowanie przerwania od zmiany stanu na liniach PORTuB,
bit 2
TMR0IF:
flaga przerwania od przepełnienia licznika 0 (TMR0):
1 = nastąpiło przepełnienie licznika TMR0 (musi być zerowana programowo),
0 = nie nastąpiło przepełnienie licznika TMR0,
bit 1
INT0IF:
flaga zewnętrznego przerwania z linii RB0/INT0:
1 = wystąpiło zewnętrzne przerwanie na linii RB0/INT0
(musi być zerowana programowo),
0 = nie wystąpiło zewnętrzne przerwanie na linii RB0/INT0,
bit 0
RBIF:
flaga przerwania od zmiany stanu PORTuB:
1 = pojawiła się przynajmniej jedna zmiana stanu na liniach RB4:RB7
(musi być zerowana programowo),
0 = nie pojawiła się zmiana stanu na liniach RB4:RB7,
23
Rejestr INTCON2
R/W-1
R/W-1
R/W-1
R/W-1
U-0
R/W-1
U-0
R/W-1
RBPU INTEDG0 INTEDG1 INTEDG2
-
TMR0IP
-
RBIP
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
~RBPU:
zezwolenie na podłączenie rezystorów pull-up do PORTuB:
1 = rezystory pull-up odłączone,
0 = rezystory pull-up dołączone,
bit 6
INTEDG0:
wybór zbocza przerwania zewnętrznego INTE0:
1 = przerwanie na narastające zbocze,
0 = przerwanie na opadające zbocze,
bit 5
INTEDG1:
wybór zbocza przerwania zewnętrznego INTE1:
1 = przerwanie na narastające zbocze,
0 = przerwanie na opadające zbocze,
bit 4
INTEDG2:
wybór zbocza przerwania zewnętrznego INTE2:
1 =przerwanie na narastające zbocze ,
0 = przerwania na opadające zbocze,
bit 3
bit niezaimplementowany,
bit 2
TMR0IP:
wybór priorytetu przepełnienia licznika TMR0:
1 = wysoki priorytet,
0 = niski priorytet,
bit 1
bit niezaimplementowany,
bit 0
RBIP:
wybór priorytetu zmiany stanu na liniach RB4:RB7:
1 = wysoki priorytet,
0 = niski priorytet,
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
24
Rejestr INTCON3
R/W-1
R/W-1
U-0
R/W-0
R/W-0
U-0
R/W-0
R/W-0
INT2IP
INT1IP
-
INT2IE
INTE1IE
-
INT2IF
INT1IF
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
INT2IP:
wybór priorytetu przerwania zewnętrznego od INT2:
1 = wysoki priorytet,
0 = niski priorytet,
bit 6
INT1IP:
wybór priorytetu przerwania zewnętrznego od INT1:
1 = wysoki priorytet,
0 = niski priorytet,
bit 5
bit niezaimplementowany,
bit 4
INT2IE:
zezwolenie na przerwanie zewnętrzne na INT2:
1 = odblokowanie przerwania zewnętrznego na INT2,
0 = zablokowanie przerwania zewnętrznego na INT2,
bit 3
INT1IE:
zezwolenie na przerwanie zewnętrzne na INT1:
1 = odblokowanie przerwania zewnętrznego na INT1,
0 = zablokowanie przerwania zewnętrznego na INT1,
bit 2
bit niezaimplementowany,
bit 1
INT2IF:
flaga przerwania zewnętrznego od INT2:
1 = wystąpiło zewnętrzne przerwanie na INT2
(musi być zerowana programowo),
0 = nie wystąpiło zewnętrzne przerwanie na INT2,
bit 0
INT1IF:
flaga przerwania zewnętrznego od INT1:
1 = wystąpiło zewnętrzne przerwanie na INT1
(musi być zerowana programowo),
0 = nie wystąpiło zewnętrzne przerwanie na INT1,
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
25
Rejestr PIR1
PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 1
( Rejestry PIR1, PIR2 zawierają flagi przerwań od urządzeń peryferyjnych. Poszczególne bity
flag przerwań ustawiane są w momencie wystąpienia przerwania, niezależnie od stanu bitu
GIE rejestru INTCON. Po obsłudze przerwania należy zerować flagę przerwania
programowo ).
R/W-0
R/W-0
R-0
R-0
R/W-0
R/W-0
R/W-0
R/W-0
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF TMR1IF
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
PSPIF:
flaga przerwania zapisu/odczytu portu równoległego
(zarezerwowany dla układów rodziny PIC18F2x2):
1 = wystąpiła operacja zapisu/odczytu (musi być zerowana programowo),
0 = nie wystąpiła operacja zapisu/odczytu,
bit 6
ADIF:
flaga przerwania od przetwornika A/C:
1 = konwersja analogowo-cyfrowa zakończyła się
(musi być zerowana programowo),
0 = konwersja analogowo-cyfrowa nie zakończyła się,
bit 5
RCIF:
flaga przerwania odbiornika USART:
1 = bufor odbiornika USART, rejestr RCREG jest pełny
(flaga jest zerowana przy odczycie rejestru RCREG),
0 = bufor odbiornika USART jest pusty,
bit 4
TXIF:
flaga przerwanie nadajnika USART:
1 = bufor nadajnika USART, rejestr TXREG jest pusty
(flaga jest zerowana przy zapisie do rejestru TXREG),
0 = bufor nadajnika USART jest pełny,
bit 3
SSPIF:
flaga przerwania transmisji synchronicznej:
1 = transmisja/odbiór zakończony,
0 = oczekiwanie na transmisję/odbiór,
bit 2
CCP1IF:
flaga przerwania od układu CCP (Capture, Compare, PWM):
tryb Capture:
1 = nastąpiło zatrzaśnięcie rejestru TMR1
(flaga musi być zerowana programowo),
0 = nie wystąpiło zatrzaśnięcie rejestru TMR1,
tryb Compare:
1 = nastąpiło zrównanie rejestru TMR1
(flaga musi być zerowana programowo),
0 = nie nastąpiło zrównanie rejestru TRM1,
tryb PWM:
nieużywany,
bit 1
TMR2IF:
flaga przerwania równości rejestrów TMR2 i PR2:
1 = wystąpiło zrównanie wartości rejestrów TMR2 i PR2
(flaga musi być zerowana programowo),
0 = nie wystąpiło zrównanie wartości rejestrów TMR2 i PR2,
bit 0
TMR1IF:
flaga przerwania przepełnienia rejestru TMR1:
1 = wystąpiło przepełnienie rejestru TMR1,
0 = nie wystąpiło przepełnienie rejestru TMR1,
26
Rejestr PIR2
PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 2
U-0
U-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
-
-
-
EEIF
BCLIF
LVDIF
TMR3IF CCP2IF
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7-5
bity niezaimplementowane,
bit 4
EEIF:
flaga przerwania zakończenia zapisu do pamięci EEPROM/FLASH:
1 = operacja zapisu zakończyła się (flaga musi być zerowana programowo),
0 = operacja zapisu nie zakończyła się, lub nie została rozpoczęta,
bit 3
BCLIF:
flaga przerwania kolizji magistrali:
1 = wystąpiła kolizja magistrali (flaga musi być zerowana programowo),
0 = nie wystąpiła kolizja magistrali,
bit 2
LVDIF:
flaga przerwania wykrycia spadku napięcia zasilania:
1 = wystąpił spadek napięcia (flaga musi być zerowana programowo),
0 = napięcie zasilania jest wyższe od zaprogramowanego progu zadziałania,
bit 1
TMR3IF:
flaga przerwania przepełnienia licznika TMR3:
1 = nastąpiło przepełnienie rejestru TMR3
(flaga musi być zerowana programowo),
0 = nie nastąpiło przepełnienie rejestru TMR3,
bit 0
CCP2IF:
flaga przerwania od układu CCP (Capture, Compare, PWM):
tryb Capture:
1 = nastąpiło zatrzaśnięcie rejestru TMR1
(flaga musi być zerowana programowo),
0 = nie wystąpiło zatrzaśnięcie rejestru TMR1,
tryb Compare:
1 = nastąpiło zrównanie rejestru TMR1
(flaga musi być zerowana programowo),
0 = nie nastąpiło zrównanie rejestru TRM1,
tryb PWM:
nieużywany,
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
27
Rejestr PIE1
PERIPHERAL INTERRUPT ENABLE REGISTER 1
( Rejestry PIE1, PIE2 zawierają bity zezwoleń na przerwania od poszczególnych układów
peryferyjnych. Aby odblokować przerwania układów peryferyjnych bit PEIE rejestru
INTCON musi być ustawiony).
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE TMR2IE TMR1IE
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
PSPIE:
zezwolenie na przerwanie zapisu/odczytu portu równoległego
(zarezerwowany dla układów rodziny PIC18F2x2):
1 = odblokowanie przerwania operacji zapisu/odczytu,
0 = zablokowanie przerwania operacji zapisu/odczytu,
bit 6
ADIE:
zezwolenie na przerwanie od przetwornika A/C:
1 = odblokowanie przerwania od przetwornika A/C,
0 = zablokowanie przerwania od przetwornika A/C,
bit 5
RCIE:
zezwolenie na przerwanie od odbiornika USART:
1 = odblokowanie przerwania od odbiornika USART,
0 = zablokowanie przerwania od odbiornika USART,
bit 4
TXIE:
zezwolenie na przerwanie od nadajnika USART:
1 = odblokowanie przerwania od nadajnika USART,
0 = zablokowanie przerwania od nadajnika USART,
bit 3
SSPIE:
zezwolenie na przerwanie od układu
SSP (Synchronous Serial Port):
1 = odblokowanie przerwania od układu SSP,
0 = zablokowanie przerwania od układu SSP,
bit 2
CCP1IE:
zezwolenie na przerwanie od układu CCP1:
1 = odblokowanie przerwania od układu CCP1,
0 = zablokowanie przerwania od układu CCP1,
bit 1
TMR2IE:
zezwolenie na przerwanie od przepełnienia licznika 2 (TMR2):
1 = odblokowanie przerwania od przepełnienia licznika 2 (TMR2),
0 = zablokowanie przerwania od przepełnienia licznika 2 (TMR2),
bit 0
TMR1IE:
zezwolenie na przerwanie od przepełnienia licznika 1 (TMR1):
1 = odblokowanie przerwania od przepełnienia licznika 1 (TMR1),
0 = zablokowanie przerwania od przepełnienia licznika 1 (TMR1),
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
28
Rejestr PIE2
PERIPHERAL INTERRUPT ENABLE REGISTER 2
U-0
U-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
-
-
-
EEIE
BCLIE
LVDIE
TMR3IE CCP2IE
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7-5
bity niezaimplementowane,
bit 4
EEIE:
zezwolenie na przerwanie od zakończenia zapisu do pamięci
EEPROM/FLASH:
1 = odblokowanie,
0 = zablokowanie,
bit 3
BCLIE:
zezwolenie na przerwanie przy wystąpieniu kolizji na liniach
magistrali:
1 = odblokowanie,
0 = zablokowanie,
bit 2
LVDIE:
zezwolenie na przerwanie przy wykryciu spadku napięcia
zasilania:
1 = odblokowanie,
0 = zablokowanie,
bit 1
TMR3IE:
zezwolenie na przerwanie od przepełnienia licznika 3 (TMR3):
1 = odblokowanie przerwania od przepełnienia licznika 3 (TMR3),
0 = zablokowanie przerwania od przepełnienia licznika 3 (TMR3),
bit 0
CCP2IE:
zezwolenie na przerwanie od układu CCP2:
1 = odblokowanie przerwania od układu CCP2,
0 = zablokowanie przerwania od układu CCP2,
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
29
Rejestr IPR1
PERIPHERAL INTERRUPT PRIORITY REGISTER 1
( Rejestry IPR1, IPR2 zawierają typ priorytetu przerwania urządzeń peryferyjnych. Obsługa
poziomów priorytetów wymaga ustawienia bitu IPEN rejestru RCON ).
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP TMR2IP TMR1IP
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
PSPIP:
priorytet przerwania zapisu/odczytu portu równoległego
(zarezerwowany dla układów rodziny PIC18F2x2):
1 = wysoki priorytet,
0 = niski priorytet,
bit 6
ADIP:
priorytet przerwania od przetwornika A/C:
1 = wysoki priorytet,
0 = niski priorytet,
bit 5
RCIP:
priorytet przerwania od odbiornika USART:
1 = wysoki priorytet,
0 = niski priorytet,
bit 4
TXIP:
priorytet przerwania od nadajnika USART:
1 = wysoki priorytet,
0 = niski priorytet,
bit 3
SSPIP:
priorytet przerwania od układu
SSP (Synchronous Serial Port):
1 = wysoki priorytet,
0 = niski priorytet,
bit 2
CCP1IP:
priorytet przerwania od układu CCP1:
1 = wysoki priorytet,
0 = niski priorytet,
bit 1
TMR2IP:
priorytet przerwania od przepełnienia licznika 2 (TMR2):
1 = wysoki priorytet,
0 = niski priorytet,
bit 0
TMR1IP:
priorytet przerwania od przepełnienia licznika 1 (TMR1):
1 = wysoki priorytet,
0 = niski priorytet,
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
Rejestr IPR2
PERIPHERAL INTERRUPT PRIORITY REGISTER 2
30
U-0
U-0
U-0
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
-
-
-
EEIP
BCLIP
LVDIP
TMR3IP CCP2IP
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7-5
bity niezaimplementowane,
bit 4
EEIP:
priorytet przerwania od zakończenia zapisu do pamięci
EEPROM/FLASH:
1 = wysoki priorytet,
0 = niski priorytet,
bit 3
BCLIP:
priorytet przerwania od wystąpienia kolizji na liniach
magistrali:
1 = wysoki priorytet,
0 = niski priorytet,
bit 2
LVDIP:
priorytet przerwania od wykrycia spadku napięcia
zasilania:
1 = wysoki priorytet,
0 = niski priorytet,
bit 1
TMR3IP:
priorytet przerwania od przepełnienia licznika 3 (TMR3):
1 = wysoki priorytet,
0 = niski priorytet,
bit 0
CCP2IP:
priorytet przerwania od układu CCP2:
1 = wysoki priorytet,
0 = niski priorytet,
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
31
Przerwanie zewnętrzne
Zależnie od ustawienia bitów INTEDGx rejestru INTCON2 przerwania zewnętrzne
RB0/INT0, RB1/INT1, RB2/INT2 wyzwalane są zboczem narastającym, lub opadającym.
Pojawiające się ważne zbocze na którymkolwiek z wejść powoduje ustawienie odpowiedniej
flagi INTxIF w rejestrze INTCON. Flaga ta musi być zerowana programowo w procedurze
obsługi przerwania. Przerwanie może być zablokowane bitem INTxIE rejestru INTCON.
Wszystkie przerwania zewnętrzne (INT0, INT1, INT2) mogą ”obudzić” procesor ze stanu
uśpienia (SLEEP). Jeżeli bit GIE rejestru INTCON jest ustawiony, po wyjściu ze stanu
uśpienia procesor przechodzi do obsługi przerwania.
Bity INT1IP I INT2IP rejestru INTCON3 określają priorytet przerwania. Przerwanie
INT0 nie ma przypisanego priorytetu, zawsze traktowane jest jako przerwanie o wysokim
priorytecie.
Przerwanie od zmiany stanu PORTB
Zmiana stanu na liniach RB4:RB7 ustawia flagę RBIR rejestru INTCON. Przerwanie
może być zablokowane/odblokowane bitem RBIE rejestru INTCON. Priorytet przerwania
wybierany jest bitem RBIP rejestru INTCON2.
Zachowywanie kontekstu podczas obsługi przerwania
Przy obsłudze przerwania licznik rozkazów PC jest umieszczany na stosie.
Dodatkowo rejestry WREG, STATUS i BSR są umieszczane na stosie „szybkiego powrotu”
(fast return stack). Jeżeli nie jest używany mechanizm (fast return stack), istnieje potrzeba
programowego zachowywania zawartości rejestrów WRET, STATUS i BSR. Poniższy
przykład obrazuje sposób zapisywania i odtwarzania rejestrów.
MOVWF W_TEMP ; zachowanie WREG w rejestrze
; tymczasowym W_TEMP
MOVFF STATUS, STATUS_TEMP ; STATUS w rejestrze STATUS_TEMP
MOVFF BSR, BSR_TEMP ; RSR w rejestrze BSR_TEMP
.
. ; obsługa przerwania
.
MOVFF BSR_TEMP, BSR ; odtworzenie BSR
MOVF W_TEMP, W ; odtworzenie WREG
MOVFF STATUS_TEMP, STATUS ; odtworzenie STATUS
Listing D5.1. Zachowanie kontekstu podczas obsługi przerwania
32
7 Porty wejścia/wyjścia
PORTA
PortA jest 7-bitowym dwukierunkowym portem we/wy. Zmiana w rejestrze kierunku
TRISA dowolnego bitu na ‘1’ powoduje ustawienie linii jako wejście, natomiast zmiana bitu
na ‘0’ ustawia linię jako wyjście.
Odczytując rejestr PORTA, odczytuje się stan linii portu, informacja zapisywana do
portu umieszczana jest w rejestrach zatrzaskowych portu.
Nazwa
Bit
Bufor
Funkcja
RA0/AN0
bit0
TTL
wej
ś
cie/wyj
ś
cie lub wej
ś
cie analogowe,
RA1/AN1
bit1
TTL
wej
ś
cie/wyj
ś
cie lub wej
ś
cie analogowe,
RA2/AN2/V
REF-
bit2
TTL
wej
ś
cie/wyj
ś
cie lub wej
ś
cie analogowe lub V
REF-
RA3/AN3/V
REF+
bit3
TTL
wej
ś
cie/wyj
ś
cie lub wej
ś
cie analogowe lub V
REF+
RA4/T0CKI
bit4
ST
wej
ś
cie/wyj
ś
cie lub wej
ś
cie zewn
ę
trznego zegara dla
Timer0, wyj
ś
cie jest typu otwarty dren
RA5/~SS/AN4/LVDIN
bit5
TTL
wej
ś
cie/wyj
ś
cie lub wybór trybu slave dla SSP lub
wej
ś
cie analogowe lub wej
ś
cie detekcji niskiego
napi
ę
cia,
OSC2/CLKO/RA6
bit6
OSC2 lub wyj
ś
cie zegarowe lub linia we/wy,
Legenda: TTL = wejście typu TTL, ST = wejście z przerzutnikiem Schmitta
Tabela D6.1. Funkcje linii PORTA
Pin RA4 jest multipleksowany z wejściem licznika Timer0 i nazywany jest
RA4/T0CKI. Wejście tego pinu zawiera przerzutnik Schmitta, wyjście natomiast jest typu
otwarty dren. Poziomy napięć wejściowych wszystkich pinów portu PORTA zawierają się w
standardzie TTL, natomiast porty wyjściowe są typu CMOS.
Inne piny portu PORTA są multipleksowane z analogowymi wejściami, jak i
analogowymi wejściami napięcia referencyjnego V
REF+
i V
REF-
Funkcja każdego z pinów jest
ustalana przez zerowanie/ustawianie bitów kontrolnych w rejestrze ADCON1 (rejestr
kontrolny przetwornika A/D).
Nazwa
Bit 7
Bit 6
Bit 5 Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostałych
RESET-ach
PORTA
-
RA6
RA5
RA4
RA3
RA2
RA1
RA0
-x0x 0000
-u0u 0000
LATA
-
Rejestr danych
-xxx xxxx
-uuu uuuu
TRISA
-
Rejestr kierunku portu A
-111 1111
-111 1111
ADCON1
ADFM
ADCS2
-
-
PCFG3 PCFG2
PCFG1
PCFG0
00-- 0000
00-- 0000
Tabela D6.2. Rejestry związane z PORTA
Po resecie piny RA5 i RA3:RA0 są skonfigurowane jako wejścia analogowe i
odczytywalne jako ‘0’. Piny RA6 i RA4 skonfigurowane są jako wejścia cyfrowe.
33
PORTB
Każdy pin portu PORTB ma wewnętrzny rezystor podciągający (weak internal pull–
up). Pojedynczym bitem można włączyć rezystory podciągające wszystkich pinów. Jest to
wykonywane przez zerowanie bitu ~RBPU (INTCON2<7>). Rezystory podciągające są
automatycznie odłączane, gdy dany pin jest skonfigurowany jako wyjście. Po stanie Power-on
Reset wewnętrzna polaryzacja jest wyłączona.
Po Power-on-Reset linie PORTB skonfigurowane są jako wejścia cyfrowe.
Cztery piny portu PORTB, RB7:RB4, posiadają możliwość generacji przerwania, gdy
nastąpi zmiana poziomu na tych pinach. Jedynie te piny, które są skonfigurowane jako
wejścia mogą spowodować wygenerowanie przerwania (gdy któryś z pinów RB7:RB4 jest
skonfigurowany jako wyjście, nie ma możliwości wygenerowania przerwania). Wejścia tych
pinów (RB7:RB4) są porównywane ze starymi wartościami, zatrzaśniętymi w ostatnim
odczycie portu PORTB. „Błąd” pochodzący z pinów RB7:RB4 jest sumowany (funkcja OR)
po to, aby wygenerować przerwanie za pomocą flagi RBIF (INTCON<0>) mówiące o
zmianie stanu na jednym z tych pinów. Przerwanie to może obudzić układ ze stanu SLEEP.
Programista w procedurze obsługi przerwania może wyzerować to przerwanie w
następujący sposób:
wykonać dowolny odczyt lub zapis do portu PORTB (oprócz instrukcji
MOVFF
),
zakończy to warunek wystąpienia błędu,
wyczyścić flagę przerwania RBIF w rejestrze INTCON,
Błąd będzie powodował ciągłe ustawianie flagi RBIF. Odczytanie portu PORTB
zakończy warunek wystąpienia błędu, co spowoduje, że flaga RBIF będzie mogła zostać
wyzerowana.
Przerwanie na zmianę poziomu jest zalecaną metodą do budzenia układu przez
wciśnięcie klawisza i sytuacji, w której port PORTB jest użyty jedynie na potrzeby
przerwania. Podczas używania portu PORTB jako źródła przerwania, nie jest zalecane jego
przeglądanie.
Pin RB3 może być skonfigurowany poprzez bit CCP2MX=0 rejestru CONFIG3H<0>
jako linia modułu peryferyjnego CCP2.
1. W trybie Low Voltage ICSP pin RB5 nie jest używany jak uniwersalna linia we/wy,
w czasie normalnej pracy powinna być utrzymywana w stanie niskim, zapobiega to
przypadkowemu przejściu w tryb ISCP.
2. Stosując programowanie Low Voltage ICSP (LVP) rezystory podciągające linii
RB5 stają się nieaktywne. Jeżeli bit TRISB<5>=’0’ pin RB5 ustawiony jest jako
wyjście, bit LATB<5> musi być również wyzerowany.
34
Nazwa
Bit
Bufor
Funkcja
RB0/INT0
bit0
TTL/ST
(1)
wej
ś
cie/wyj
ś
cie lub wej
ś
cie zewn
ę
trznego przerwania 0,
mo
ż
liwo
ść
podł
ą
czenia rezystora podci
ą
gaj
ą
cego.
RB1/INT1
bit1
TTL/ST
(1)
wej
ś
cie/wyj
ś
cie lub wej
ś
cie zewn
ę
trznego przerwania 1,
mo
ż
liwo
ść
podł
ą
czenia rezystora podci
ą
gaj
ą
cego.
RB2/INT2
bit2
TTL/ST
(1)
wej
ś
cie/wyj
ś
cie lub wej
ś
cie zewn
ę
trznego przerwania 2,
mo
ż
liwo
ść
podł
ą
czenia rezystora podci
ą
gaj
ą
cego.
RB3/CCP2
(3)
bit3
TTL/ST
(4)
Wej
ś
cie/wyj
ś
cie gdy bit CCP2MX=’1’ rejestru CONFIG3H to
wej
ś
cie Compare2/wyj
ś
cie Compare2/ wyj
ś
cie PWM,
mo
ż
liwo
ść
podł
ą
czenia rezystora podci
ą
gaj
ą
cego.
RB4
bit4
TTL
wej
ś
cie/wyj
ś
cie (przerwanie na zmian
ę
poziomu),
mo
ż
liwo
ść
podł
ą
czenia rezystora podci
ą
gaj
ą
cego.
RB5/ PGM
(5)
bit5
TTL/ST
(2)
wej
ś
cie/wyj
ś
cie (przerwanie na zmian
ę
poziomu),
mo
ż
liwo
ść
podł
ą
czenia rezystora podci
ą
gaj
ą
cego,
pin programuj
ą
cy w trybie LVP.
RB6/PGC
bit6
TTL/ST
(2)
wej
ś
cie/wyj
ś
cie (przerwanie na zmian
ę
poziomu),
mo
ż
liwo
ść
podł
ą
czenia rezystora podci
ą
gaj
ą
cego,
zegar dla programowania szeregowego.
RB7/PGD
bit7
TTL/ST
(2)
wej
ś
cie/wyj
ś
cie (przerwanie na zmian
ę
poziomu),
mo
ż
liwo
ść
podł
ą
czenia rezystora podci
ą
gaj
ą
cego,
dane dla programowania szeregowego.
Legenda: TTL = wejście typu TTL, ST = wejście z przerzutnikiem Schmitta
Tabela D6.3. Funkcje linii PORTB
1: Ten bufor jest przerzutnikiem Schmitta, kiedy jest skonfigurowany jako zewnętrzne
przerwanie.
2: Ten bufor jest przerzutnikiem Schmitta, kiedy jest używany podczas trybu programowania
szeregowego.
3: Bitem konfiguracyjnym CCP2MX=’1’ wybiera się pomiędzy we/wy lub trybem CCP2.
4: Bufor ten jest wejściem przerzutnikiem Schmitta, kiedy jest skonfiguraowany jako wejście
CCP2.
5: Low Voltage Programming (LVP) standardowo jest aktywne, co powoduje zablokowanie
funkcji RB5. LVP musi być wyłączone, aby uaktywnić RB5 jako pin wejściowy lub
wyjściowy i pozwolić na maksymalną kompatybilność dla pozostałych pinów kontrolera.
PORTC
PORTC oprócz podstawowych funkcji we/wy daje możliwość korzystania z
interfejsów komunikacyjnych SPI, I
2
C oraz USART. Przy konfiguracji interfejsu
komunikacyjnego należy pamiętać o odpowiednim zdefiniowaniu bitów kierunku rejestru
TRISC. Niektóre urządzenia wymagają, aby dany pin był skonfigurowany jako wejście,
podczas, gdy inne wymagają ustalenia danego pinu jako wyjście. Ponadto PORTC daje
możliwość podłączenia zewnętrznego oscylatora dla modułu TIMER1, może również pełnić
rolę wejść dla modułu Compare1.
Linia RC1 konfigurowalna jest bitem CCP2MX jako urządzenie peryferyjne układu
CCP2.
Po Power-on-Reset linie PORTC skonfigurowane są jako wejścia cyfrowe.
Nazwa
Bit
Bufor
Funkcja
35
RC0/T1OSO/
T1CKI
bit0
ST
wej
ś
cie/wyj
ś
cie,
wyj
ś
cie oscylatora modułu Timer1/wej
ś
cie zegara modułu
Timer1.
RC1/T1OSI/
CCP2
bit1
ST
wej
ś
cie/wyj
ś
cie,
wej
ś
cie oscylatora modułu Timer1 lub wej
ś
cie modułu
Capture2/wyj
ś
cie modułuCompare2/wyj
ś
cie modułu PWM2.
RC2/CCP1
bit2
ST
wej
ś
cie/wyj
ś
cie,
wej
ś
cie modułu Capture1/wyj
ś
cie modułu Compare1/
wyj
ś
cie modułu PWM1.
RC3/SCK/SCL
bit3
ST
RC3 mo
ż
e tak
ż
e by
ć
zegarem dla modułów SPI i I
2
C.
RC4/SDI/SDA
bit4
ST
RC4 mo
ż
e tak
ż
e by
ć
pinem danych wej
ś
ciowych modułu
SPI (tryb SPI) lub danych wej
ś
ciowych /wyj
ś
ciowych
modułu I
2
C (tryb I
2
C).
RC5/SDO
bit5
ST
wej
ś
cie/wyj
ś
cie,
wyj
ś
cie danych modułu SSP (Synchronus Serial Port).
RC6/TX/CK
bit6
ST
wej
ś
cie/wyj
ś
cie,
zegar synchroniczny/ asynchroniczna transmisja modułu
USART.
RC7/RX/DT
bit7
ST
wej
ś
cie/wyj
ś
cie,
asynchroniczny odbiór lub Synchroniczne dane modułu
USART.
Legenda: ST = wejście z przerzutnikiem Schmitta
Tabela D6.4. Funkcje linii PORTC
Nazwa
Bit 7
Bit 6
Bit 5 Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostałych
RESET-ach
PORTC
RC7
RC6
RC5
RC4
RC3
RC2
RC1
RC0
xxxx xxxx
uuuu uuuu
LATC
Rejestr danych wyj
ś
ciowych
xxxx xxxx
uuuu uuuu
TRISC
Rejestr kierunku portu C
1111 1111
1111 1111
Tabela D6.5. Rejestry związane z PORTC
PORTD
Zależnie od ustawienia bitu PSPMODE rejestru TRISE<4> PORTD pracuje jako
8-bitowy port równoległy (Parallel Slave Port), lub jego linie pełnią funkcje uniwersalnych
linii we/wy. Jest on asynchronicznie odczytywalny i zapisywalny poprzez linie sterujące
PORTE (RE0/~RD, RE1/~WR).
Moduł PSP może być bezpośrednio podłączony do 8-bitowej magistrali
komputerowej. Zewnętrzny mikroprocesor może czytać i zapisywać do portu PORTD jak do
8-bitowego zatrzasku. Ustawiając bit PSPMODE=’1’ linie PORTE stają się odpowiednio
RE0/~RD – wejściem zapisu, RE1/~WR – wejściem odczytu, RE2/~CS – wejściem wyboru
układu. Wejścia te pełnią rolę funkcji sterujących pracą portu równoległego. Dodatkowo bity
w rejestrze kierunku TRISE oraz bity PCFG2:PCFG0 rejestru ACCON1 muszą być
skonfigurowane jako wejścia cyfrowe.
Zapis do modułu PSP następuje, gdy na liniach ~CS i ~WR wystąpi stan niski. Odczyt
natomiast wystąpi, gdy na liniach ~CS i ~RD pojawi się również stan niski.
36
PORTE staje się portem uniwersalnych linii we/wy, gdy bit PSPMODE=’0’ rejestru
TRISE, oraz bity kierunku TRISE2:TRISE0 ustawione są jako wejścia, rejestr ADCON1
musi być również skonfigurowany do obsługi cyfrowych linii wejściowych.
Rys. 6.1. Przebiegi zapisu do PSP
Zapis danych do portu równoległego, Rys. 6.1. następuje w momencie, gdy obie linie
~CS i ~WR znajdą się w stanie niskim. Kiedy którakolwiek z linii ~CS lub ~WR znajdzie się
w stanie wysokim, ustawiona zostanie flaga odebrania bajtu danych - IBF (TRISE<7>) oraz
flaga przerwania PSPIF (PIR1<7>). Proces zapisu do portu równoległego trwa dwa cykle
maszynowe. Flaga IBF może zostać wyczyszczona jedynie poprzez odczyt PORTD. W
momencie gdy dana z buforu wejściowego nie zostanie odczytana, a nastąpi kolejna próba
zapisu danej z portu, ustawiona zostanie flaga przepełnienia bufora wejściowego – IBOV
(TRISE<5>).
Rys. 6.2. Przebiegi odczytu z PSP
Odczyt danych z portu równoległego, Rys. 6.2 następuje w momencie, gdy obie linie
~CS i ~RD znajdą się w stanie niskim. Flaga odczytu bufora wyjściowego - OBF
(TRISE<6>) zostaje od razu wyczyszczona sygnalizując gotowość do odczytu danych z
zatrzasków portu PORTD przez zewnętrzną szynę.
37
Kiedy którakolwiek z linii ~CS lub ~RD znajdzie się w stanie wysokim, ustawiona
zostanie flaga przerwania PSPIF (PIR1<7>), oznaczając tym samym koniec operacji odczytu.
Flaga OBF pozostanie w stanie niskim, aż do momentu pojawienia się nowej danej do
odczytania.
W momencie, gdy moduł PSP nie jest aktywny bity IBF oraz OBF są wyzerowane.
Bit IBOV musi zostać wyzerowany programowo, jeżeli poprzednio został ustawiony.
Przerwanie jest generowane i prezentowane poprzez flagę PSPIF po zakończeniu
każdej operacji zapisu bądź odczytu. Flaga ta, musi zostać wyzerowana programowo.
Przerwanie od modułu PSP może zostać zablokowane poprzez wyzerowanie bitu zezwolenia
PSPIE (PIE1<7>).
Nazwa
Bit
Bufor
Funkcja
RD0/PSP0
bit0
ST/TTL
(1)
wej
ś
cie/wyj
ś
cie lub pin portu równoległego bit0,
RD1/PSP1
bit1
ST/TTL
(1)
wej
ś
cie/wyj
ś
cie lub pin portu równoległego bit1,
RD2/PSP2
bit2
ST/TTL
(1)
wej
ś
cie/wyj
ś
cie lub pin portu równoległego bit2,
RD3/PSP3
bit3
ST/TTL
(1)
wej
ś
cie/wyj
ś
cie lub pin portu równoległego bit3,
RD4/PSP4
bit4
ST/TTL
(1)
wej
ś
cie/wyj
ś
cie lub pin portu równoległego bit4,
RD5/PSP5
bit5
ST/TTL
(1)
wej
ś
cie/wyj
ś
cie lub pin portu równoległego bit5,
RD6/PSP6
bit6
ST/TTL
(1)
wej
ś
cie/wyj
ś
cie lub pin portu równoległego bit6,
RD7/PSP7
bit7
ST/TTL
(1)
wej
ś
cie/wyj
ś
cie lub pin portu równoległego bit7,
1: Bufor wejściowy jest przerzutnikiem Schmitta, kiedy skonfigurowany jest jako uniwersalne
linie we/wy, lub TTL w trybie portu równoległego.
Tabela D6.6. Funkcje linii PORTD
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostałych
RESET-ach
PORTD
RD7
RAD6
RD5
RD4
RD3
RD2
RD1
RD0
xxxx xxxx
uuuu uuuu
LATD
Rejestr danych wyj
ś
ciowych
xxxx xxxx
uuuu uuuu
TRISD
Rejestr kierunku portu D
1111 1111
1111 1111
TRISE
IBF
OBF
IBOV
PSPMODE
-
Rejestr kierunku PORTE
0000 -111
0000 -111
Tabela D6.7. Rejestry związane z PORTD
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
PORTD
Zatrzask danych portu przy zapisie, stan linii portu przy odczycie
xxxx xxxx
uuuu uuuu
LATD
Dane wyj
ś
ciowe (stan zatrzasków wyj
ś
ciowych)
xxxx xxxx
uuuu uuuu
TRISD
Rejestr kierunku portu D
1111 1111
1111 1111
PORTE
-
-
-
-
-
RE2
RE1
RE0
---- -000
---- -000
LATE
-
-
-
-
-
Rejestr danych wyj
ś
ciowych
---- -xxx
---- -uuu
TRISE
IBF
OBF
IBOV
PSP
MODE
-
Rejestr kierunku portu E
0000 -111
0000 –111
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
ADCON1
ADFM
ADCS2
-
-
PCFG3 PCFG2 PCFG1
PCFG0
00-- 0000
00-- 0000
Tabela D6.8. Rejestry związane z portem równoległym
38
PORTE
Rejestr TRISE określa kierunek pinów, nawet kiedy są one używane jako analogowe
wejścia. Programista musi zapewnić, by bity w rejestrze TRISE były ustawione (=1), kiedy
piny zostaną użyte jako wejścia analogowe.
PORTE składa się z trzech linii (RE0/~RD/AN5, RE1/~WR/AN6, RE2/~CS/AN7)
posiadających na wejściu przerzutniki Schmitta. Piny portu PORTE są multipleksowane z
analogowymi wejściami, oraz pełnią rolę linii sterujących dla modułu PSP.
Po Power-on-Reset linie PORTE skonfigurowane są jako wejścia analogowe.
Nazwa
Bit
Bufor
Funkcja
RE0/~RD/AN5 bit0
ST/TTL
wej
ś
cie/wyj
ś
cie, linia kontrolna odczytu modułu PSP lub
wej
ś
cie analogowe:
~RD
1 = operacja nie czytaj,
0 = operacja czytaj, czytaj rejestry PORTD (je
ż
eli układ jest
wybrany),
RE1/~WR/AN6
bit1
ST/TTL
wej
ś
cie/wyj
ś
cie, linia kontrolna zapisu modułu PSP lub
wej
ś
cie analogowe:
~WR
1 = operacja nie zapisuj,
0 = operacja zapisz, zapisz do rejestrów PORTD (je
ż
eli
układ jest wybrany),
RE2/~CS/AN7
bit2
ST/TTL
wej
ś
cie/wyj
ś
cie, linia kontrolna wyboru układu modułu PSP
lub wej
ś
cie analogowe:
~CS
1 = układ nie jest wybrany,
0 = układ jest wybrany,
Tabela D6.9. Funkcje linii PORTE
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostałyc
h
RESET-ach
PORTE
-
-
-
-
-
RE2
RE1
RE0
---- -000
---- -000
LATE
-
-
-
-
-
Rejestr danych wyj
ś
ciowych
---- -xxx
---- -uuu
TRISE
IBF
OBF
IBOV
PSP
MODE
-
Rejestr kierunku portu E
0000 -111
0000 –111
ADCON1
ADFM
ADCS2
-
-
PCFG3 PCFG2
PCFG1
PCFG0
00-- 0000
00—0000
Tabela D6.10. Rejestry związane z PORTE
39
Rejestr TRISE
R-0
R-0
R/W-0
R/W-0
U-0
R/W-1
R/W-1
R/W-1
IBF
OBF
IBOV
PSPMODE
-
TRISE2
TRISE1 TRISE0
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
IBF:
bit statusu bufora wejściowego:
1 = bajt został odebrany i oczekuje na odczyt przez CPU,
0 = nie odebrano bajtu,
bit 6
OBF:
bit statusu bufora wyjściowego:
1 = bufor wyjściowy zawiera poprzednio zapisane bajt,
0 = bufor wyjściowy został odczytany,
bit 5
IBOV:
bit przepełnienie bufora wejściowego:
1 = zapis nastąpił gdy poprzednie słowo nie zostało odczytane
(musi być zeroweny programowo),
0 = nie nastąpiło przepelnienie,
bit 4
PSPMODE:
tryb portu równoległego:
1 = tryb portu równoległego,
0 = linie pracują jako uniwersalne we/wy,
bit 3
bit niezaimplementowany
bit 2
TRISE2:
bit kierunku PORTE:
1 = wejście,
0 = wyjście,
bit 1
TRISE1:
bit kierunku PORTE:
1 = wejście,
0 = wyjście,
bit 0
TRISE0:
bit kierunku PORTE:
1 = wejście,
0 = wyjście,
Legenda:
R
– bit odczytywalny,
W
– bit zapisywalny,
U
– bit niezaimplementowany,
0
,
1
– stan po włączeniu zasilania (
x
- stan nieokreślony),
40
8 Moduły liczników
Jednym z podstawowych rodzajów urządzeń peryferyjnych umieszczanych wewnątrz
struktury mikrokontrolerów są układy licznikowe. W przypadku mikrokontrolera PIC18F452
wyróżnia się cztery układy liczników TIMER0, TIMER1, TIMER2, TIMER3. Wszystkie
moduły liczników oprócz licznika TIMER2 dają możliwość wyboru sygnały zegarowego
pomiędzy sygnałem pochodzącym od zegara wewnętrznego, a sygnałem zewnętrznym.
TIMER0
Główne cechy licznika TIMER0
programowo dokonywany wybór między 8 lub 16 bitowym licznikiem/zegarem,
8-bitowy dedykowany prescaler,
wybór zewnętrznego lub wewnętrznego zegara,
przerwanie przy przepełnieniu z FFh na 00h w trybie 8-bitowym i z FFFFh na 0000h
w trybie 16-bitowym,
wybór zbocza zewnętrznego zegara,
Rys. 7.1. Schemat blokowy licznika TIMER0 w trybie 8-bitowym
Rys D7.1. Schemat blokowy licznika TIMER0 w trybie 16-bitowym
41
Działanie licznika TIMER0
Tryb pracy licznika wybierany jest bitem T0CS. Wyzerowanie tego bitu powoduje
przejście w tryb Timer (zliczanie impulsów wewnętrznych), rejestr licznika zostaje
zwiększany w każdym cyklu instrukcji (bez preskalera). Jeżeli nastąpi zapis do rejestru
TMR0L zliczanie jest wstrzymane na następne dwa cykle. Użytkownik może to obejść
wpisując do TMR0L wartość zmodyfikowaną uwzględniającą zgubione cykle.
Ustawiając bit T0CS=’1’ TIMER0 przechodzi w tryb licznika. W trybie tym, zależnie
od ustawienia bitu T0SE, rejestr TMR0L zwiększa się na każde narastające bądź opadające
zbocze sygnału podanego na pin RA4/T0CKI.
Preskaler
Bity PSA i P0PS2:P0PS0 rejestru T0CON wyznaczają przydzielenie preskalera i jego
współczynnik podziału. Wyzerowanie bitu PSA spowoduje przypisanie preskalera do modułu
TIMER0, umożliwiając wybór współczynnika podziału. Przydzielenie preskalera do TIMER0
powoduje, że wszystkie instrukcje zapisu do TMR0L (
CLRF TMR0
,
MOVWF TMR0
,
BSF
TMR0
...) powodują wyczyszczenie preskalera.
Zapisywanie do TMR0L, kiedy prescaler jest przypisany do Timer0, wyczyści
współczynnik prescalera ale nie zmieni jego przypisania.
Przypisywanie preskalera jest kontrolowane programowo i może być zmieniane
podczas normalnej pracy programu.
Przerwanie od TIMER0
Przerwanie od licznika Timer0 jest generowane, kiedy rejestr TMR0 przepełni się z
FFh na 00h w trybie 8-bitowym lub z FFFFh na 0000h. Wystąpienie przepełnienia powoduje
ustawienie flagi TMR0IF w rejestrze INTCON. Przerwanie może być zamaskowane przez
wyzerowanie bitu TMR0IE w rejestrze INTCON. Bit TMR0IF musi być wyzerowany
programowo przez procedurę obsługi przerwania przed ponownym zgłoszeniem przerwania.
Przerwanie TMR0 nie może obudzić procesora z trybu SLEEP, ponieważ w tym trybie licznik
jest wyłączony.
Tryb 16-bitowy, zapis i odczyt
Rejestr TMR0H nie jest starszym bajtem zegara/licznika w trybie 16-bitowym, ale
buforem starszego bajtu modułu TIMER0. Starszy bajt nie ma możliwości bezpośredniego
zapisu/odczytu. Rejestr TMR0H jest uaktualniany wartością starszego bajtu przy operacji
czytania rejestru TMR0L. Daje to możliwość odczytu 16-bitów modułu TIMER0 w jednym
cyklu rozkazowym.
Zapis starszego bajtu do modułu TIMER0 odbywa się również za pośrednictwem
rejestru TMR0H. Starszy bajt jest uaktualniany zawartością rejestru TMR0H przy operacji
zapisu do TMR0L. Daje to możliwość jednoczesnego uaktualnienia 16-bitów modułu
TIMER0.
42
Rejestr T0CON
(Stosowany jest do kontroli pracy licznika TIMER0)
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
TMR0ON T08BIT
T0CS
T0SE
PSA
T0PS2
T0PS1
T0PS0
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
TMR0ON:
włącz/wyłącz TIMER0:
1 = odblokowanie TIMER0,
0 = zatrzymanie TIMER0,
bit 6
T08BIT:
tryb pracy licznika 8-bitowy/16-bitowy:
1 = licznik 8-bitowy,
0 = licznik 16-bitowy,
bit 5
T0CS:
wybór źródła zegarowego:
1 = zewnętrzne źródło sygnału na pinie T0CKI,
0 = wewnętrzne źródło sygnału (cykl rozkazowy),
bit 4
T0SE:
wybór zbocza sygnału:
1=zwiększenie licznika na zbocze opadające sygnału podanego na pin T0CKI,
0=zwiększenie licznika na zbocze narastające sygnału podanego na pin T0CKI,
bit 3
PSA:
przyłączenie preskalera do licznika TIMER0:
1 = preskaler nie jest podłączony do TIMER0, źródło sygnału zegarowego
omija preskaler,
0 = preskaler podłączony do TIMER0, źródło sygnału zegarowego podawane
jest na wejście preskalera,
bit 2-0
T0PS2: T0PS0
wybór wartości preskalera:
111 = 1:256
110 = 1:128
101 = 1:64
100 = 1:32
011 = 1:16
010 = 1:8
001 = 1:4
000 = 1:2
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostałyc
h
RESET-ach
TMR0L
Rejestr młodszego bajtu modułu TIMER0
xxxx xxxx
uuuu uuuu
TMR0H
Rejestr starszego bajtu modułu TIMER0
0000 0000
0000 0000
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
T0CON
TMR0ON
T08BIT
T0CS
T0SE
PSA
T0PS2
T0PS1
T0PS0 1111 1111
1111 1111
TRISA
-
Rejestr kierunku portu A
-111 1111
-111 1111
Tabela D7.1. Rejestry związane z TIMER0
43
TIMER1
Główne cechy licznika TIMER1:
16-bitowy licznik/zegar (dwa 8-bitowe rejestry TMR1H i TMR1L),
możliwość zapisu i odczytu obu rejestrów,
wybór zewnętrznego lub wewnętrznego zegara,
przerwanie przy przepełnieniu z FFFFh do 0000h,
RESET od modułu CCP (specjalny tryb wyzwalania),
Rys. 7.2. Schemat blokowy licznika TIMER1 w trybie 16-bitowego zapisu/odczytu
Działanie licznika TIMER1
Licznik TIMER1 może pracować w jednym z trzech trybów:
•
jako zegar,
•
jako licznik synchroniczny,
•
jako licznik asynchroniczny,
Tryb pracy licznika TIMER1 uzależniony jest od ustawionego bitu TMR1CS w
rejestrze TMR1CON. Gdy TMR1CS=’0’ licznik zwiększa się za każdym cyklem
zegarowym, gdy TMR1CS=’1’ licznik zwiększa się za każdym narastającym zboczem
zewnętrznego sygnału zegarowego.
Kiedy zewnętrzny oscylator podłączony jest do wejść licznika Timer1 (bit T1OSCEN
jest ustawiony), piny RC1/T1OSI/CCP2 oraz RC0/T1OSO/T1CKI stają się wejściami. To
znaczy wartość TRISC<1:0> jest ignorowana i piny te czytane są jako ‘0’.
Timer1 posiada także wewnętrzne wejście RESET. Sygnał RESET może być
wywołany przez jeden z dwóch modułów CCP.
Do modułu TIMER1 może zostać podłączony zewnętrzny oscylator. Przeznaczony
jest on głównie do aplikacji wymagających utrzymania czasu rzeczywistego. Powszechnie w
44
tego typu aplikacjach stosowany jest rezonator kwarcowy o częstotliwości 32.768kHz
zapewniający odpowiednią częstotliwość taktowania, oraz możliwie mały pobór mocy.
TIMER1 zapewnia działanie licznika w czasie trybu uśpienia mikrokontrolera (SLEEP), przez
co urządzenie może pracować przy obniżonym poborze mocy.
Resetowanie licznika TIMER1 poprzez moduł CCP
Jeżeli moduł CCP jest skonfigurowany w trybie Compare zdolnym wygenerować
zdarzenie specjalne (special event trigger), bity CCP1M3:CCP1M0=’1011’ rejestru
CCP1CON powodują zresetowanie układu TIMER1, jeżeli przetwornik A/C jest
odblokowany, rozpoczęcie konwersji A/C. Aby móc korzystać z możliwości resetowania
licznika TIMER1 zdarzeniem specjalnym od modułu CCP, TIMER1 musi być
skonfigurowany do pracy w trybie zegara, lub licznika synchronicznego. Jeżeli operacja
zapisu do rejestrów TIMER1 zbiega się z wystąpieniem (special event trigger) od modułu
CCP1, zapis zostanie wykonany jako pierwszy.
Wyzwolenie zdarzeniem specjalnym od modułu CCP1 nie ustawia bitu flagi przerwania
TMR1IF w rejestrze PIR1<0>
Przerwanie od TIMER1
Para rejestrów TMR1 (TMR1H:TMR1L) jest zwiększana od 0000h do FFFFh, po
przepełnieniu zawiera 0000h. Przerwanie od licznika TIMEMR1, jeśli jest włączone,
generowane jest podczas przepełnienia i sygnalizowane przez ustawienie flagi TMR1IF
rejestru
PIR1<0>.
To
przerwanie
może
być
włączane/wyłączane
przez
ustawienie/wyzerowanie bitu maski przerwania TMR1IE rejestru PIE1<0>.
TIMER1 - tryb 16-bitowy, zapis i odczyt
Jeżeli bit RD16 rejestru T1CON<7> jest ustawiony wówczas możliwy staje się
zapis/odczyt w trybie 16-bitowym. Starszy bajt mapowany jest przez rejestr TMR1H, który
pełni rolę bufora. Rejestr TMR1H jest uaktualniany wartością starszego bajtu przy operacji
czytania rejestru TMR1L. Daje to możliwość odczytu 16-bitów modułu TIMER1 w jednym
cyklu rozkazowym.
Zapis starszego bajtu do modułu TIMER1 odbywa się również za pośrednictwem
rejestru TMR1H. Starszy bajt jest uaktualniany zawartością rejestru TMR1H przy operacji
zapisu do TMR1L. Daje to możliwość jednoczesnego uaktualnienia 16-bitów modułu
TIMER1.
45
Rejestr T1CON
(Rejestr T1CON stosowany jest do kontroli pracy licznika TIMER1)
R/W-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
RD16
-
T1CKPS1
T1CKPS0
T1OSCEN
~T1SYNC
TMR1CS
TMR1ON
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
RD16:
odblokowanie 16-bitowego trybu zapisu/odczytu:
1=odblokowanie zapisu/odczytu rejestrów TIMER1 w jednej 16-bit operacji,
0=odblokowanie zapisu/odczytu rejestrów TIEMR1 w dwóch 8-bit operacjach,
bit 6
bit niezaimplementowany,
bit 5-4
T1CKPS1: T1CKPS0:
wybór wartości preskalera:
11 = 1:8
10 = 1:4
01 = 1:2
00 = 1:1
bit 3
T1OSCEN:
załączenie oscylatora dla TIMER1:
1 = oscylator włączony,
0 = oscylator wyłączony (inwerter oscylatora jest wyłączony, aby
wyeliminować pobór mocy).
bit 2
~T1SYNC:
bit synchronizacji Timer1 z zegarem zewnętrznym:
gdy TMR1CS=1:
1 = nie synchronizuje zewnętrznego wejścia zegarowego,
0 = synchronizuje zewnętrzne wejście zegarowe,
gdy TMR1CS=0:
Bit jest ignorowany. Timer1 używa zegara wewnętrznego, gdy TRM1CS=0.
bit 1
TMR1CS:
wybór zegara dla TIMER1:
1 = zewnętrzne źródło zegara z pinu RC0/T1OSO/T13CKI
(na zboczu narastającym),
0 = zegar wewnętrzny (Fosc/4),
bit 0
TMR1ON:
bit włączenia TIMER1:
1 = TIMER1 włączony,
0 = TIMER1 zatrzymany,
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
TMR1L
Rejestr młodszego bajtu modułu TIMER1
xxxx xxxx
uuuu uuuu
TMR1H
Rejestr starszego bajtu modułu TIMER1
xxxx xxxx
uuuu uuuu
T1CON
RD16
-
T1CKP
S1
T1CKP
S0
T1OSC
EN
~T1SY
NC
TMR1C
S
TMR1ON 0-00 0000
u-uu uuuu
Tabela D7.2. Rejestry związane z TIMER1
46
TIMER2
Główne cechy licznika TIMER2:
8-bitowy zegar, rejestr TMR2),
8-bitowy rejestr okresu, PR2,
możliwość zapisu/odczytu,
programowalny preskaler (1:1, 1:4, 1:16),
programowalny postskaler (od 1:1 do 1:16),
przerwanie generowane na skutek zrównania rejestrów TMR2 i PR2,
wykorzystanie wyjścia TMR2 w module SSP przy generacji przesunięcia sygnału
zegarowego,
Rys. 7.3. Schemat blokowy TIMER2
Działanie licznika TIMER2
TIMER2 może być używany przy generowaniu sygnału PWM. Rejestr TMR2 jest
odczytywalny/zapisywalny, oraz zerowany przy każdorazowym sygnale RESET urządzenia.
Wejściowy sygnał zegarowy (Fosc/4) jest dzielony w preskalerze przez współczynniki
podziału 1:1, 1:4, 1:16, które są ustawiane bitami T2CKPS1:T2CKPS0 rejestru
T2CON<1:0>. Sygnał z wyjścia TMR2 przechodzi przez 4-bitowy postskaler (współczynniki
podziału zawierają się od 1:1 do 1:16) i generuje przerwanie (zatrzaskiwane w fladze
TMR2IF (PIR1<1>)).
TIMER2 posiada 8-bitowy rejestry PR2, służący do wyznaczania okresu (period
register) przebiegu PWM. Licznik się zwiększa od 00h do momentu zrównania się z
wartością rejestru PR2, po czym następuje jego wyzerowanie. Rejestr PR2 ma możliwość
odczytu i zapisu. Po stanie RESET rejestr PR2 inicjalizowany jest wartością FFh.
Wyjście TMR2 (przed postskalerem) dołączone jest do SSP, który może służyć
opcjonalnie do generowania przesunięcia zegarowego. Rejestr
Zarówno preskaler, jak i postskaler, mogą być wyzerowane, gdy wystąpi:
•
zapis do rejestru TMR2,
•
zapis do rejestru T2CON,
•
sygnał RESET (Power-on Reset, ~MCLR Reset, Watchdog Timer Reset, Brown-out
Reset),
47
Rejestr T2CON
(Rejestr T2CON stosowany jest do kontroli pracy licznika TIMER2)
U-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
-
TOUTPS3
TOUTPS2
TOUTPS1
TOUTPS0
TMR2ON
T2CKPS1
T2CKPS0
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
bit niezaimplementowany,
bit 6-3
TOUTPS3:TOUTPS0:
wybór wartości postskalera:
0000 = 1:1
0001 = 1:2
.
.
.
1111 = 1:16
bit 2
TMR2ON:
włączenie TIMER2:
1 = TIMER2 włączony,
0 = TIMER2 wyłączony,
bit 1-0
T2CKPS1: T2CKPS0:
wybór wartości preskalera:
00 = 1:1
01 = 1:4
1x = 1:16
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
TMR2
Rejestr modułu TIMER2
0000 0000
0000 0000
T2CON
-
TOUT
PS3
TOUT
PS2
TOUT
PS1
TOUT
PS0
TMR2
ON
T2CK
PS1
T2CK
PS0
-000 0000
-000 0000
PR2
Rejestr okresu
1111 1111
1111 1111
Tabela D7.3. Rejestry związane z TIMER2
48
TIMER3
Główne cechy licznika TIMER3:
16-bitowy zegar/licznik (dwa rejestry 8-bitowe TMR3H:TMR3L),
możliwość czytania/zapisu obu rejestrów,
wybór zewnętrznego lub wewnętrznego źródła zegarowego,
przerwanie przy przepełnieniu licznika z FFFFh do 0000h,
RESET od układu CCP,
Rys. 7.4. Schemat blokowy TIMER3
Rys. 7.5. Schemat blokowy TIMER3 w konfiguracji 16-bitowej
49
Działanie licznika TIMER3
Licznik TIMER3 może pracować w jednym z trzech trybów:
•
jako zegar,
•
jako licznik synchroniczny,
•
jako licznik asynchroniczny,
Tryb pracy licznika TIMER3 uzależniony jest od ustawionego bitu TMR3CS w
rejestrze TMR3CON<1>. Gdy TMR3CS=’0’ licznik zwiększa się za każdym cyklem
zegarowym, gdy TMR3CS=’1’ licznik zwiększa się za każdym narastającym zboczem
sygnału zegarowego podłączonego do licznika TIMER1, lub wewnętrznego oscylatora, jeżeli
jest odblokowany.
Kiedy
oscylator
licznika
TIMER1
jest
aktywny
(T1OSCEN=’1’)
piny
RC1/T1OSI/CCP2 oraz RC0/T1OSO/T1CKI stają się wejściami. Powoduje to, że wartości
bitów TRISC<1:0> są ignorowane i piny te czytane są jako ‘0’.
Timer1 posiada także wewnętrzne wejście RESET. Sygnał RESET może być
wywołany przez jeden z dwóch modułów CCP.
Oscylator licznika TIMER3 może być używany jako źródło sygnału zegarowego dla
licznika TIMER3.
Para rejestrów TMR3H:TMR3L zwiększa się od 0000h do FFFFh. Przepełnienie
licznika jest sygnalizowane ustawieniem flagi TMR3IF w rejestrze PIR2<1>. Pojawienie się
przerwania może być zablokowane/odblokowane poprzez bit TMR3IE rejestru PIE2<1>
Jeżeli moduł CCP jest skonfigurowany w trybie Compare zdolnym wygenerować
zdarzenie specjalne (special event trigger), bity CCP1M3:CCP1M0=’1011’ rejestru
CCP1CON powodują zresetowanie układu TIMER3. Aby móc korzystać z możliwości
resetowania licznika TIMER3 zdarzeniem specjalnym od modułu CCP, TIMER3 musi być
skonfigurowany do pracy w trybie zegara, lub licznika synchronicznego. Jeżeli operacja
zapisu do rejestrów TIMER3 zbiega się z wystąpieniem (special event trigger) od modułu
CCP1, zapis zostanie wykonany jako pierwszy. W tym trybie pracy rejestry
CCPR1H:CCPR1L stają się rejestrami okresu dla licznika TIMER3.
Wyzwolenie zdarzeniem specjalnym od modułu CCP1 nie ustawia bitu flagi przerwania
TMR3IF w rejestrze PIR1<0>
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR2
-
-
-
EEIF
BCLIF
LVDIF
TMR3IF
CCP2IF
- - -0 0000
- - -0 0000
PIE2
-
-
-
EEIE
BCLIE
LVDIE
TMR3IE
CCP2IE
- - -0 0000
- - -0 0000
IPR2
-
-
-
EEIP
BCLIP
LVDIP
TMR3IP
CCP2IP
- - -1 1111
- - -1 1111
TMR3L
Rejestr młodszego bajtu liczina TIMER3
xxxx xxxx
uuuu uuuu
TMR3H
Rejestr starszego bajtu liczina TIMER3
xxxx xxxx
uuuu uuuu
T1CON
RD16
-
T1CKP
S1
T1CKP
S0
T1OSC
EN
~T1
SYNC
TMR1
CS
TMR1ON 0-00 0000
u-uu uuuu
T3CON
RD16
T3CCP2 T3CKP
S1
T3CKP
S0
T3CCP1
~T3
SYNC
TMR3
CS
TMR3ON
0000 0000
uuuu uuuu
Tabela D7.4. Rejestry związane z TIMER3
50
Rejestr T3CON
(Rejestr T3CON stosowany jest do kontroli pracy licznika TIMER3)
R/W-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
RD16
T3CCP2
T3CKPS1
T3CKPS0
T3CCP1
~T3SYNC
TMR3CS
TMR3ON
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
RD16:
odblokowanie 16-bitowego trybu zapisu/odczytu:
1=odblokowanie zapisu/odczytu rejestrów TIMER3 w jednej 16-bit operacji,
0=odblokowanie zapisu/odczytu rejestrów TIEMR3 w dwóch 8-bit operacjach,
bit 6
T3CCP2:
przyporządkowanie TIMER1 i TIMER3 do modułów CCPx,
1x = TIMER3 jest źródłem sygnału zegarowego dla compare/capture modułów
CCP,
01 = TIMER3 jest źródłem sygnału zegarowego dla compare/capture modułu
CCP2,
TIMER1 jest źródłem sygnału zegarowego dla compare/capture modułu
CCP1,
00 = TIMER1 jest źródłem sygnału zegarowego dla compare/capture modułów
CCP,
bit 5-4
T3CKPS1: T3CKPS0:
wybór wartości preskalera:
11 = 1:8
10 = 1:4
01 = 1:2
00 = 1:1
bit 3
T3CCP1:
załączenie oscylatora dla TIMER1:
1 = oscylator włączony,
0 = oscylator wyłączony (inwerter oscylatora jest wyłączony, aby
wyeliminować pobór mocy).
bit 2
~T3SYNC:
bit synchronizacji Timer3 z zegarem zewnętrznym:
(bit nie jest używany gdy sygnał zegarowy pochodzi od TIMER1/TIMER3)
gdy TMR3CS=1:
1 = nie synchronizuje zewnętrznego wejścia zegarowego,
0 = synchronizuje zewnętrzne wejście zegarowe,
gdy TMR3CS=0:
Bit jest ignorowany. Timer3 używa zegara wewnętrznego, gdy TRM3CS=0.
bit 1
TMR3CS:
wybór zegara dla TIMER3:
1 = zewnętrzne źródło zegara od TIMER1 lub T1CKI
(na zboczu narastającym zaraz po pierwszym zboczu opadającym),
0 = zegar wewnętrzny (Fosc/4),
bit 0
TMR3ON:
bit włączenia TIMER3:
1 = TIMER3 włączony,
0 = TIMER3 zatrzymany,
51
9 Moduły CAPTURE/COMPARE/PWM
Obydwa moduły CCP1 oraz CCP2 wykonują te same operacje, z wyjątkiem obsługi
zdarzenia związanego z układem wywołania specjalnego zdarzenia (special event trigger),
dlatego w dalszej części opisany będzie tylko moduł CCP1.
Rejestr CCPR1 Capture/Compare/PWM zawiera dwa 8 bitowe rejestry: CCPR1L
(młodszy bajt) i CCPR1H (starszy bajt). Bity związane z konfiguracją modułu CCP1
znajdują się w rejestrze CCP1CON.
Analogicznie dla modułu CCP2, rejestr CCPR2 Capture/Compare/PWM zawiera dwa
8 bitowe rejestry: CCPR2L (młodszy bajt) i CCPR2H (starszy bajt). Bity związane z
konfiguracją modułu CCP2 znajdują się w rejestrze CCP2CON
Tryb CCP
Źródło Timera
Capture
Compare
PWM
Timer1 lub Timer3
Timer1 lub Timer3
Timer2
Tabela D8.1. Źródła sygnałów doprowadzonych do modułu CCP
Tryb CCPx
Tryb CCPy
Oddziaływanie
Capture
Capture
TMR1 lub TMR3, podstawa czasu mo
ż
e by
ć
ró
ż
na dla ka
ż
dego z
modułów CCP,
Capture
Compare
Tryb porównania mo
ż
e by
ć
skonfigurowany dla wywołania
specjalnego zdarzenia, które wyzeruje TMR1 lub TMR3 zale
ż
nie od
tego, który licznik jest u
ż
ywany jako podstawa czasu.
Compare
Compare
Tryby porównania mog
ą
by
ć
skonfigurowane dla wywołania
specjalnego zdarzenia, które wyzeruje TMR1 lub TMR3 zale
ż
nie od
tego, który licznik jest u
ż
ywany jako podstawa czasu.
PWM
PWM
Moduły PWM b
ę
d
ą
miały taka sam
ą
cz
ę
stotliwo
ść
i warto
ść
(przerwanie TMR2)
PWM
Capture
Brak
PWM
Compare
Brak
Tabela D8.2. Zależności pomiędzy dwoma modułami CCP
52
Rejestry CCP1CON/CCP2CON
(Rejestry CCP1CON/CCP2CON stosowane są do kontroli pracy modułów CCP1 i CCP2)
U-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
-
-
DCxB1
DCxB0
CCPxM3
CCPxM2
CCPxM1
CCPxM0
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7-6
bity niezaimplementowane
bit 5-4
DCxB1: DCxB0:
współczynnik wypełnienia PWM bit1 i bit0:
tryb Compare:
nieużywany
tryb Capture:
nieużywany
tryb PWM:
bity te są dwoma najmniej znaczącymi bitami (bit1 i bit0) 10-bitowego
współczynnika wypełnienia PWM. Starsze 8-bitów (DCx9: DCx2)
współczynnika wypełnienia znajduje się w rejestrze CCPRxL.
bit 3-0
CCPxM3: CCPxM0:
wybór trybu pracy CCPx:
0000 = wyłączenie modułu CCP (RESET modułów CCPx),
0001 = zarezerwowany,
0010 = tryb Compare, przełączenie wyjścia do porównania (ustawiana flaga
CCPxIF),
0011 = zarezerwowany,
0100 = tryb Capture, wpis na zboczu opadającym,
0101 = tryb Capture, wpis na zboczu narastającym,
0110 = tryb Caputre , wpis na co 4 zbocze narastające,
0111 = tryb Capture, wpis na co 16 zbocze narastające,
1000 = tryb Compare,
po inicjalizacji pin modułu CCP jest w stanie LOW, zrównanie ustawia
pin modułu CCP w stan HIGH (flaga CCPIF ustawiona),
1001 = tryb Compare,
po inicjalizacji pin modułu CCP jest w stanie HIGH, zrównanie ustawia
pin modułu CCP w stan LOW (flaga CCPIF ustawiona),
1010 = tryb Comare,
zrównanie generuje programowe przerwanie (ustawiona flaga CCPIF,
pin CCP niezmieniony),
1011 = tryb Compare, wywołanie specjalnego zdarzenia (flaga CCPIF
ustawiona)
11xx = tryb PWM
53
Tryb CAPTURE
W trybie Capture, rejestry CCPR1H:CCPR1L przechwytują 16-bitową wartość z
rejestru TMR1 lub TMR3 w momencie, gdy na pinie RC2/CCP1 wystąpi jakieś zdarzenie.
Może to być jedno z następujących zdarzeń:
każde opadające zbocze,
każde narastające zbocze,
każde co 4 narastające zbocze,
każde co 16 narastające zbocze.
Rys. 8.1. Schemat blokowy układu CCP w trybie CAPUTRE
Typ zdarzenia wybierany jest przez bity kontrolne CCP1M3:CCP1M0 rejestru
CCP1CON<3:0>. Kiedy nastąpi przechwycenie, ustawiony zostanie bit flagi przerwania
CCP1IF rejestru PIR1<2>. Flaga przerwania musi być zerowana programowo. Jeżeli kolejne
przechwycenie wystąpi przed odczytem wartości z rejestru CCPR1, poprzednio
przechwycona wartość jest kasowana przez wpis nowej wartości.
W trybie przechwytywania (Capture) pin RC2/CCP1 powinien być skonfigurowany
jako wejściowy przez ustawienie bitu w rejestrze kierunkowym TRISC<2>.
Jeżeli pin RC2/CCP1 jest skonfigurowany jako wyjściowy, zapis do portu może być
warunkiem przechwytywania.
Liczniki używane w trybie Capture (TIMER1 i/lub TIMER3) muszą działać w trybie
zegara, lub licznika synchronicznego. W trybie licznika asynchronicznego operacje Capture
mogą nie działać. Wyboru licznika dla modułu CCP dokonuje się w rejestrze T3CON.
Kiedy tryb przechwytywania jest zmieniany, mogą być generowane fałszywe
przerwania. Użytkownik powinien wyzerować bit zezwolenia na przerwanie z układu CCP1 -
CCP1IE rejestry PIE1<2>, aby uniknąć fałszywych przerwań. Powinien również wyzerować
bit (flagę przerwania) CCP1IF przed jakąkolwiek zmianą trybu pracy.
54
Cztery ustawienia preskalera są konfigurowane przez bity CCP1M3:CCP1M0. Ilekroć
moduł CCP jest wyłączany, lub moduł ten nie jest w trybie przechwytywania, wówczas
licznik preskalera jest wyzerowany. Jakikolwiek sygnał RESET zeruje licznik preskalera.
Przełączanie z jednego ustawienia preskalera do innego może generować przerwanie.
Również licznik przeskalera nie zostanie wyzerowany, dlatego pierwsza operacja
przechwycenia może być z niezerowym licznikiem preskalera.
Poniższy przykład pokazuje zalecaną metodę przełączania pomiędzy wartościami
preskalera. Przykład ten zeruje także licznik preskalera, aby nie generował on "fałszywych"
przerwań.
CLRF CCP1CON,F ; wył
ą
cz moduły CCP
MOVLW NEW_CAPT_PS ; załadowanie rejestru
; W nowo
ą
warto
ś
ci
ą
; preskalera i
; wł
ą
czenie modułu CCP
MOVWF CCP1CON ; załadowanie CCP1CON
; przez t
ą
warto
ść
Listing D8.1. Sposób zmiany wartości preskalera
Tryb COMPARE
W trybie Compare 16-bitowa wartość rejestru CCPR1 (CCPR2) jest stale
porównywana z wartością rejestru TMR1 lub rejestru TMR3 . Kiedy wystąpi zrównanie tych
wartości, pin RC2/CCP1 (RC2/CCP1) jest ustawiany:
w stan wysoki,
w stan niski,
zmienia stan wyjścia (z wysokiego na niski lub z niskiego na wysoki),
pozostaje bez zmian.
Tryb pracy tego pinu jest ustawiany za pomocą bitów kontrolnych CCP1M3:CCP1M0
(CCP2M3:CCP2M0), w tym samym czasie ustawiana jest flaga przerwania CCP1IF
(CCP2IF).
Użytkownik musi skonfigurować pin modułu CCPx jako wyjściowy poprzez wyzerowanie
odpowiednich bitów w rejestrze kierunkowym TRISC.
Aby możliwa była praca modułu CPP w trybie porównania, TIMER1 i/lub TIMER3
muszą być uruchomione w trybie zegara lub w trybie licznika synchronicznego. W trybie
asynchronicznego licznika operacja porównania może nie funkcjonować.
Kiedy wybrany jest tryb generowania przerwania programowo, pin CCP1 jest nie
aktywny. Bit CCPIF jest ustawiony w skutek pojawienia się przerwania od CCP (jeżeli jest
ono dostępne).
W trybie wywołania specjalnego zdarzenia (Special Event Trigger) generowane jest
wewnętrzne wyzwolenie, które może zostać wykorzystane do zapoczątkowania jakiejś akcji.
Wyjście układu specjalnych zdarzeń układu CCP1 kasuje zawartość rejestrów TMR1.
Pozwala to na efektywne wykorzystanie rejestru CCPR1 jako 16-bitowego programowalnego
rejestru okresu dla Timera1.
55
Rys. 8.2. Schemat blokowy układu CCP w trybie COMPARE
Wyjście układu specjalnych zdarzeń modułów CCPx kasuje zarówno rejestry TMR1
jak i rejestry TMR3. Dodatkowo jeżeli moduł A/C jest odblokowany, zdarzenie specjalne od
modułu CCP2 rozpoczyna konwersję A/C.
Zdarzenie specjalne od modułu CCP2 nie ustawia flag przerwania do TIMER1 i TIMER3
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
TRISC
Rejestr kierunku danych PORTC
1111 1111
1111 1111
TMR1L
Rejestr młodszego bajtu liczina TIMER1
xxxx xxxx
uuuu uuuu
TMR1H
Rejestr starszego bajtu liczina TIMER1
xxxx xxxx
uuuu uuuu
T1CON
RD16
-
T1CKP
S1
T1CKP
S0
T1OSC
EN
~T1
SYNC
TMR1
CS
TMR1ON 0-00 0000
u-uu uuuu
CCPR1L
Rejestr Capture/Compare/PWM (LSB)
xxxx xxxx
uuuu uuuu
CCPR1H
Rejestr Capture/Compare/PWM (MSB)
xxxx xxxx
uuuu uuuu
CCP1CON
-
-
DC1B1 DC1B0
CCP1
M3
CCP1
M2
CCP1
M1
CCP1
M0
- -00 0000
- -00 0000
CCPR2L
Rejestr Capture/Compare/PWM (LSB)
xxxx xxxx
uuuu uuuu
CCPR2H
Rejestr Capture/Compare/PWM (MSB)
xxxx xxxx
uuuu uuuu
CCP2CON
-
-
DC2B1 DC2B0
CCP2
M3
CCP2
M2
CCP2
M1
CCP2
M0
- -00 0000
- - 00 0000
PIR2
-
-
-
EEIF
BCLIF
LVDIF
TMR3IF
CCP2IF
- - -0 0000
- - -0 0000
PIE2
-
-
-
EEIE
BCLIE
LVDIE
TMR3IE
CCP2IE
- - -0 0000
- - -0 0000
IPR2
-
-
-
EEIP
BCLIP
LVDIP
TMR3IP
CCP2IP
- - -1 1111
- - -1 1111
TMR3L
Rejestr młodszego bajtu liczina TIMER3
xxxx xxxx
uuuu uuuu
TMR3H
Rejestr starszego bajtu liczina TIMER3
xxxx xxxx
uuuu uuuu
T3CON
RD16
T3CCP2 T3CKP
S1
T3CKP
S0
T3CCP1
~T3
SYNC
TMR3
CS
TMR3ON
0000 0000
uuuu uuuu
Tabela D8.3. Rejestry związane z trybami CAPTURE/COMPARE i licznikami
56
Tryb PWM
W trybie modulacji szerokości impulsów pin CCPx jest źródłem sygnału PWM o 10-
bitowej rozdzielczości. Ponieważ pin CCP1 jest multipleksowany z zatrzaskami danych
PORTC, bit TRISC<2> musi być wyzerowany, aby móc ustawić pin CCP1 jako wyjście.
Rys. 8.3. Schemat blokowy układu CCP w trybie PWM
Rys. 8.4. Wyjście układu PWM
Okres PWM
57
Okres PWM jest określony poprzez wpis do rejestru PR2. Okres PWM można
obliczyć używając następującego wzoru:
Okres PWM = [(PR2) + 1]*4*Tosc*(wartość preskaleraTMR2)
Częstotliwość PWM określona jest jako 1/[okres PWM].
Kiedy TMR2 jest równy PR2, to w czasie następnego cyklu mają miejsce trzy następujące
zdarzenia:
•
TMR2 jest wyzerowany,
•
pin CCP1 jest ustawiony (za wyjątkiem, gdy wypełnienie PWM jest 0% ),
•
wypełnienie PWM jest przepisane z CCPR1L do CCPR1H.
Wypełnienie PWM
Wypełnienie PWM jest określone przez wpis do rejestru CCPR1L i bitów
CCP1CON<5:4>. Maksymalna rozdzielczość wynosi 10 bitów. CCPR1L zawiera osiem
najbardziej znaczących bitów (MSB), a CCP1CON<5:4> zawiera dwa najmniej znaczące
bity (LSB). Dziesięciobitowa wartość jest reprezentowana przez CCPR1L:CCP1CON<5:4>.
Do określenia wypełnienia należy użyć następującego równania:
Wypełnienie PWM = (CCPR1L:CCP1CON<5:4>)*Tosc*(wartość preskalera TMR2)
Wartość wypełnienia może być wpisana do rejestrów CCPR1L:CCP1CON<5:4> w
dowolnym momencie. Zostanie ona przepisywana do CCPR1H po zrównaniu się wartości
PR2 i TMR2. W trybie PWM, CCPR1H jest rejestrem tylko do odczytu.
Maksymalna rozdzielczość dla danej częstotliwości PWM jest określona równaniem :
bitów
osc
Rozdzielcz
Fpwm
Fosc
)
2
log(
)
log(
=
Jeśli wypełnienie (duty cycle) PWM jest dłuższe niż okres (period) PWM, to pin CCP1 nie
będzie wyzerowany.
Aby skonfigurować moduł PWM należy wykonać następujące operacje:
1. Ustawić okres PWM przez zapis do rejestru PR2.
2. Ustawić wypełnienie przez zapis do rejestru CCPR1L i bitów CCP1CON<5:4>.
3. Skonfigurować pin CCP1 jako wyjście przez wyzerowanie bitu TRISC<2>.
4. Ustawić wartości preskalera i uaktywnić Timer 2 przez zapis do T2CON.
5. Skonfigurować moduł CCP1 do pracy w trybie PWM.
Cz
ę
stotliwo
ść
PWM
2.44 kHz
9.77 kHz
39.06 kHz 156.25 kHz 312.50 kHz 416.67 kHz
prescaler Timera (1, 4, 16)
16
4
1
1
1
1
warto
ść
PR2
0xFFh
0xFFh
0xFFh
0x3Fh
0x1Fh
0x17h
max.
rozdzielczo
ść
(w
bitach)
14
12
10
8
7
6.25
Tabela D8.4. Przykładowe częstotliwości PWM i rozdzielczości przy 40MHz
58
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
TRISC
Rejestr kierunku danych PORTC
1111 1111
1111 1111
TMR2
Rejestr młodszego bajtu liczina TIMER1
0000 0000
0000 0000
PR2
Rejestr starszego bajtu liczina TIMER1
1111 1111
1111 1111
T2CON
-
TOUT
PS3
TOUT
PS2
TOUT
PS1
TOUT
PS0
TMR2
ON
T2CK
PS1
T2CK
PS0
-000 0000
-000 0000
CCPR1L
Rejestr Capture/Compare/PWM (LSB)
xxxx xxxx
uuuu uuuu
CCPR1H
Rejestr Capture/Compare/PWM (MSB)
xxxx xxxx
uuuu uuuu
CCP1CON
-
-
DC1B1 DC1B0
CCP1
M3
CCP1
M2
CCP1
M1
CCP1
M0
- -00 0000
- -00 0000
CCPR2L
Rejestr Capture/Compare/PWM (LSB)
xxxx xxxx
uuuu uuuu
CCPR2H
Rejestr Capture/Compare/PWM (MSB)
xxxx xxxx
uuuu uuuu
CCP2CON
-
-
DC2B1 DC2B0
CCP2
M3
CCP2
M2
CCP2
M1
CCP2
M0
- -00 0000
- - 00 0000
Tabela D8.5. Rejestry związane z modułem PWM i TIMER2
10 Moduł synchronicznego portu szeregowego (MSSP)
( Master Synchronous Serial Port )
Moduł synchroniczny portu szeregowego (Master Synchronous Serial Port – MSSP)
jest szeregowym interfejsem używanym do komunikacji z układami peryferyjnymi lub
innymi mikrokontrolerami. Tymi urządzeniami mogą być szeregowe pamięci EEPROM,
rejestry przesuwne, sterowniki wyświetlaczy, przetworniki A/D i inne. Moduł MSSP może
pracować w jednym z dwóch trybów:
szeregowy interfejs SPI (Serial Peripheral Interface),
szeregowy interfejs I
2
C (Inter-Integrated Circuit).
Interfejs I
2
C sprzętowo obsługuje następujące tryby pracy:
tryb nadrzędny (master mode),
tryb (multi-master mode),
tryb podrzędny (slave mode),
Do obsługi modułu MSSP stosowane są trzy rejestry, rejestry statusu SSPSTAT i dwa
rejestry kontrolne SSPCON1 i SSPCON2. Rejestry te znajdują przeznaczenia zależnie od
trybu pracy modułu MSSP (SPI czy I
2
C).
59
Rejestr SSPSTAT (Status register – SPI Mode)
R/W-0
R/W-0
R-0
R-0
R-0
R-0
R-0
R-0
SMP
CKE
D/~A
P
S
R/~W
UA
BF
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
SMP:
wybór momentu próbkowania danych wejściowych:
Tryb SPI Master:
1 = dana wejściowa jest próbkowana na końcu czasu wyjścia danych,
0 = dana wejściowa jest próbkowana w środku czasu wyjścia danych.
Tryb SPI Slave:
Bit SPM musi być wyzerowany, kiedy SPI jest używany w trybie Slave
bit 6
CKE:
wybór zbocza sygnału zegarowego dla transmisji danych:
CKP=0:
1 = dana transmitowana przy narastającym zboczu SCK,
0 = dana transmitowana przy opadającym zboczu SCK.
CKP=1:
1 = dana transmitowana przy opadającym zboczu SCK,
0 = dana transmitowana przy narastającym zboczu SCK.
bit 5
D/~A:
dane/zanegowany adres ():
używany tylko w trybie I
2
C
bit 4
P:
bit STOP:
używany tylko w trybie I
2
C, bit ten jest zerowany, kiedy moduł MSSP jest
wyłączony, SSPEN jest zerowany,
bit 3
S:
bit START:
używany tylko w trybie I
2
C,
bit 2
R/~W:
zapis/odczyt informacji:
używany tylko w trybie I
2
C,
bit 1
UA:
wskaźnik aktualizacji adresu:
używany tylko w trybie I
2
C,
bit 0
BF:
flaga zajętości bufora SSPBUF(tylko w trybie odbioru):
1 = odbiór kompletny, SSPBUF jest pełny,
0 = odbiór nie jest kompletny, SSPBUF jest pusty.
60
Rejestr SSPCON1 (Control Register1 – SPI Mode)
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
WCOL SSPPOV SSPEN
CKP
SSPM3
SSPM2
SSPM1 SSPM0
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
WCOL:
detekcja kolizji (tylko w trybie nadawania):
1 = rejestr SSPBUF jest zapisywany podczas trwania transmisji poprzedniego
słowa (musi być wyzerowany programowo),
0 = brak kolizji.
bit 6
SSPPOV:
przepełnienie rejestru przy odbiorze:
tryb Slave SPI
1 = nowy bajt jest odbierany, podczas gdy rejestr SSPBUF nadal przechowuje
poprzednią daną. W razie przepełnienia dana w SSPSR jest tracona.
Przepełnienie może wystąpić jedynie w trybie Slave. Aby uniknąć
przepełnienia użytkownik musi odczytać SSPBUF, nawet gdy tylko
transmituje daną. (musi być zerowany programowo),
0 = brak przepełnienia,
bit 5
SSPEN:
uaktywnienie modułu SSP:
1 = uaktywnienie portu szeregowego i skonfigurowanie SCK, SDO, SDI i ~SS
jako pinów portu szeregowego,
0 = zablokowanie portu szeregowego i skonfigurowanie tych pinów jako pinów
portu we/wy.
Aktywne piny muszą być skonfigurowane odpowiednio jako wejścia lub wyjścia
bit 4
CKP:
bit polaryzacji zegara:
1 = stan czuwania dla zegara jest poziomem wysokim,
0 = stan czuwania dla zegara jest poziomem niskim,
bit 3-0
SSPM3: SSPM0:
wybór trybu pracy SSP:
0101 = tryb SPI Slave, zegar = pin SCK, pin kontrolny ~SS nie aktywny, pin
~SS może być użyty jako pin we/wy,
0100 = tryb SPI Slave, zegar = pin SCK, pin kontrolny ~SS aktywny,
0011 = tryb SPI Master, zegar= wyjście TMR2/2,
0010 = tryb SPI Master, zegar = Fosc/64,
0001 = tryb SPI Master, zegar = Fosc/16,
0000 = tryb SPI Master, zegar = Fosc/4,
(bity które nie są wyszczególnione albo są zarezerwowane, albo używane w
trybie I
2
C)
61
Tryb SPI
Tryb SPI pozwala synchronicznie szeregowo wysyłać i jednocześnie odbierać 8 bitów
danych. Dostępne są wszystkie cztery tryby SPI.
Do komunikacji typowo używa się trzech linii:
SDO (Serial Data Out) – RC5/SDO,
SDI (Serial Data In) – RC4/SDI/SDA,
SCK (Serial Clock) – RC3/SCK/SCL/LVDIN,
~SS (Slave Select) – RA5/~SS/AN4 – dodatiowy pin używany w trybie Slave,
Rys. 9.1. Schemat blokowy MSSP (tryb SPI)
62
Aby skonfigurować interfejs SPI należy określić kilka opcji. Dokonuje się tego przez
zaprogramowanie odpowiednich bitów kontrolnych rejestru SSPCON1<5:0> oraz bitów
statusu w rejestrze SSPSTAT<7:6> Bity te umożliwiają określenie:
trybu Master (SCK jest wyjściem zegarowym),
trybu Slave (SCK jest wejściem zegarowym),
polaryzację sygnału zegarowego,
próbkowanie danych wejściowych(pośrodku, lub na końcu danych wyjściowych),
wyboru zbocza sygnału zegarowego(dane wyjściowe na narastające/opadające zbocze
sygnału SCK),
zakres pracy sygnału zegarowego (tylko w trybie Master),
tryb wyboru układu Slave ( tylko w trybie Slave),
Układ MSSP zawiera rejestr przesuwny nadawania/odbioru SSPSR i rejestr będący
buforem SSPBUF. Rejestr SSPSR przesuwa dane do/z urządzenia począwszy od najbardziej
znaczącego bitu (MSb). Bufor SSPBUF natomiast zawiera dane, które zostały zapisane w
rejestrze SSPSR. Otrzymana 8-bitowa dana jest automatycznie przepisywana do rejestru
SSPBUF. Kiedy bufor jest pełen, ustawiany jest bit BF w rejestrze SSPSTAT<0>,
jednocześnie ustawiana jest flaga przerwania SSPIF. Podwójne buforowanie danych
wejściowych pozwala na przyjęcie następnego bajtu przed odczytem danych, które właśnie
zostały odebrane. Jakikolwiek zapis do rejestru SSPBUF podczas nadawania/odbioru będzie
ignorowany, bit kolizji zapisu WCOL rejestru SSPCON1<7> zostanie ustawiony.
Programista musi zapewnić wyzerowanie bitu WCOL.
Kiedy aplikacja oczekuje na odbiór ważnych danych, rejestr SSPBUF powinien być
odczytany zanim następny bajt danych do nadania jest zapisany do SSPBUF. Bit
przepełnienia BF rejestru SSPSTAT<0> wskazuje, kiedy rejestr SSPBUF został zapełniony
danymi przychodzącymi. Kiedy rejestr SSPBUF jest odczytany bit BF jest zerowany.
Przerwania układu MSSP używane są do określenia kiedy operacja nadawania/odbioru
została zakończona. Rejestr SSPBUF musi być odczytany i/lub zapisany. Jeżeli przerwania
nie są używane, wówczas do określenia czy wystąpiła kolizja zapisu stosuje się przeglądanie
programowe. Poniższy przykład przedstawia zapisywanie do rejestru SSPBUF(SSPSR)
danymi do nadania.
LOOP BTFSS SSPSTAT, BF ; czy odbiór/nadawanie
; zostało zako
ń
czone?
BRA LOOP ; nie
MOVF SSPBUF, W ; rejestr WREG=rejestr SSPBUF
MOVWF RXDATA
; zapis w pami
ę
ci RAM –
; je
ż
eli jest taka potrzeba
MOVF TXDATA, W ; rejestr WREG=rejestr TXDATA
MOVWF SSPBUF ; nowa dana do nadania
Listing D9.1. Zapis danych do rejestru SSPBUF (SSPSR)
63
By uaktywnić port szeregowy, należy ustawić bit aktywacji SSPEN w rejestrze
SSPCON<5>. By zresetować albo przekonfigurować tryb SPI, należy wyzerować bit SSPEN,
reinicjalizować rejestr SSPCON i ponownie ustawić bit SSPEN. Skonfiguruje to piny SDI,
SDO, SCK i ~SS jako piny portu szeregowego. Aby piny zachowały funkcje portu
szeregowego, muszą być odpowiednio skonfigurowane (w rejestrze kierunkowym TRISC).
Oznacza to:
•
SDI jest automatycznie kontrolowany przez moduł SPI,
•
SDO musi mieć TRISC<5> wyzerowany,
•
SCK (w trybie Master) musi mieć TRISC<3> wyzerowany,
•
SCK (w trybie Slave) musi mieć TRISC<3> ustawiony,
•
~SS musi mieć TRISA<5> ustawiony.
Rys. 9.2. Połączenie SPI Master/Slave
Rysunek D9.2 przedstawia typowe połączenie pomiędzy dwoma mikroprocesorami.
Kontroler Master (Processor1) inicjalizuje transmisje danych przez wysyłanie sygnału SCK.
Dane są przesuwane w obu rejestrach przesuwnych, na zaprogramowane przez użytkownika
zbocze zegarowe i zatrzaskiwane na przeciwnym zboczu zegarowym. Oba procesory powinny
pracować z taką samą polaryzacją sygnału zegarowego (CKP), wówczas oba kontrolery są w
stanie wysyłać i odbierać dane w tym samym czasie.
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
TRISC
Rejestr kierunku danych PORTC
1111 1111
1111 1111
SSPBUF
Bufor(rejestr) odbioru/nadawania danej modułu SSP
xxxx xxxx
uuuu uuuu
SSPCON1
WCOL
SSPPOV
SSPEN
CKP
SSPM3 SSPM2 SSPM1
SSPM0
0000 0000
0000 0000
TRISA
-
Rejestr kierunku danych PORTA
-111 1111
-111 1111
SSPSTAT
SMP
CKE
D/~A
P
S
R/~W
UA
BF
0000 0000
0000 0000
Tabela. D9.1. Rejestry związane z interfejsem SPI
64
Tryb Master układu SPI
W tym trybie układ SPI może zainicjować transmisję w dowolnej chwili, ponieważ
kontroluje on sygnał na linii SCK. Proces wysłania lub odbierania danej przez interfejs jest
uruchamiany przez wprowadzenie jej do rejestru SSPBUF. Jeżeli interfejs SPI ma tylko
odbierać dane, linia SDO może być nieaktywna (ustawiona jako wejście). Dana z rejestru
SSPSR bit po bicie jest wystawiana na linii SDI w takt sygnału zegarowego. Każdy odebrany
bajt jest umieszczany w rejestrze SSPBUF, ponadto ustawiane są odpowiednie bity statusu.
Polaryzacja sygnału zegarowego jest wybierana przez bit CKP (SSPCON<4>). W
trybie Master podział sygnału zegarowego jest ustawiany przez użytkownika. Możliwe są
następujące podziały sygnału zegarowego:
•
FOSC/4 (lub TCY),
•
FOSC/16 (lub 4 • TCY),
•
FOSC/64 (lub 16 • TCY),
•
Timer2 output/2.
Pozwala to na uzyskanie prędkości transmisji przy częstotliwości zegara równej
40MHz równej 10Mbps (bits per second).
Na rysunku poniżej pokazano przebiegi czasowe dla trybu Master. Kiedy CKE = 1,
dane na pinie SDO są ważne przed pojawieniem się zbocza sygnału zegarowego na pinie
SCK. Zmianę próbkowania sygnału zegarowego dokonuje się za pomocą bitu SMP.
Rys. 9.3. Przebiegi czasowe SPI w trybie Master
65
Tryb Slave układu SPI
W trybie Slave dane są wysyłane i odbierane, gdy na wejściu SCK pojawiają się
impulsy zegarowe generowane przez zewnętrzne urządzenie pracujące w trybie Master. Po
wprowadzeniu ostatniego bitu danej rejestru SSPSR, całe odebrane słowo zatrzaskiwane jest
w rejestrze SSPBUF i ustawiana jest flaga przerwania SSPIF w rejestrze PIR1<3>.
Parametry sygnału zegarowego dostarczanego do układu SPI muszą spełniać odpowiednie
parametry czasowe zgodnie ze specyfikacją mikrokontrolera. W stanie uśpienia
mikrokontrolera interfejs SPI może nadawać/odbierać dane. Gdy bajt zostanie odebrany,
mikrokontroler wychodzi ze stanu uśpienia.
Linia ~SS umożliwia pracę mikrokontrolera w trybie Slave. Aby umożliwić pracę w
tym trybie linia ~SS musi być odblokowana SSPCON1<3:0>=04h Gdy linia ~SS jest w
stanie niskim nadawanie i odbiór jest możliwy.
1. Kiedy moduł SPI pracuje w trybie Slave z ustawioną kontrolą za pomocą pinu ~SS
(SSPCON<3:0> = 0100), to zostaje on resetowany, jeśli sygnał na pinie SS przyjmie
wartość VDD.
2. Jeśli układ SPI jest używany w trybie Slave z ustawionym bitem CKE = ’1’, to
kontrola za pomocą pinu ~SS musi być włączona.
Rys. 9.4. Przebiegi czasowe SPI w trybie Slave, CKE = 0
66
Rys. 9.5. Przebiegi czasowe SPI w trybie Slave, CKE = 1
11 Interfejs USART
Moduł
uniwersalnego
synchronicznego-asynchronicznego
odbiornika-nadajnika
(USART) jest jednym z dwóch szeregowych modułów wejściowo-wyjściowych. USART jest
także znany jako interfejs komunikacji szeregowej lub SCI (Serial Communications
Interface). USART może być konfigurowany jako w pełni dwukierunkowy interfejs
asynchroniczny, który może komunikować się z urządzeniami peryferyjnymi, takimi jak
terminale CRT i komputery osobiste. Może on być również konfigurowany jako
jednokierunkowy synchroniczny interfejs, służący do współpracy z urządzeniami
peryferyjnymi takimi jak: przetworniki A/D i / D/A, szeregowe pamięci EEPROM, itd.
Układ USART może pracować w następujących trybach:
asynchronicznym (dwukierunkowym – full duplex),
synchronicznym – master (jednokierunkowym – half duplex),
synchronicznym – slave (jednokierunkowym – half duplex).
Aby linie RC6/TX/CK i RC7/RX/DT były skonfigurowane do obsługi układu USART należy
ustawić:
bit SPEN (RCSTA<7>) = 1,
bit TRISC<6> = 0,
bit TRISC<7> = 1,
67
Baud Rate Generator
Układ BRG wspomaga oba tryby pracy interfejsu USART – asynchroniczny i
synchroniczny. Jest to dedykowany 8-bitowy generator szybkości transmisji. Rejestr SPBRG
kontroluje okres swobodnej pracy 8-bitowego zegara. W trybie asynchronicznym bit BRGH
(TXTA<2>) kontroluje również szybkość transmisji. W trybie synchronicznym bit BRGH
jest ignorowany. Poniższa tabela pokazuje wzory potrzebne do obliczenia szybkości
transmisji dla różnych trybów USART (tylko dla pracy jako Master).
SYNC
BGRH=0 (mała pr
ę
dko
ść
)
BRGH=1 (du
ż
a pr
ę
dko
ść
)
0
(Asynchroniczny) szybko
ść
transmisji = Fosc/(64(X+1))
szybko
ść
transmisji = Fosc/(16(X+1))
1
(Synchroniczny) szybko
ść
transmisji = Fosc/(4(X+1))
nie oblicza si
ę
Tabela D10.1. Zależności określające prędkość transmisji
Mając podaną żądaną szybkość transmisji i Fosc, najbliższa wartość całkowita dla
rejestru SPBRG może być obliczona przy użyciu wzorów z powyższej tabeli.
Poniższy przykład obrazuje sposób obliczania błędu prędkości transmisji przy
następujących warunkach:
•
Fosc = 16MHz,
•
Pożądana prędkość transmisji = 9600,
•
BRGH = 0,
•
SYNC = 0,
Pożądana prędkość transmisji = Fosc / (64(X+1))
Rozwiązując względem X:
X = ((Fosc / Pożądana prędkość transmisji ) / 64) – 1
X = ((16000000/9600) / 64) – 1
X = [25.042] = 25
Obliczona prędkość transmisji = 16000000 / (64(25+1))
= 9615
Błąd = (Obliczona prędkość transmisji – Pożądana prędkość transmisji) /
Pożądana prędkość transmisji
= (9615 – 9600) / 9600
= 0.16%
Przykład D10.1. Obliczanie błędu prędkości transmisji
Korzystne może być użycie wysokiej szybkości transmisji (BRGH=1), nawet dla
wolniejszych zegarów transmisji. Dzieje się tak dlatego, gdyż równanie Fosc/(16(X+1)) może
w niektórych przypadkach zredukować błąd transmisji.
Wpisanie nowej wartości do rejestru SPBRG powoduje zresetowanie timera BRG.
68
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
TXSTA
CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
TX9D
0000 -010
0000 -010
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 –00x
0000 –00x
SPBRG
Rejestr generatora szybko
ś
ci transmisji
0000 0000
0000 0000
Tabela D10.2. Rejestry związane z generatorem BRG układu USART
Transmisja Asynchroniczna
W tym trybie układ USART używa standardowego formatu bez powrotu do zera
(NRZ) (jeden bit START, 8 lub 9 bitów danych i jeden bit STOP). Najbardziej popularnym
formatem danych jest format 8–bitowy (8N1). Transmisja danych zaczyna się od bitu
najmniej znaczącego - LSB. Nadajnik i odbiornik USART są funkcjonalnie niezależne, ale
używają tego samego formatu danych i tej samej szybkości transmisji. Generator szybkości
transmisji generuje zegar o szybkości x16 albo x64 przesunięcia transmisji bitów, zależnie od
bitu BRGH (TXSTA <2>). Parzystość nie jest wspomagana sprzętowo, ale może być
implementowana programowo (i zapisana jako 9-ty bit danych). Tryb asynchroniczny jest
zatrzymany podczas trybu SLEEP mikrokontrolera. Tryb asynchroniczny jest wybierany
przez wyczyszczenie bitu SYNC (TXSTA<4>).
W tym trybie układ USART składa się z elementów:
•
Generatora szybkości transmisji
•
Układu próbkującego.
•
Nadajnika asynchronicznego.
•
Odbiornika asynchronicznego.
Układ nadajnika transmisji asynchronicznej – USART
Schemat blokowy nadajnika USART pokazany jest poniżej. Sercem nadajnika jest
rejestr przesuwny nadajnika (TSR). Rejestr przesuwny otrzymuje dane z bufora transmisji
TXREG (można do niego zapisać i odczytać zawartość). Do rejestru TXREG dane są
wprowadzane przez program użytkownika.
Rys. 10.1. Schemat blokowy układu nadajnika transmisji asynchronicznej
69
Rejestr TSR jest załadowany nową daną z rejestru TXREG pod warunkiem wykrycia
bitu STOP w poprzedniej transmisji (zakończone nadawanie). Przepisanie danych z rejestru
TXREG do TSR powoduje ustawienie flagi TXIF (PIR1<4>) sygnalizując opróżnienie
rejestru TXREG. Przerwanie może być aktywne/nie aktywne przez ustawienie/wyzerowanie
bitu TXIE (PIE1<4>). Flaga bitu TXIF będzie ustawiona nie zważając na stan bitu TXIE i nie
może być wyzerowana programowo. Bit ten będzie wyzerowany dopiero wtedy, kiedy nowe
dane będą załadowane do rejestru TXREG. Podczas gdy flaga TXIF wskazuje na status
rejestru TXREG, inny bit TRMT (TXSTA <1>) pokazuje status rejestru TSR.
1. Rejestr TSR nie jest mapowany w pamięci danych, więc nie jest dostępny dla
użytkownika.
2. Flaga TXIF jest ustawiona, kiedy ustawiony jest bit TXEN.
Układ USART jest włączany (uaktywniony) przez ustawienie bitu TXEN
(TXSTA<5>). Transmisja rozpoczyna się, gdy do rejestru TXREG wprowadzimy daną.
Oczywiście, generator BRG musi generować sygnał zegarowy o właściwej częstotliwości.
Normalnie, gdy zaczyna się transmisja, rejestr TSR jest pusty. W tym momencie transfer do
rejestru TXREG spowoduje natychmiastowy transfer do rejestru TSR i opróżnienie rejestru
TXREG. Zerując bit TXEN podczas transmisji spowodujemy przerwanie transmisji i
zresetowanie układu nadajnika. W rezultacie pin RC6/TX/CK przejdzie w stan wysokiej
impedancji.
Jeśli zostanie wybrana transmisja 9–bitowa, bit transmisji TX9 (TXSTA<6>)
powinien być ustawiony, dziewiąty bit powinien być zapisany do TX9D (TXSTA<0>).
Dziewiąty bit musi być zapisany przed zapisem ośmiu bitów danych do rejestru TXREG.
Taka sytuacja ma miejsce, ponieważ dane zapisane do rejestru TXREG mogą spowodować
natychmiastowe przeniesienie danych do rejestru TSR (jeśli TSR jest pusty). W takim
przypadku nieprawidłowy dziewiąty bit może być zapisany do rejestru TSR.
Aby ustawić transmisję asynchroniczną należy wykonać następujące kroki:
•
Uaktywnić rejestr SPBRG wpisując odpowiednią wartość szybkości transmisji. W
przypadku chęci uzyskania szybkiej transmisji, należy ustawić bit BRGH (SPBRG<2>).
•
Uaktywnić asynchroniczny port szeregowy przez wyzerowanie bitu SYNC i ustawienie
bitu SPEN.
•
Jeśli przerwania będą wykorzystane, należy ustawić bit TXIE.
•
Jeśli wykorzystana będzie transmisja 9–bitowa, należy ustawić bit TX9.
•
Uaktywnić transmisję przez ustawienie bitu TXEN, który ustawi bit TXIF.
•
Jeśli została wybrana transmisja 9–bitowa, bit dziewiąty powinien być załadowany do bitu
TX9D.
•
Załadować dane do rejestru TXREG (spowoduje to rozpoczęcie transmisji).
70
Rys. 10.2 Przebiegi czasowe z nadajnika asynchronicznego USART – jeden bajt
Rys. 10.3. Przebiegi czasowe z nadajnika asynchronicznego USART – dwa bajty
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 -00x
0000 -00x
TXREG
Rejestr układu transmisji USART
0000 0000
0000 0000
TXSTA
CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
TX9D
0000 -010
0000 -010
SPBRG
Rejestr generatora BRG
0000 0000
0000 0000
Tabela D10.3. Rejestry związane z nadajnikiem asynchronicznym układu USART
71
Rejestr TXSTA
(Rejestr TXSTA jest rejestrem statusu i rejestrem kontrolnym nadajnika modułu USART)
R/W-0
R/W-0
R/W-0
R/W-0
U-0
R/W-0
R-1
R/W-0
CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
TX9D
bit 7
Bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
CSRC:
detekcja kolizji (tylko w trybie nadawania):
tryb Asynchroniczny:
bez znaczenia,
tryb Synchroniczny:
1 = tryb Master (sygnał zegara generowany wewnętrznie z BRG),
0 = tryb Slave (sygnał zegara z źródła zewnętrznego).
bit 6
TX9:
bit włączenia transmisji 9–bitowej:
1 = transmisja 9-bitowa,
0 = transmisja 8-bitowa.
bit 5
TXEN:
bit włączający transmisję:
1 = transmisja możliwa,
0 = transmisja niemożliwa.
Uwaga: SREN/CREN jest nadrzędny w stosunku do TXEN w trybie SYNC.
bit 4
SYNC:
bit wyboru trybu pracy USART:
1 = tryb synchroniczny,
0 = tryb asynchroniczny,
bit 3
bit niezaimplementowany
bit 2
BRGH:
Bit wyboru szybkości transmisji:
tryb Asynchroniczny:
1 = duża prędkość transmisji,
0 = niska prędkość transmisji.
tryb Synchroniczny:
Nieużywany w tym trybie.
bit 1
TRMT:
Bit statusu rejestru przesuwającego TSR w nadawaniu:
1 = rejestr TSR pusty,
0 = rejestr TSR pełny.
bit 0
TX9D:
9–ty bit danych transmitowanych:
może być bitem adresu/danych lub parzystości,
72
Układ odbiornika transmisji asynchronicznej - USART
Schemat blokowy odbiornika jest pokazany na Rys. 11. Dane są czytane na pinie
RC7/RX/DT i są przesyłane do bloku odbioru danych (Data Recovery Block). Blok odbioru
danych jest szybkim rejestrem przesuwnym (prędkość generatora BRG x16), podczas gdy
główny rejestr odbiornika szeregowego pracuje z częstotliwością Fosc.
Rys. 10.4. Schemat blokowy układu odbiornika transmisji asynchronicznej
Najważniejszą częścią odbiornika jest szeregowy rejestr przesuwny RSR. Po
wykryciu bitu STOP, odebrana dana w rejestrze RSR jest przesyłana do rejestru RCREG
(jeżeli jest on pusty). Po zakończeniu przesyłania zostaje ustawiona flaga RCIF (PIR1<5>).
Przerwanie może być odblokowane/zablokowane poprzez ustawienie/wyzerowanie bitu RCIE
w rejestrze PIE1<5>. Flaga RCIF jest bitem tylko do odczytu i może być wyzerowana tylko
przez kontroler. Zostaje ona wyzerowana, gdy zostanie odczytany rejestr RCREG i jest on
pusty. Rejestr RCREG jest podwójnie buforowany (dwustopniowy FIFO).
Jest możliwy odbiór i przesłanie dwóch bajtów danych do RCREG FIFO i
zapoczątkowanie przesuwania trzeciego bajtu do rejestru RSR. Po wykryciu bitu STOP w
trakcie wysyłania trzeciego bajtu, jeżeli rejestr RCREG jest ciągle pełny, to ustawiany jest bit
przepełnienia OERR (RCSTA<1>). Dane w RSR zostaną utracone. Aby odzyskać dwa bajty
znajdujące się w FIFO, należy dwukrotnie odczytać rejestr RCREG. Bit przepełnienia OERR
musi być wyzerowany programowo. Robi się to poprzez wyzerowanie i ustawienie bitu
CREN. Gdy bit OERR jest ustawiony, przesyłanie z rejestru RSR do RCREG jest
wstrzymane, a kolejne dane nie są odbierane. Dlatego niezbędne jest wyzerowanie bitu błędu
OERR. Bit błędu ramki FERR (RCSTA<2>) zostaje ustawiony, gdy bit STOP nie zostaje
wykryty (stan wysoki). Bit FERR i 9-ty odebrany bit są buforowane tak, jak odbierana dana.
Odczyt RCREG załaduje bity RX9D i FERR nowymi wartościami, dlatego konieczny jest
odczyt RCSTA, zanim odczytany zostanie rejestr RCREG, aby nie stracić informacji o
starych wartościach bitów RX9D i FERR.
73
Aby ustawić tryb odbioru asynchronicznego należy:
1. Ustawić w rejestrze SPBRG zadaną szybkość transmisji. Jeżeli zadana jest duża
szybkość transmisji, należy ustawić bit BRGH.
2. Uaktywnić asynchroniczny port szeregowy, zerując bit SYNC i ustawiając SPEN.
3. Jeśli przerwania będą wykorzystane, należy ustawić bit RCIE.
4. Jeśli wykorzystana będzie transmisja 9–bitowa, należy ustawić bit RX9.
5. Uaktywnić transmisję przez ustawienie bitu CREN.
6. Flaga RCIF zostanie ustawiona, gdy dane zostaną odebrane i zostanie wygenerowane
przerwanie, jeżeli bit RCIE jest ustawiony.
7. Należy odczytać rejestr RCSTA, aby uzyskać dziewiąty bit (jeżeli dostępny) oraz
określić, czy nie wystąpił błąd podczas transmisji.
8. Odczytać 8-bitów danych z rejestru RCREG.
9. W przypadku wystąpienia błędu, wyczyścić bit CREN.
10. Jeśli używane są przerwania, należy upewnić się, że bity GIE i PIE (bity7 i 6) w
rejestrze INTCON są ustawione.
Aby ustawić tryb odbioru asynchronicznego z detekcją adresu należy:
1. Ustawić w rejestrze SPBRG zadaną szybkość transmisji. Jeżeli zadana jest duża
szybkość transmisji, należy ustawić bit BRGH.
2. Uaktywnić asynchroniczny port szeregowy, zerując bit SYNC i ustawiając SPEN.
3. Jeśli przerwania będą wykorzystane, należy ustawić bit RCEN i odpowiedni bit
priorytetu RCIP.
4. Ustawić bit RX9, by odblokować 9-bitowy odbiór.
5. Ustawić bit ADDEN, by odblokować detekcję adresu.
6. Odblokować odbiór ustawieniem bitu CREN.
7. Flaga RCIF zostanie ustawiona, gdy dane zostaną odebrane. Przerwania zostaną
wygenerowane, jeżeli bity RCIE i GIE są ustawione.
8. Należy odczytać rejestr RCSTA by określić, czy wystąpił błąd podczas odbioru, oraz
odczytać 9 bit danej.
9. Należy odczytać rejestr RCREG by określić, czy urządzenie zostało zaadresowane.
10. Jeżeli wystąpił jakikolwiek błąd należy wyzerować bit CREN.
11. Jeżeli urządzenie zostało zaadresowane, należy wyzerować bit ADDEN by dane
odebrane zostały umieszczone w buforze odbioru i mogło być wygenerowane
przerwanie.
Rys. 10.5 Przebiegi czasowe odbiornika asynchronicznego USART
74
Rejestr RCSTA
(Rejestr RCSTA jest rejestrem statusu i rejestrem kontrolnym odbiornika modułu USART)
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R-0
R-0
R-x
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
SPEN:
bit uaktywniania portu szeregowego:
1 = port szeregowy aktywny (konfiguruje piny RC7/RX/DT i RC6/TX/CK jako
piny portu szeregowego),
0 = port szeregowy nieaktywny.
bit 6
RX9:
bit włączenia odbioru 9–bitowego:
1 = ramka 9-bitowa,
0 = ramka 8-bitowa.
bit 5
SREN:
bit włączający jednokrotny odbiór:
tryb Asynchroniczny:
bez znaczenia,
tryb Synchroniczny – Master:
1 = włącza jednokrotny odbiór,
0 = wyłącza jednokrotny odbiór,
(bit jest zerowany po zakończeniu odbioru),
Tbyb Synchroniczny – Slave:
bez znaczenia,
bit 4
CREN:
bit aktywowania odbioru ciągłego:
tryb Asynchroniczny:
1 = włącza ciągły odbiór,
0 = wyłącza ciągły odbiór,
tryb Synchroniczny:
1 = ciągły odbiór, dopóki bit CREN nie jest wyzerowany (CREN jest
nadrzędny w stosunku do SREN),
0 = wyłącza ciągły odbiór,
bit 3
ADDEN:
bit aktywowania wykrywania adresu:
tryb Asynchroniczny 9–bitowy (RX9 = 1):
1 = uaktywnia wykrywanie adresu, uaktywnia przerwanie i zapisuje bufor
odczytu, kiedy RSR<8> jest ustawiony,
0 = dezaktywuje wykrywanie adresu, wszystkie bajty są odczytywane i
dziewiąty bit może być wykorzystany jako bit parzystości..
bit 2
FERR:
bit błędu odbioru ramki:
1 = błąd odbioru ramki (może być zmieniony przez odczyt rejestru RCREG i
odbiór następnego bajtu),
0 = brak błędu odbioru ramki.
bit 1
OERR:
bit błędu przepełnienia:
1 = błąd przepełnienia (kasowanie poprzez wyzerowanie bitu CREN),
0 = brak błędu przepełnienia.
bit 0
RX9D:
9–ty bit danych odebranych:
może być bitem adresu/danych lub parzystości, musi być wyliczany przez
oprogramowanie użytkownika,
75
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 -00x
0000 -00x
RCREG
Rejestr układu odbiorczego USART
0000 0000
0000 0000
TXSTA
CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
TX9D
0000 -010
0000 -010
SPBRG
Rejestr generatora BRG
0000 0000
0000 0000
Tabela D10.4. Rejestry związane z odbiornikiem asynchronicznym układu USART
Transmisja Synchroniczna –Master
W synchronicznym trybie Master, dana jest przekazywana sposobem half-duplex
(nadawanie i odbiór nie następują w tym samym momencie). Podczas nadawania odbiór jest
wstrzymywany i na odwrót. Wejście w tryb synchroniczny następuje poprzez ustawienie bitu
SYNC
(rejestr
TXSTA<4>).
Dodatkowo
ustawienie
bitu
SPEN
(RCSTA<7>)
przyporządkowuje odpowiednio pinom RC6/TX/CK i RC7/RX/DT linie CK (zegar) i DT
(dane). Tryb Master oznacza, że procesor nadaje sygnał zegara na linii CK. Wejście w tryb
Master następuje poprzez ustawienie bitu CSRC (TXSTA<7>).
Układ nadajnika
Najważniejszym elementem nadajnika jest szeregowy rejestr przesuwny TSR. Rejestr
przesuwny otrzymuje dane z rejestru buforowego TXREG. Do rejestru TXREG informacja
jest ładowana programowo. Rejestr TSR nie zostanie załadowany kolejną daną, dopóki
ostatni bit poprzedniej danej nie zostanie wysłany. Gdy tylko ostatni bit zostanie nadany,
rejestr TSR jest ładowany nową daną z TXREG (jeżeli jest dostępna). Kiedy rejestr TXREG
prześle dane do rejestru TSR (następuje to w jednym cyklu zegarowym), TXREG jest pusty i
zostaje
ustawiona
flaga
przerwania
TXIF
(PIR1<4>).
Przerwanie
może
być
odblokowane/zablokowane poprzez ustawienie/wyzerowanie bitu TXIE (PIE1<4>). Flaga
TXIF będzie ustawiona niezależnie od stanu bitu TXIE (PIE<4>) i nie może być wyzerowana
programowo. Zostanie skasowana tylko wtedy, kiedy nowa dana będzie załadowana do
rejestru TXREG. Podczas gdy flaga TXIF pokazuje stan rejestru TXREG, inny bit TRMT (w
TXSTA<1>) pokazuje stan rejestru TSR. TRMT jest bitem tylko do odczytu, który jest
ustawiany, kiedy TSR jest pusty. Z tym bitem nie jest związane żadne przerwanie, zatem aby
określić czy rejestr TSR jest pusty, musi to być każdorazowo sprawdzone przez użytkownika.
Rejestr TSR nie jest mapowany w pamięci danych, zatem nie jest on dostępny dla
użytkownika.
Umożliwienie transmisji następuje poprzez ustawienie bitu TXEN (TXSTA<5>).
Transmisja nie nastąpi dopóki rejestr TXREG nie zostanie załadowany danymi. Pierwszy bit
danej zostanie wysłany przy kolejnym narastającym zboczu zegarowym na linii CK. Dana
wyjściowa jest stabilna przy opadającym zboczu zegarowym. Transmisja może być także
zapoczątkowana poprzez pierwsze załadowanie rejestru TXREG, a następnie ustawienie bitu
76
TXEN. Ustawienie bitu TXEN zapoczątkuje pracę układu BRG, który bezzwłocznie generuje
sygnał zegara. Normalnie, kiedy transmisja jest zapoczątkowana, rejestr TSR jest pusty, więc
przesłanie danej do rejestru TXREG spowoduje natychmiastowe przesłanie jej do TSR,
powodując wyczyszczenie TXREG.
Rys. 10.6. Transmisja Synchroniczna – ciągła transmisja dwóch słów 8-bit
Wyzerowanie bitu TXEN podczas transmisji spowoduje jej przerwanie oraz reset
nadajnika. Piny DT i CK przejdą w stan wysokiej impedancji. Jeżeli w czasie trwania
transmisji bit CREN lub bit SREN będzie ustawiony, to także zostanie ona przerwana i pin
DT przejdzie w stan wysokiej impedancji (dla odbioru). Pin CK pozostanie ustawiony jako
wyjście, jeżeli bit CSRC będzie ustawiony (wewnętrzny zegar). Logika nadajnika jednak nie
zostanie skasowana, choć nie jest połączona z pinami. Aby zresetować nadajnik, użytkownik
musi wyczyścić bit TXEN. Jeżeli bit SREN jest ustawiony (by przerwać trwającą transmisję i
odebrać pojedyncze słowo), wówczas po odebraniu pojedynczego słowa, bit SREN będzie
wyzerowany i port szeregowy powróci do nadawania do momentu, gdy bit TXEN będzie
ciągle ustawiony. Linia DT będzie natychmiastowo przełączona ze stanu wysokiej impedancji
trybu odbioru do nadawania i zacznie pracować. Aby tego uniknąć, bit TXEN powinien
zostać wyzerowany.
Rys. 10.7. Transmisja Synchroniczna – rozpoczęcie poprzez bit TXEN
W celu wybrania 9-cio bitowej transmisji, bit TX9 (TXSTA<6>) powinien być
ustawiony, a 9-ty bit powinien być wpisywany do TX9D (TXSTA<0>). Dziewiąty bit musi
77
być wpisany zanim zostanie wpisana 8-mio bitowa dana do rejestru TXREG. Jest tak dlatego,
ponieważ dana wpisana do TXREG może spowodować natychmiastowe przesyłanie danej do
rejestru TSR (jeśli jest on pusty). Jeżeli TSR był pusty i TXREG został zapisany zanim
wpisano nową wartość TX9D, to będzie załadowana wartość dotychczasowa TX9D.
Aby ustawić transmisję synchroniczną w trybie Master należy:
1. Zainicjalizować rejestr SPBRG dla odpowiedniej prędkości transmisji.
2. Uaktywnić synchroniczny port szeregowy w trybie Master ustawiając bity SYNC,
SPEN i CSRC.
3. Jeśli przerwania będą używane, należy ustawić bit TXIE.
4. Dla transmisji 9-cio bitowej danej należy ustawić bit TX9.
5. Umożliwić transmisje ustawiając bit TXEN.
6. Jeżeli wybrano transmisję 9-cio bitową, 9-ty bit powinien być załadowany do TX9D.
7. Zapoczątkować transmisję poprzez załadowanie danej do rejestru TXREG.
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 -00x
0000 -00x
RCREG
Rejestr układu odbiorczego USART
0000 0000
0000 0000
TXSTA
CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
TX9D
0000 -010
0000 –010
SPBRG
Rejestr generatora BRG
0000 0000
0000 0000
Tabela D10.5. Rejestry związane z nadajnikiem synchronicznym układu USART – tryb Master
Układ odbiornika
Gdy tryb synchroniczny jest wybrany, odbiór jest możliwy poprzez ustawienie bitu
SREN (RCSTA<5>) lub bitu CREN (RCSTA<4>). Dana jest próbkowana na pinie
RC7/RX/DT na opadającym zboczu zegara. Jeżeli jest ustawiony bit SREN, wówczas jest
odbierane tylko pojedyncze słowo. Jeżeli bit CREN jest ustawiony, to odbiór będzie
kontynuowany, aż bit CREN zostanie wyzerowany. Jeżeli oba bity są ustawione,
pierwszeństwo ma CREN. Po ostatnim takcie zegara odebrana dana w rejestrze RSR (Receive
Shift Register) jest przesyłana do rejestru RCREG (jeżeli jest on pusty). Kiedy przesłanie jest
zakończone, flaga przerwania RCIF (PIR1<5>) zostaje ustawiona. Przerwanie może być
odblokowane/zablokowane poprzez ustawienie/wyzerowanie bitu RCIE (PIE1<5>). Flaga
RCIF jest bitem tylko do odczytu, która może być wyzerowana sprzętowo. W tym przypadku
będzie ona skasowana, gdy rejestr RCREG zostanie odczytany i będzie on pusty. RCREG
jest rejestrem podwójnie buforowanym (dwupoziomowy FIFO). Możliwe jest odebranie
dwóch bajtów i przesłanie ich do RCREG FIFO i rozpoczęcie przyjmowania trzeciego bajtu
do rejestru RSR. Jeżeli podczas odbierania ostatniego bitu trzeciego bajtu RCREG jest wciąż
pełny, to zostanie ustawiony bit błędu przepełnienia OERR (RCSTA<1>). Słowo w RSR
zostanie utracone. Rejestr RCREG może być odczytany dwukrotnie, by odzyskać dwa bajty z
FIFO. Bit OERR musi być wyczyszczony programowo (poprzez wyczyszczenie CREN).
Jeżeli bit OERR jest ustawiony, przesyłanie z RSR do RCREG jest zablokowane, więc
niezbędne jest, aby go wyzerować. Dziewiąty bit odbieranej danej jest buforowany w ten sam
78
sposób, jak odbierana dana. Odczytanie rejestru RCREG załaduje bit RX9D nową wartością,
dlatego jest konieczne, by użytkownik odczytał rejestr RCSTA zanim odczyta RCREG, aby
nie utracić aktualnej informacji w RX9D.
Rys. D10.8. Odbiór synchroniczny pojedynczego słowa (SREN) w trybie Master
Aby ustawić odbiór synchroniczy w trybie Master należy:
1. Ustawić w rejestrze SPBRG zadaną prędkość transmisji.
2. Uaktywnić synchroniczny port szeregowy ustawiając bity SYNC, SPEN i CSRC.
3. Upewnić się, że bity CREN i SREN są wyczyszczone.
4. Jeśli przerwania będą używane, należy ustawić bit RCIE.
5. Dla odbioru 9-cio bitowej danej ustawić bit RX9.
6. Dla odbioru pojedynczego słowa ustawić bit SREN. Dla odbioru ciągłego ustawić bit
CREN.
7. Flaga RCIF zostanie ustawiona, gdy dana zostanie odebrana i zostanie wygenerowane
przerwanie, pod warunkiem, że bit RCIE był ustawiony.
8. 9-ty bit danej należy odczytać z rejestru RCSTA (jeżeli używany) oraz określić, czy
nie wystąpił błąd podczas odbioru.
9. Odczytać 8-mio bitową daną z rejestru RCREG.
10. W przypadku wystąpienia błędu wyczyścić bit CREN.
11. Dla obsługi przerwań upewnić się, że bity GIE i PEIE (bity 7 i 6) w rejestrze INTCON
są ustawione.
79
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 -00x
0000 -00x
RCREG
Rejestr układu odbiorczego USART
0000 0000
0000 0000
TXSTA
CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
TX9D
0000 -010
0000 –010
SPBRG
Rejestr generatora BRG
0000 0000
0000 0000
Tabela D10.6. Rejestry związane z odbiornikiem synchronicznym USART – tryb Master
Transmisja Synchroniczna - Slave
Synchroniczny tryb Slave różni się od trybu Master tym, że sygnał zegara jest
dostarczany zewnętrznie poprzez pin RC6/TX/CK (a nie wewnętrznie, jak w trybie Master).
Pozwala to urządzeniu na przesyłanie lub odbiór danych podczas przebywania w stanie
SLEEP. Tryb ten jest ustawiany przez wyzerowanie bitu CSRC (TXSTA<7>).
Układ nadajnika
Operacje w synchronicznych trybach Master i Slave przebiegają identyczne z
wyjątkiem stanu SLEEP.
Jeśli dwa słowa zostaną wpisane do TXREG i następnie wykonana zostanie instrukcja
SLEEP wówczas wykonają się następujące operacje:
a) Pierwsze słowo zostanie natychmiast przeniesione do rejestru TSR i wysłane.
b) Drugie słowo pozostanie w rejestrze TXREG.
c) Flaga TXIF nie zostanie ustawiona.
d) Kiedy pierwsze słowo zostanie wysłane przez przesuwny rejestr TSR, rejestr TXREG
przeniesie drugie słowo do rejestru TSR i flaga TXIF zostanie ustawiona.
e) Jeśli bit TXIE jest ustawiony, przerwanie „obudzi” układ ze stanu SLEEP i jeżeli
przerwania są globalnie odblokowane, program przejdzie do wykonywania instrukcji
umieszczonych pod wektorem przerwania.
Aby ustawić transmisję synchroniczną w trybie Slave należy:
1. Ustawić bity SYNC i SPEN i wyzerować bit CSRC – uaktywni to synchroniczny port
szeregowy w trybie Slave.
2. Wyzerować bity CREN i SREN.
3. Jeśli przerwania są wykorzystywane, ustawić bit TXIE.
4. Jeśli wybrana została transmisja 9-bitowa, ustawić bit TX9.
5. Ustawić bit TXEN zezwalający na nadawanie.
6. Jeśli została wybrana transmisja 9-bitowa, dziewiąty bit powinien być wpisany do bitu
TX9D.
7. Rozpoczęcie transmisji następuje poprzez wpisanie danej do rejestru TXREG.
8. Jeśli przerwania są używane, upewnić się, że bity GIE i PEIE (bity 6 i 7) w rejestrze
INTCON są ustawione.
80
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 -00x
0000 -00x
TXREG
Rejestr układu transmisji USART
0000 0000
0000 0000
TXSTA
CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
TX9D
0000 -010
0000 –010
SPBRG
Rejestr generatora BRG
0000 0000
0000 0000
Tabela D10.7.. Rejestry związane z nadajnikiem synchronicznym USART – tryb Slave
Układ odbiornika
Jeżeli przed wykonaniem instrukcji SLEEP został ustawiony bit CREN zezwalający
na odbiór, wówczas dana może zostać odebrana podczas przebywania w stanie SLEEP. Po
odebraniu słowa, rejestr RSR prześle daną do rejestru RCREG i jeśli bit zezwolenia RCIE
jest ustawiony, wygenerowane przerwanie „obudzi” układ ze stanu SLEEP.
Aby ustawić odbiór synchroniczny w trybie Slave należy:
1. Ustawić bity SYNC i SPEN i wyzerować bit CSRC – uaktywni to synchroniczny port
szeregowy w trybie Slave.
2. Jeśli przerwania są wykorzystywane, ustawić bit RCIE.
3. Jeśli wybrana została transmisja 9-bitowa, ustawić bit RX9.
4. Ustaw bit CREN zezwalający na odbiór.
5. Gdy odbiór zostanie zakończony, flaga RCIF zostanie ustawiona. Jeśli bit RCIE został
ustawiony, to wygenerowane zostanie przerwanie.
6. Odczytaj rejestr RCSTA w celu odczytania dziewiątego bitu i sprawdzenia, czy
podczas transmisji nie pojawił się błąd.
7. Odczytaj odebraną 8-bitowa daną znajdującą się w rejestrze RCREG.
8. Jeżeli pojawił się błąd, wyzeruj bit CREN.
9. Jeśli przerwania są używane, upewnij się, że bity GIE i PEIE (bity 7 i 6) w rejestrze
INTCON są ustawione.
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
RCSTA
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
0000 -00x
0000 -00x
RCREG
Rejestr układu odbioru USART
0000 0000
0000 0000
TXSTA
CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
TX9D
0000 -010
0000 –010
SPBRG
Rejestr generatora BRG
0000 0000
0000 0000
Tabela D10.8.. Rejestry związane z odbiornikiem asynchronicznym USART – tryb Slave
81
12 Moduł 10-bitowego przetwornika analogowo-cyforwego
Moduł przetwornika analogowo–cyfrowego mikrokontrolera PIC18F452 posiada
osiem wejść analogowych (AN0:AN7).
Moduł przetwornika A/D posiada cztery rejestry:
•
ADRESH rejestr wyniku przetwarzania – starszy bajt,
•
ADRESL rejestr wyniku przetwarzania – młodszy bajt,
•
ADCON0 rejestr kontrolny 0,
•
ADCON1 rejestr kontrolny 1.
Rejestr ADCON0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
U-0
R/W-0
ADCS1
ADCS0
CHS2
CHS1
CHS0
GO/~DONE
-
ADON
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7-6
ADCS1:ADCS0:
bit wyboru zegara przetwornika A/D:
ADCON1
<ADCS2>
ADCON0
<ADCS1:ADCS0>
Pr
ę
dko
ść
konwersji
0
00
Fosc/2
0
01
Fosc/8
0
10
Fosc/32
0
11
FRC wewn
ę
trzny oscylator RC
1
00
Fosc/4
1
01
Fosc/16
1
10
Fosc/64
1
11
FRC wewn
ę
trzny oscylator RC
bit 5-3
CHS2:CHS0:
bity wyboru kanału analogowego:
000 = kanał 0 (RA0/AN0),
001 = kanał 1 (RA1/AN1),
010 = kanał 2 (RA2/AN2),
011 = kanał 3 (RA3/AN3),
100 = kanał 4 (RA5/AN4),
101 = kanał 5 (RE0/AN5),
110 = kanał 6 (RE1/AN6),
111 = kanał 7 (RE2/AN7),
bit 2
GO/~DONE:
bit statusu konwersji:
Jeżeli ADON=1:
1 = trwa konwersja (ustawiając ten bit rozpoczyna się konwersję, który jest
automatycznie zerowany sprzętowo, gdy zakończy się proces konwersji),
0 = układ nie jest w trakcie konwersji,
bit 1
bit niezaimplementowany,
bit 0
ADON:
uaktywnienie modułu przetwornika A/D:
1 = przetwornik jest aktywny,
0 = przetwornik jest wyłączony i nie pobiera prądu,
82
Rejestr ADCON1
R/W-0
R/W-0
U-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
ADFM
ADCS2
-
-
PCFG3
PCFG2
PCFG1 PCFG0
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7
ADFM:
bit wyboru formatu wyniku przetwarzania,
1 = justowanie w prawo. 6 najbardziej znaczących bitów ADRESH czytane
jest jako ‘0’,
0 = justowanie w lewo. 6 najmniej znaczących bitów ADRESL czytane jest
jako ‘0’.
bit 6
ADCS2:
bit wyboru zegara przetwornika A/D:
ADCON1
<ADCS2>
ADCON0
<ADCS1:ADCS0>
Pr
ę
dko
ść
konwersji
0
00
Fosc/2
0
01
Fosc/8
0
10
Fosc/32
0
11
FRC wewn
ę
trzny oscylator RC
1
00
Fosc/4
1
01
Fosc/16
1
10
Fosc/64
1
11
FRC wewn
ę
trzny oscylator RC
bit 5-4
bity niezaimplementowane,
bit 3-0
PCFG3:PCFG0: b
ity odpowiedzialne za konfigurację linii portu
przetwornika A/D:
PCFG
<3:0>
AN7
AN6
AN5
AN4
AN3
AN2
AN1
AN0
V
REF+
V
REF-
C/R
0000
A
A
A
A
A
A
A
A
VDD
VSS
8 / 0
0001
A
A
A
A
V
REF+
A
A
A
AN3
VSS
7 / 1
0010
C
C
C
A
A
A
A
A
VDD
VSS
5 / 0
0011
C
C
C
A
V
REF+
A
A
A
AN3
VSS
4 / 1
0100
C
C
C
C
A
C
A
A
VDD
VSS
3 / 0
0101
C
C
C
C
V
REF+
C
A
A
AN3
VSS
2 / 1
011x
C
C
C
C
C
C
C
C
-
VSS
0 / 0
1000
A
A
A
A
V
REF+
V
REF-
A
A
AN3
AN2
6 / 2
1001
C
C
A
A
A
A
A
A
VDD
VSS
6 / 0
1010
C
C
A
A
V
REF+
A
A
A
AN3
VSS
5 / 1
1011
C
C
A
A
V
REF+
V
REF-
A
A
AN3
AN2
4 / 2
1100
C
C
C
A
V
REF+
V
REF-
A
A
AN3
AN2
3 / 2
1101
C
C
C
C
V
REF+
V
REF-
A
A
AN3
AN2
2 / 2
1110
C
C
C
C
C
C
C
A
VDD
VSS
1 / 0
1111
C
C
C
C
V
REF+
V
REF-
C
A
AN3
AN2
1 / 2
A = wej
ś
cie analogowe C = wej
ś
cie/wyj
ś
cie cyfrowe
1: Kolumna ta zwiera liczb
ę
kanałów analogowych dost
ę
pnych jako wej
ś
cia przetwornika A/D i liczb
ę
kanałów analogowych dost
ę
pnych jako wej
ś
cia napi
ę
cia referencyjnego.
83
Rejestr ADCON0 kontroluje pracę przetwornika A/D, natomiast Rejestr ADCON1
konfiguruje funkcje poszczególnych pinów portu. Piny portu mogą pełnić rolę wejść
analogowych (RA3 może również być wykorzystany jako wejście napięcia referencyjnego)
lub być liniami cyfrowymi wejścia/wyjścia.
Rys. 11.1. Schemat blokowy przetwornika A/C
Napięcie referencyjne (dodatnie lub ujemne) wybierane jest programowo. Napięcie
referencyjne może również być podłączone do zewnętrznych pinów RA3/AN3/Vref+ i
RA2/AN2/Vref-.
Przetwornik A/C ma możliwość pracy podczas trybu uśpienia SLEEP. Aby był to
możliwe, sygnał zegarowy musi pochodzić z wewnętrznego generatora RC.
Rejestry ADRESH i ADRESL zawierają 10-bitowy wynik konwersji analogowo–
cyfrowej. Kiedy zakończy się konwersja wynik jest przesyłany do tej pary rejestrów, bit
GO/~DONE (ADCON0<2>) jest zerowany i flaga przerwania od przetwornika A/D jest
ustawiana.
Po skonfigurowaniu przetwornika A/D należy wybrać kanał przetwarzania. Linie
wejść analogowych muszą zostać odpowiednio ustawione jako wejścia w rejestrach
kierunkowych TRIS portów A i E.
84
Aby dokonać konwersji analogowo-cyfrowej, należy wykonać następujące czynności:
1. Skonfiguruj moduł przetwornika A/D:
•
Skonfiguruj wejścia analogowe/napięcie referencyjne i cyfrowe we/wy
(ADCON1).
•
Wybierz kanał przetwornika A/D (ADCON0).
•
Wybierz zegar przetwornika A/D (ADCON0).
•
Włącz moduł przetwornika A/D (ADCON0).
2. Skonfiguruj przerwanie przetwornika A/D (jeśli potrzebne):
•
Wyzeruj bit ADIF.
•
Ustaw bit ADIE.
•
Ustaw bit GIE.
•
Ustaw bit PEIE.
3. Odczekaj czas akwizycji.
4. Rozpocznij konwersję ustawiając bit GO/~DONE (ADCON0).
5. Odczekaj na zakończenie konwersji przez sprawdzanie:
•
czy wyzerowany został bit GO/~DONE (gdy przerwania są zablokowane),
•
oczekiwanie na przerwanie z przetwornika A/D,
6. Odczytaj parę rejestrów z wynikiem przetwarzania (ADRESH:ADRESL), wyzeruj bit
ADIF – jeśli jest to wymagane.
7. Aby dokonać następnej konwersji przejdź do kroku 1 lub 2 w zależności od potrzeb.
Przed rozpoczęciem kolejnej konwersji należy odczekać czas równy co najmniej 2T
AD
(T
AD
– czas konwersji dla jednego bitu).
Wymagania związane z przetwarzaniem A/C
Aby przetwornik A/C osiągał swoją typową dokładność, kondensator układu
próbkująco-pamiętającego (C
HOLD
) musi mieć możliwość pełnego naładowania do poziomu
napięcia wejściowego. Model analogowego wejścia pokazany jest na Rys.33. Impedancja
ź
ródła (Rs) i impedancja wewnętrznego klucza próbkującego (Rss) bezpośrednio wpływają na
czas naładowania kondensatora C
HOLD
. Impedancja klucza (Rss) zmienia się wraz z napięciem
zasilania (VDD). Maksymalna rekomendowana impedancja dla źródła analogowego
wynosi 2.5k
Ω
Ω
Ω
Ω
.
Rys. 11.2. Model wejścia analogowego
85
Aby obliczyć minimalny czas akwizycji, należy się posłużyć następującym równaniem:
T
ACQ
= T
AMP
+ T
C
+ T
COFF
= 2
µµµµ
s + T
C
+[(Temperatura - 25
°°°°
C)(0.05
µµµµ
s /
°°°°
C)]
T
C
= - C
HOLD
(R
IC
+ R
SS
+ R
S
) ln(1/2048)
= - 120pF (1k
Ω
Ω
Ω
Ω
+ 7k
Ω
Ω
Ω
Ω
+ 2.5k
Ω
Ω
Ω
Ω
) ln(0.0004883)
= - 120pF(10.5k
Ω
Ω
Ω
Ω
)
ln(0.0004883)
= - 1.26
µµµµ
s (- 7.6246)
= 9.61
µµµµ
s
T
ACQ
= 2
µµµµ
s+9.61
µµµµ
s +[(50
°°°°
C- 25
°°°°
C)(0.05
µµµµ
s /
°°°°
C)]
= 11.61
µµµµ
s + 1.25
µµµµ
s
= 12.86
µµµµ
s
T
AMP
= czas ustalenia si
ę
czasu na wej
ś
ciu wzmacniacza
T
C
= czas przeładowania pojemno
ś
ci w układzie próbkuj
ą
co – pami
ę
taj
ą
cym
T
COEFF
= czas wynikaj
ą
cy z pracy w okre
ś
lonej temperaturze
Przykład D11.1 Obliczanie minimalnego czasu akwizycji
Przykład został obliczony przy następujących założeniach:
•
C
HOLD
= 120pf,
•
R
S
= 2.5k
Ω
,
•
bł
ą
d konwersji
≤
½ LSB,
•
Vdd = 5V
→
R
SS
= 7k
Ω
,
•
Temperatura = 50
°
C
Wybór zegara do przetwarzania A/C
Czas przetwarzania jednego bitu zdefiniowany jest jako T
AD
. Przetwarzanie 10-bitowe
wymaga minimum czasu równego 12 T
AD
. Źródło zegara dla konwersji jest wybierane
programowo. Istnieje siedem możliwości do wyboru dla T
AD
:
•
2TOSC,
•
4TOSC,
•
8TOSC,
•
16TOSC,
•
32TOSC,
•
64TOSC,
•
wewnętrzny oscylator RC (2-6
µ
s).
Dla przetwarzania analogowo–cyfrowego zegar przetwarzania A/D musi być tak
wybrany, aby zapewnić minimalny czas T
AD
równy 1,6
µ
s.
86
Ź
ródło sygnału zegara modułu A/D (T
AD
)
Maksymalna Cz
ę
stotliwo
ść
Układu
Opcja
ADCS1:ADCS0
PIC18FXX2
PIC18LFXX2
2 T
OSC
000
1.25 MHz
666kHz
4 T
OSC
100
2.5 MHz
1.33 MHz
8 T
OSC
001
5 MHz
2.67 MHz
16 T
OSC
101
10 MHz
5.33 MHz
32 T
OSC
010
20 MHz
10.67 MHz
64 T
OSC
110
40 MHz
21.33 MHz
RC
011
-
-
Tabela D11.1 Częstotliwości pracy przetwornika A/C
Konwersja A/C
Wyzerowanie bitu GO/~DONE podczas przetwarzania spowoduje przerwanie
konwersji. Para rejestrów ADRESH:ADRESL nie zostanie uaktualniona nowymi danymi, ale
będzie zawierać dane z ostatniej konwersji (lub wartość ostatnio zapisaną do rejestrów
ADRESH:ADRESL). Po tym, jak przetwarzanie zostało przerwane, należy odczekać czas
2TAD przed rozpoczęciem kolejnego przetwarzania. Po tym czasie przetwarzanie na
wybranym kanale jest automatycznie rozpoczęte.
Bit GO/~DONE nie powinien być ustawiany w tej samej instrukcji, która uaktywnia
(włącza) przetwornik A/D.
Rys. 11.3 Cykle konwersji A/C
W rejestrach ADRESH:ADRESL zapisywany jest 10–bitowy wynik przetwarzania
A/D po zakończeniu konwersji. Para rejestrów ma wielkość 16 bitów. Moduł przetwornika
daje możliwość justowania 10-bitowego wyniku w 16-bitowym obszarze. Bit ADFM
kontroluje justowanie. Rysunek D11.6 pokazuje, w jaki sposób wykonywane jest justowanie.
Bity dodatkowe są zapisywane jako ‘0’. Kiedy moduł przetwornika jest nieaktywny, rejestry
te mogą być używane jako dwa 8-bitowe rejestry ogólnego przeznaczenia.
87
Rys. 11.6. Justowanie wyniku przetwarzania A/C
Wyzwalanie przetwornika A/C od modułu CCP2
Przetwarzanie A/C może być rozpoczęte poprzez zdarzenie specjalne od modułu
CCP2. Wymaga to, aby bity CCP2M3:CCP2M0 rejestru CCP2CON<3:0> = 1011, oraz aby
przetwornik A/C był odblokowany ADON=1. Kiedy zdarzenie wystąpi bit GO/~DONE
zostanie ustawiony rozpoczynając konwersję A/C, zerując tym samym stan licznika TMIER1
(lub TIMER3).
Jeżeli moduł A/C nie jest odblokowany ADON=0, wyzwolenie przetwornika A/C
zdarzeniem specjalnym zostanie zignorowane, natomiast zerowanie licznika TIMER1 (lub
TIMER2) będzie prawidłowo realizowane.
Nazwa
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Stany
po:
POR,
BOR
Stany po
pozostały
ch
RESET-
ach
INTCON
GIE/
GIEH
PEIE/
GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
RBIF
0000 000x
0000 000u
PIR1
PSPIF
ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
TMR1IF
0000 0000
0000 0000
PIE1
PSPIE
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE
TMR1IE
0000 0000
0000 0000
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
0000 0000
0000 0000
PIR2
-
-
-
EEIF
BCLIF
LVDIF
TMR3IF
CCP2IF
- - -0 0000
- - -0 0000
PIE2
-
-
-
EEIE
BCLIE
LVDIE
TMR3IE
CCP2IE
- - -0 0000
- - -0 0000
IPR2
-
-
-
EEIP
BCLIP
LVDIP
TMR3IP
CCP2IP
- - -1 1111
- - -1 0000
ADRESH
Rejestr wyniku przetwarzani A/D – starszy bajt
xxxx xxxx
uuuu uuuu
ADRESL
Rejestr wyniku przetwarzani A/D – młodszy bajt
xxxx xxxx
uuuu uuuu
ADCON0
ADCS1
ADCS0
CHS2
CHS1
CHS0
GO/
~DONE
-
ADON
0000 00-0
0000 00-0
ADCON1
ADFM
ADCS2
-
-
PCFG3
PCFG2 PCFG1
PCFG0
0000 –000
0000 -000
PORTA
-
RA6
RA5
RA4
RA3
RA2
RA1
RA0
--0x 0000
--0u 0000
TRISA
-
Rejestr kierunkowy PORTA
--11 1111
--11 1111
PORTE
-
-
-
-
-
RE2
RE1
RE0
---- -000
---- -000
LATE
-
-
-
-
-
LATE2
LATE1
LATE0
---- -xxx
---- -uuu
TRISE
IBF
OBF
IBOV
PSP
MODE
-
Rejestr kierunku PORTE
0000 -111
0000 -111
Tabela D11.2. Rejestry związane z modułem przetwornika A/C
88
13 Detekcja zaniku napięcia LVD (Low Voltage Detect)
W wielu aplikacjach istnieje potrzeba określenia faktu spadku napięcia zasilania.
Kontrolę taką umożliwia moduł LVD (Low Voltage Detect). Jest to programowalny obwód, w
którym określa się poziom napięcia poniżej którego nastąpi ustawienie flagi przerwania.
Moduł ten jest kontrolowany programowo.
Rys. 12.1. Sposób działania modułu LVD
Gdy napięcie osiągnie poziom VA – moduł LVD ustawi flagę przerwania.
Realizowana aplikacja ma jeszcze czas na dokończenie zaczętych operacji, zanim napięcie
zasilania spadnie poniżej wartości umożliwiającej prawidłową pracę systemu - VB.
Rys. 12.2. Schemat blokowy układu LVD
Istnieje możliwość podłączenia zewnętrznego napięcia odniesienia do modułu LVD.
Tryb ten jest dostępny przy ustawieniu bitów LVDL3:LVDL0 = 1111. Zewnętrzne napięcie
podłączane jest do pinu LVDIN. Umożliwia to skonfigurowanie LVD na dowolne napięcie.
89
Rys. 12.3. Moduł LVD z zewnętrznym wejściem
Rejestr LVDCON
(Rejestr LVDCON jest rejestrem kontrolnym modułu LVD)
U-0
U-0
R-0
R/W-0
R/W-0
R/W-1
R/W-0
R/W-1
-
-
IRVST
LVDEN
LVDL3
LVDL2
LVDL1
LVDL0
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
bit 7-6
bity niezaimplementowane,
bit 5
IRVST:
flaga stabilności wewnętrznego napięcia:
1 = sygnalizuje, że moduł LVD wygeneruje przerwanie przy ustawionym
zakresie napięcie,
0 = sygnalizuje, że moduł LVD nie wygeneruje przerwania przy ustawionym
zakresie napięcia, dodatkowo przerwanie od LVD nie powinno być
odblokowane,
bit 4
LVDEN:
bit zasilenia modułu LVD:
1 = odblokowanie modułu LVD, zasilenie obwodu LVD,
0 = zablokowanie modułu LVD, odłączenie obwodu zasilania modułu LVD,
bit 3-0
LVDL3: LVDL0:
bity zakresów detekcji napięcia:
1111 = używane zewnętrzne wejście analogowe (pin LVDIN),
1110 = 4.5V – 4.77V,
1101 = 4.2V – 4.45V,
1011 = 4.0V – 4.24V,
1011 = 3.8V – 4.03V,
1001 = 3.6V – 3.82V,
1010 = 3.5V – 3.71V,
1000 = 3.3V – 3.50V,
0111 = 3.0V – 3.18V,
0110 = 2.8V – 2.97V,
0101 = 2.7V – 2.86V,
0100 = 2.5V – 2.65V,
0011 = 2.4V – 2.54V,
0010 = 2.2V – 2.33V,
0001 = 2.0V – 2.12V,
0000 = zarezerwowowane.