background image

4.3. Liczniki T0 i T1 

4.3.1. Opis liczników T0 i T1 

Liczniki T0 i T1, wraz z licznikiem T2 stanowią układ czasowo-licznikowy mikrokontrolera 

SAB

  80C537.  Mogą  pracować  one  zarówno  jako  liczniki  zliczające  impulsy  zewnętrzne

doprowadzone  do  wejść  układu  (P3.4  dla  licznika  T0  i  P3.5  dla  licznika  T1),  jak  i  czasomierze 
zliczaj
ące  wewnętrzne  impulsy  zegarowe

.  Liczniki  te  mogą  pracować  w  jednym  z  czterech, 

indywidualnie ustawianych, trybach pracy. 

Do programowego sterowania pracą liczników T0 i T1 służą dwa rejestry sterujące:  TMOD 

(adresowany bajtowo) i TCON (adresowany bajtowo i bitowo). Rejestr TMOD służy do ustawiania 
trybu pracy i funkcji realizowanej przez wybrany licznik. Znaczenie bitów sterujących przedstawiono 
poniżej: 

 
Rejestr TMOD 

 

 

 

 

 

 

adres 089h 

GATE 

C/

T

 

M1 

M0 

GATE 

C/

T

 

M1 

M0 

 

 

Licznik T1 

 

 

 

Licznik T0 

•  M0, M1 – ustawienie jednego z czterech trybów pracy, przy czym: 

M0=0, M1=0 – tryb 0 
M0=1, M1=0 – tryb 1 
M0=0, M1=1 – tryb2 
M0=1, M1=1 – tryb 3 

•  C/

T

ustawienie realizowanej funkcji: 

C/

T

=0 – licznik pracuje jako czasomierz, 

C/

T

=1 – licznik zlicza impulsy zewnętrzne. 

•  GATE – bramkowanie zliczania sygnałem zewnętrznym z wejścia 

0

INT

 lub 

1

INT

 (odpowiednio 

dla każdego z liczników). 

 
W  rejestrze  TCON  znaczenie  poszczególnych  bitów  sterujących  i  kontrolnych  jest 

następujące: 

 

Rejestr TCON 

 

 

 

 

 

 

adres 088h 

TF1 

TR1 

TF0 

TR0 

IE1 

IT1 

IE0 

IT0 

 

•  TF1, TF0 – znaczniki przepełnienia liczników, 
•  TR1, TR0 – bity sterujące: 

TR1=0 − licznik T1 zatrzymany, 
TR0=0 − licznik T0 zatrzymany, 
TR1=1 − licznik T1 pracuje, 
TR0=1 − licznik T0 pracuje. 

•  IE1 – znacznik zgłoszenia przerwania zewnętrznego 

1

INT

, 

•  IT1 – ustawienie sposobu zgłoszenia przerwania 

1

INT

: 

IT1=0 − zgłoszenie przerwania poziomem niskim sygnału, 
IT1=1 − zgłoszenie przerwania poziomem wysokim sygnału. 

•  IE0 – znacznik zgłoszenia przerwania zewnętrznego 

0

INT

: 

IT0=0 − zgłoszenie przerwania poziomem niskim sygnału, 
IT0=1 − zgłoszenie przerwania poziomem wysokim sygnału. 

  Uruchomienie  licznika  Ti  następuje  po  wpisaniu  jedynki  logicznej  do  bitu  TRi  w rejestrze 

TCON

.  Raz  uruchomiony  może  być  zatrzymany  w wyniku  wpisania  zera  logicznego  do  bitu  Tri.  

Jeśli  w  rejestrze  TMOD  bit  GATE  ma  wartość  jedynki  logicznej,  to  możliwe  jest  zewnętrzne 

background image

sterowanie zliczaniem – licznik pracuje tylko wtedy, gdy sygnał 

INTi

=1. 

Jeśli  liczniki  pracują  jako  czasomierze  (zliczają  impulsy  wewnętrzne),  to  zawartość  licznika 

w każdym cyklu maszynowym zwiększana jest o 1. Jeśli natomiast liczniki realizują funkcję zliczania 
impulsów zewnętrznych, to odpowiednie wejście T0 lub T1 próbkowane jest w trakcie każdego cyklu 
maszynowego.  Jeśli  przy  dwóch  kolejno  po  sobie  następujących  próbkach  wykryta  zostanie  zmiana 
poziomu z 1 na 0, to w czasie następnego cyklu maszynowego zawartość licznika zwiększona zostanie 
o 1. Ponadto w tym trybie pracy spełnione muszą być następujące warunki: 
−  każdy stan logiczny zliczanych impulsów musi trwać przez co najmniej jeden cykl maszynowy, 
−  maksymalna  częstotliwość  zliczanych  impulsów  nie  może  być  większa  niż  f

osc

/24  (ponieważ  do 

wykrycia zmiany na wejściu potrzebne są dwa cykle maszynowe). 

Szesnastobitowe  liczniki  T0  i  T1  podzielone  są  na  dwa  ośmiobitowe  bajty  (mniej  i  bardziej 

znaczący) dostępne programowo jako rejestry specjalne: 
•  TH0 (adres 8Ch) – bardziej znaczący bajt licznika T0, 
•  TL0 (adres 8Ah) – mniej znaczący bajt licznika T0, 
•  TH1 (adres 8Dh) – bardziej znaczący bajt licznika T1, 
•  TL1 (adres 8Bh) – mniej znaczący bajt licznika T1. 
 

Każdy  z  liczników  może  pracować  w  jednym  z  czterech  trybów  pracy,  niezależnie  od 

realizowanej  funkcji.  W  trybach  0,  1  i  2  mogą  pracować  oba  liczniki  T0  i  T1,  natomiast  w  trybie  3 
licznik T1 nie pracuje.  

 

Tryb 0 i tryb 1 

 

W trybie 0 modyfikowanych jest tylko 13 bitów licznika: osiem bitów rejestru  THi (i=0,1) i 

bity  3–7  rejestru  TLi  (pięć  bardziej  znaczących).  Stan  bitów  0–2  rejestru  TLi  jest  nieokreślony  i 
powinien być ignorowany. Po uruchomieniu licznika impulsy zliczane są od wartości początkowej. Po 
przepełnieniu  licznika  (osiągnięciu  wartości  1FFFh+1)  zawartość  rejestru  jest  kasowana  i  zliczanie 
rozpoczyna się od nowa. W trybie 1 pracuje cały 16–bitowy licznik. W tym trybie pracy licznik może 
być wykorzystywany jako czasomierz, a także jako licznik impulsów zewnętrznych. Schemat blokowy 
liczników T0 i T1 pracujących w trybach 0 i 1 przedstawiono na rys. 4.7. 

 

 

Rys. 4.7. Schemat blokowy liczników T0 i T1 pracujących w trybach 0 i 1 

 

Tryb 2 

W tym trybie pracy licznik pracuje jako licznik 8-bitowy z autoładowaniem, przy czym rejestr 

TLi

  jest  rejestrem  zliczającym,  natomiast  w rejestrze  THi  zapisana  jest  wartość  początkowa,  która 

może być zmieniana programowo. W momencie przepełnienia licznika (osiągnięcia przez rejestr TLi 
wartości  FF+1)  następuje  autoładowanie  wartości  początkowej  i  ustawienie  znacznika  TFi.  Schemat 
blokowy liczników T0 i T1 pracujących w tym trybie przedstawiono na rys. 4.8. 

 

TL

i

      TH

i

12

÷

0

T

C/

=

1

T

C/

=

f

GEN

T

i

TR

i

GATE

INT

i

TF

i

przerwanie 
od licznika T

i

background image

 

Rys. 4.8. Schemat blokowy liczników T0 i T1 pracujących w trybie 2 

Tryb 3 

W trybie 3 licznik T1 nie pracuje. Poszczególne bajty licznika T0 (TH0 i TL0) pracują jako dwa 

niezależne  liczniki  8-bitowe.  Mniej  znaczący  bajt  licznika  TL0  może  pracować  zarówno  jako 
czasomierz, jak i licznik impulsów zewnętrznych z wejścia T0. W trybie 3 licznik TL0 jest sterowany 

tak jak licznik T0 w trybach 0 i 1 z wykorzystaniem bitów TR0GATEC/

T

,

 oraz tak jak licznik T0 

w  momencie  przepełnienia  ustawia  znacznik  przerwania  TF0.  Natomiast  bardziej  znaczący  bajt 
licznika  TH0  może  być  wykorzystany  jedynie  jako  czasomierz  zliczający  impulsy  wewnętrzne. 
Należy przy tym zaznaczyć, iż w tym trybie licznik TH0 jest sterowany bitem TR1, oraz w momencie 
przepełnienia ustawia znacznik przerwania TF1. Z tego względu, jeśli licznik T0 pracuje w trybie 3, 
to licznik T1 może pracować w pozostałych trybach pracy bez możliwości bramkowania jego wejścia 
i testowania znacznika przerwania. Tryb 3 pracy licznika T0 jest w praktyce rzadko stosowany, gdyż 
wtedy  licznik  T1  może  być  użyty  prawie  wyłącznie  do  ustalania  prędkości  transmisji  portu 
szeregowego. Schemat blokowy licznika T0 pracującego w 3 trybie przedstawiono na rys.4.9. 

 

 

 

Rys. 4.9. Schemat blokowy licznika T0 pracującego w trybie 3 

4.3.2. Przykład programowania liczników T0 i T1 

4.4. Moduł komparatorów CCU 

Moduł  komparatorów  CCU  mikrokontrolera  SAB80C537  jest  bardzo  rozbudowanym 

układem  wewnętrznym,  zaprojektowanym  do  pracy  w  cyfrowych  układach  generowania  i  zliczania 
impulsów, np. w układach generatorów MSI, układach pomiaru szerokości impulsów i częstotliwości. 

Moduł  CCU  składa  się  z dwóch  16–bitowych  liczników  z możliwością  autoładowania 

wartości  początkowej  (licznik  T2  i  timer  komparatorów)  oraz  z matrycy  13  komparatorów:    za  ich 
pomocą moduł moż kontrolować do 21 linii wyjściowych oraz zgłaszać 7 niezależnych przerwań. Do 

12

÷

0

T

C/

=

1

T

C/

=

f

GEN

T

i

TR

i

GATE

INT

i

TL

i

TH

i

TF

i

przerwanie 
od licznika T

i

wpis wartości
początkowej

12

÷

0

T

C/

=

1

T

C/

=

f

GEN

T0

TR0

GATE

INT0

TL0

TF0

zgłoszenie
przerwania

TH0

TF1

zgłoszenie
przerwania

TR1

background image

sterowania  pracą  modułu  używa  się  6  rejestrów  specjalnych,  związanych  z  poszczególnymi  blokami 
modułu. 

 
 

Tabela 4.3. Rejestry specjalne związane z modułem CCU 

Nazwa rejestru 

Adres 

T2CON 

0C8h 

CTCON 

0Eh 

CCEN 

0C1h 

CC4EN 

0C9h 

CMSEL 

0F7h 

CMNEN 

0F6h 

Schemat blokowy modułu CCU przedstawiono na rys.4.10. 

 

Rys.4.1. Schemat blokowy modułu komparatorów CCU 

Wszystkie  rejestry  CC1CC4  oraz  rej  estr  CRC  współpracują  wyłącznie  z  licznikim  T2

natomiast  każdy  z  rejestrów  CM0CM7  może  współpracować  zarówno  z  licznikiem  T2,  jak  i 
z szybkim licznikiem komparatorów. 

Z modułem CCU współpracują porty P5P4 oraz siedem linii portu P1. Poszczególne rejestry 

modułu  CCU  sterują  tylko  jednym  wyjściem  współpracującego  portu:  wyjątkiem  jest  rejestr  CC4
który  może  wysterować  do  9  linii  wyjściowych  równocześnie  (wyjście  portu  P1.4  oraz  wyjść  portu 
P5

). 

 

4.4.1. Licznik T2 

Licznik T2 jest jednym z najbardziej rozbudowanych układów wewnętrznych mikrokontrolera 

SAB 80C537

. Schemat blokowy licznika T2 przedstawiono na rys. 4.11. Szesnastobitowy licznik T2 

p

rz

e

rz

u

tn

ik

C

C

4

E

N

P

5

k

o

n

tr

o

le

p

o

rt

u

P

4

k

o

n

tr

o

le

p

o

rt

u

P

1

CM0
CM1
CM2
CM3
CM4
CM5
CM6
CM7

1

6

b

it

o

w

e

 k

o

m

p

a

ra

to

ry

CC4

CC3

CC2

CC1

CRC

p

re

s

c

a

le

r

Timer 2

f

clk max

=f

gen

/12

p

re

s

c

a

le

r

CCU

Timer

f

clk max 

=f

gen

/2

16–bit.

autoładowanie

  

w

e

w

n

ę

tr

z

n

a

 m

a

g

is

tr

a

la

 p

ro

c

e

s

o

ra

CTREL

background image

tworzą dwa 8−bitowe rejestry: bardziej znaczący TH2 i mniej znaczący TL2. Z obsługą licznika T2 
związane są linie portu P1, które w zależności od funkcji licznika mogą być wykorzystane jako: 
•  Linie P1.0P1.3

−  wyjścia impulsów o modulowanej szerokości sygnału (MSI), 
−  wejścia przerwań 

INT3

–INT6, 

•  Linie P5.0P5.7 oraz linia P1.4 (sterowane przez komparator CC4), 
•  Linia P1.5/T2EX

−  sprzętowe ustalenie momentu wpisu wartości początkowej do licznika T2

•  Linia P1.7/T2

−  wejście impulsów zewnętrznych, 
−  wejście bramkujące zliczanie impulsów wewnętrznych. 
Jeśli licznik T2 nie jest wykorzystywany w trybie modulacji szerokości impulsów, to linie portu 

P1

,  P4  oraz  P5  mogą  być  wykorzystywane  jako  standardowe  wejścia–wyjścia  cyfrowe,  dostępne 

programowo. 

Z  licznikiem  T2  związane  są  także  rejestry  komparatorów  CRC,CC1CC4,  w których 

przechowywane są wartości chwilowe (w trybie autoładowania w rejestrze CRC przechowywana jest 
wartość początkowa). Ponadto, po każdym przepełnieniu licznika T2, a także w momencie zrównania 
się  wartości  chwilowej  licznika  z wartością  wpisaną  do  komparatora  istnieje  możliwość 
wygenerowania przerwania. 

 

background image

 

R

y

s.4

.1

1

. S

ch

em

at

 b

lo

k

o

w

y

 li

cz

n

ik

a T

2

 

P

o

n

ej

 o

p

is

an

o

 p

o

sz

cz

eg

ó

ln

tr

y

b

y

 p

ra

cy

 li

cz

n

ik

T

2

: p

o

w

n

an

ia

, z

ap

am

ta

n

ia

 w

ar

to

ś
ci

 c

h

w

ilo

w

ej

 

i a

u

to

ła

d

o

w

an

ia

 w

ar

to

ś
ci

 p

o

cz

ą
tk

o

w

ej

 

Komparator 

CRC

CCH3/ CCL3

CCH2/ CCL2

P1.7/T2

f

GEN 

/12

f

we

TF2

EXF2

T2I1

T2I0

T2R1

T2R0

EXEN2

ET2

Przerwanie
od licznika T2

P1.3
INT6
CC3

P1.2
INT5
CC2

P1.1
INT4
CC1

T2CON

CCEN,

CC4EN

0

1

IxFR

IEX6

IEX5

IEX4

IEX3

0x

10

11

Przepełnienie

licznika

10

11

01

00

Porównanie  wartości 
chwilowej  licznika  T2 
i rejestrów CRC–CC4

INT4

INT5

INT6

Wpis stanu
licznika T2
do rejestrów 
CRC–CC4

Autoładowanie

P1.5/

T2EX

Licznik T2

CRCH/ CRCL

CCH1/ CCL1

Komparator 

CC1

Komparator 

CC2

Komparator 

CC3

TH2  TL2

CCH4/ CCL4

Komparator 

CC3

INT3

P1.0
INT3
CC0

P1.4, 
P5.0–P5.7
INT2
CC4

Przerwania 
wewnętrzne  od
komparatorów 
CRC–CC4
i zewnętrzne
INT2,INT3, 
INT4–INT6

INT2

IEX2

0

1

0

0

0

1

1

0

1

1

T2PS1

T2PS

8

4

2

=

background image

Tryby porównania (compare) 

W  czterech  niezależnych  komparatorach  porównywana  jest  wartość  rejestru    licznika  T2  z 

wartościami rejestrów CRCCC1CC4. Wynik porównania przedstawiony jest w postaci stanów linii 
portu  P1,  oraz  ustawienia  znaczników  przerwań  IEX2IEX6.  Linie  P1.0,  P1.1,  P1.2,  P1.3,  P1.4 
przyjmują  stan  jedynki  logicznej  w momencie  wystąpienia  równości  zawartości  rejestru  licznika  T2 
oraz  zawartości  rejestrów  CRC,  CC1CC4  (w  tym  samym  cyklu  maszynowym).  Zerowanie  bitu 
następuje po przepełnieniu rejestru licznika T2

Jednocześnie  w momencie  ustawienia  linii  portu  P1  generowane  są  przerwania  i ustawiane 

odpowiednie  znaczniki  przerwań  IEX2–IEX6.  W  momencie  zerowania  linii  portu  P1  po 
przepełnieniu  licznika  T2  ustawiany  jest  znacznik  przerwania  TF2.  Znaczniki  te  znajdują  się  w 
rejestrze  IRCON,  opisanym  w  rozdziale  4.6.  Zależności  czasowe  na  wyjściach  portu  P1.0–P1.4 
przedstawiono na rys. 4.12. 

 

stan licznika T2

wartość komparatora

CRC (lub CCx)

wartość początkowa

stan P1.x

0FFFFH+1

przerwanie

od komparatora

przerwanie

od przepełnienia

 

Rys. 4.12. Zależności czasowe na wyjściach portu P1 

Jeżeli  do  pracy  licznika  T2  wykorzystywany  jest  tryb  autoładowania,  to  do  porównania 

wartości  chwilowej  licznika  T2  zastosowane  mogą  być  tylko  rejestry:  CC1CC4,  ponieważ  w 
rejestrze CRC przechowywana jest wartość początkowa. Należy zauważyć, że procesor SAB80C537 
wyposażony jest w specjalny komparator CC4, który oprócz standardowych zastosowań porównania 
lub  przechwytywania  wartości  chwilowej  licznika  może  pracować  w  tzw.  trybie  pracy  równoległej 
(ang. concurrent compare). 

W  trybach  porównania  linie  portu  P1  mogą  być  sterowane  sprzętowo  lub  programowo,  przy 

czym ze względu na sposoby sterowania liniami portu P1 wyróżnia się dwa tryby porównania: 

 

•  tryb 0 porównania 

 

W trybie 0 porównania linie portu P1.0–P1.4 nadzorowane są tylko przez układy licznika T2 

i zmiana  stanu  tych  linii  nie  jest  możliwa  przez  programowy  wpis  dowolnych  wartości,  ponieważ 
wewnętrzna  szyna  danych  jest  zablokowana.  Właściwość  nadzorowania  linii  portu  P1.0–P1.4  przez 
licznik  T2  wykorzystywana  jest  do  generowania  na  tych  liniach  impulsów  o  modulowanym 
współczynniku wypełnienia. Oznacza to, że programowo można ustalić okres i czas trwania stanu zera 
i jedynki logicznej na odpowiednich liniach portu P1. Zatem do dyspozycji są cztery linie portu P1
którymi można sterować np. silniki prądu stałego i przemiennego.  

Z  opisu  trybu  0  porównania  wynika,  że  od  wpisu  do  rejestru  komparatora  CRC  zależy 

częstotliwość generowanych impulsów, natomiast wypełnienie regulowane jest wartością wpisaną do 
komparatora  CCx.  Należy  pamiętać,  że  minimalnej  (0h)  i maksymalnej  (0FFFFh)  wartości 
wpisywanej  do  rejestrów  CRC,  CC1–CC4  towarzyszą  na  wyjściach  portu  P1  impulsy  szpilkowe  o 
czasie  trwania  ½  cyklu  maszynowego.  Zjawisko  to  powoduje,  że  niemożliwe  jest  uzyskanie  zmiany 
wypełnienia  impulsu  w granicach  0–100%.  Dla  n−bitowego  rejestru  porównania  CCx  maksymalna 
wartość wypełnienia wynosi (1−½

n

)*100%. 

Zaprogramowany i uruchomiony licznik T2 pracuje autonomicznie, tzn. generuje impulsy na 

wyjściach portu P1 niezależnie od jednostki arytmetyczno−logicznej. Zatrzymanie pracy licznika jest 

background image

możliwe tylko sprzętowo poprzez reset mikrokontrolera linią 

RESET

 lub odłączenie zasilania. 

 

•  tryb 1 porównania 

W  trybie  1  porównania  zmiana  stanu  linii  portu  P1.0–P1.4  dokonywana  jest  programowo, 

przy czym dane wpisywane są do 4−bitowego pomocniczego bufora portu. Dane te są automatycznie 
przepisywane  do głównego bufora portu P1 w momencie wystąpienia równości zawartości  licznika i 
rejestru  CCx,  przy  czym  przepisywanie  z bufora  pomocniczego  do  głównego  dokonywane  jest 
sprzętowo. Informacja z bufora pomocniczego pojawia się na wyjściu bufora głównego tak długo, jak 
długo  wartość  chwilowa  licznika  równa  jest  zawartości  rejestru  CCx.  Nowa  wartość  może  zostać 
wpisana do portu P1 po ustąpieniu tej równości, w przeciwnym wypadku zmiany te nie są wzajemnie 
synchronizowane,  ponieważ  zmianie  ulega  stan  głównego  bufora  wyjściowego  portu.  Czas  trwania 
równości  wartości  licznika  i  rejestru  CCx  zależy  od  sposobu  taktowania  licznika  T2.  Jeżeli  licznik 
taktowany  jest  sygnałem  wewnętrznym,  to  stan  równości  trwa  1  lub  2  cykle  maszynowe,  jeśli 
natomiast licznik T2 sterowany jest sygnałem zewnętrznym, to stan ten może trwać przez wiele cykli 
maszynowych. 

 

Tryby zapamiętania wartości chwilowej (capture) 

Do  zapamiętania  wartości  chwilowej  licznika  T2  może  być  użyty  każdy  z rejestrów  CRC

CC1

CC4.  Operacja  ta  jest  realizowana  sprzętowo,  dzięki  czemu  trakcie  jej  wykonywania  nie 

następuje zatrzymanie zliczania. Licznik T2 może pracować w dwóch trybach zapamiętania wartości 
chwilowej: 

 

•  tryb 0 zapamiętania 

W  tym  trybie  moment  zapamiętania  wartości  chwilowej  licznika  wyznaczony  jest  sygnałem 

zewnętrznym. Wpisanie wartości chwilowej licznika T2 do odpowiedniego rejestru CRC,CC1–CC4 
oraz  wpisanie  jedynki  na  pozycję  odpowiedniego  znacznika  przerwania  IEX2–IEX6  spowodowane 
jest  aktywnym  zboczem  sygnałów 

2

INT

–INT6

.  Ze  względu  na  sposób  sterowania  sygnałami 

zewnętrznymi aktywnym zboczem może być: 
−  zbocze narastające dla wejść przerwań INT4–INT6 związanych z rejestrami CC1–CC3, 
−  zbocze  narastające  lub  opadające  dla  wejścia 

2

INT

  związanego  z rejestrem  CC4  oraz  INT3  

związanego z rejestrem CRC

Należy  pamiętać,  aby  do  bufora  wyjściowego  portu  P1  wpisana  była  wartość  jedynki 

logicznej,  w  przeciwnym  razie  niemożliwe  byłoby  określenie  momentu  pojawienia  się  aktywnego 
zbocza sygnału. 

 

•  tryb 1 zapamiętania 

W  trybie  1  zapamiętanie  wartości  chwilowej  licznika  T2  w  rejestrach  CRC,  CC1–CC4 

spowodowane  jest  wpisaniem  dowolnej  wartości  do  mniej  znaczących  rejestrów  CRCL,  CCL1–
CCL4

W tym trybie zapamiętania przerwania nie są wykorzystywane. 

 

Tryby autoładowania licznika T2 (reload) 

Autoładowanie  licznika  T2  oznacza  przepisanie  wartości  początkowej,  zawartej  w 

16−bitowym  rejestrze  CRC  do  rejestru  licznika  T2.  Rejestr  CRC  złożony  jest  z dwóch  8−bitowych 
rejestrów CRCL i CRCH, podobnie 16-bitowy rejestr licznika T2 tworzą dwa 8−bitowe rejestry TH2 
TL2. Wyróżnia się dwa tryby autoładowania: 

 

•  tryb 0 autoładowania 

background image

W  trybie  0  autoładowania  wpis  wartości  początkowej  z  rejestru  CRC  do  licznika  T2 

dokonywany  jest  wskutek  przepełnienia  licznika  T2,  czyli  osiągnięcia  przez  licznik  wartości 
0FFFFh+1. Przepełnienie licznika powoduje ustawienie flagi przerwania TF2 (znacznik ten przyjmuje 
wartość jedynki logicznej). 

•  tryb 1 autoładowania 

W  trybie  1  autoładowania  przepisanie  wartości  początkowej  z  rejestru  CRC  do  rejestru 

licznika  T2  dokonywane  jest  wskutek  wystąpienia  opadającego  zbocza  sygnału  T2EX  na  wejściu 
P1.5

. Jeśli znacznik EXEN2 w rejestrze IEN1 ma wartość jedynki logicznej, to również w tym trybie 

zostanie wygenerowane przerwanie. 

 

Sterowanie pracą licznika T2 

Sygnał  taktujący  licznik  T2  może  pochodzić  ze  źródła  zewnętrznego  lub  wewnętrznego. 

Programowo  ustala  się  częstotliwość  i  sposób  doprowadzenia  sygnału  wewnętrznego  lub  sygnału 
zewnętrznego przez ustawienie 8 bit portu P1 (P1.7). 

Niezależnie  od  wybranego  trybu  pracy  licznika  T2,  po  każdym  jego  przepełnieniu,  tzn.  po 

osiągnięciu  stanu  0FFFFh+1,  jest  generowany  sygnał  przerwania  wewnętrznego.  Jest  to 
sygnalizowane  wpisaniem  jedynki  logicznej  na  pozycji  znacznika  TF2  (wektor  przerwania  02Bh)  w 
rejestrze  IRCON  (patrz  rozdział  4.6).  Znacznik  ten  jest  kasowany  programowo,  ponieważ  to  samo 
przerwanie  może  być  również  wywołane  zewnętrznym  sygnałem  doprowadzonym  do  wejścia 
P1.5/T2EX

, przy czym ustawiany jest wówczas znacznik EXF2 (wektor przerwania 02Bh).  

Z konfiguracją licznika T2 związane są rejestry specjalne SFR, przedstawione w tabeli 4.4. 
 
Tabela 4.4. Rejestry SFR związane z licznikiem T2 

Rejestr 

Adres 

Funkcja 

TH2 

0CDh 

8 bardziej znaczących bitów licznika T2 

TL2 

0CCh 

8 mniej znaczących bitów licznika T2 

T2CON 

0C8h 

Programowanie trybów pracy, źródła i częstotliwości 
taktowania licznika oraz startu licznika 

CCEN 

0C1h 

Wybór trybów pracy rejestrów CRC, CC1, CC2, CC3 

CC4EN 

0C9h 

Wybór trybów pracy rejestru CC4 

CTCON 

0E1h 

Wyłącznie w wersji mikrokontrolera oznaczonej symbolem 
BB: załączenie dodatkowego dzielnika sygnału taktującego 
licznik (bit CTCON.7 – T2PS1) 

CRCH 

0CBh 

8 bardziej znaczących bitów rejestru CRC 

CRCL 

0CAh 

8 mniej znaczących bitów rejestru CRC 

CCH1 

0C3h 

8 bardziej znaczących bitów rejestru CC1 

CCL1 

0C2h 

8 mniej znaczących bitów rejestru CC1 

CCH2 

0C5h 

8 bardziej znaczących bitów rejestru CC2 

CCL2   

0C4h 

8 mniej znaczących bitów rejestru CC2 

CCH3  

0C7h 

8 bardziej znaczących bitów rejestru CC3 

CCL3   

0C6h 

8 mniej znaczących bitów rejestru CC3 

CCH4 

0CFh 

8 bardziej znaczących bitów rejestru CC4 

CCL4 

0CEh 

8 mniej znaczących bitów rejestru CC4 

IRCON  

0C0h 

Rejestr  znaczników  obsługujących  przerwania  zewnętrzne 
lub od komparatorów 

 
Programowanie  pracy  licznika  T2  dokonywane  jest  w  rejestrze  T2CON  (oraz  CTCON  w 

wersji  mikrokontrolera  oznaczonej  symbolem  BB)  przez  odpowiednie  ustawienie  poszczególnych 
bitów,  przy  czym  wszystkie  znaczniki  po  wyzerowaniu  mikrokontrolera  również  przyjmują  wartości 
zerowe. 

 

background image

Rejestr T2CON 

 

 

 

 

 

adres 0C8h 

T2PS 

I3FR 

I2FR 

T2R1 

T2R0 

T2CM 

T2I1 

T2I0 

 

T2PS

 − włączenie dodatkowego dzielnika wstępnego dla wewnętrznego źródła taktowania: 

T2PS = 0 − taktowanie licznika sygnałem f

osc

 /12, 

T2PS = 1 − taktowanie licznika sygnałem f

osc

 /24. 

Dla  wersji  specjalnej  mikrokontrolera  oznaczonej  symbolem  BB  możliwe  jest 

włączenie dodatkowego dzielnika poprzez ustawienie bitu T2PS1 (CTCON.7): 

 

T2PS1=1, T2PS=0 – taktowanie licznika sygnałem f

osc

 /48, 

 

T2PS1=1, T2PS=1 – taktowanie licznika sygnałem f

osc

 /96. 

Bit T2PS1 musi być równy zero, aby T2 mógł pracować w trybie licznika. 

I3FR

  −  wybór  aktywnego  zbocza  sygnału  przerwania  zewnętrznego  INT#3,  wyjścia  komparatora 

CRC, wpisu wartości początkowej: 
 

I3FR = 0 − zbocze opadające, 
I3FR = 1 − zbocze narastające. 

I2FR

 – w programowaniu licznika T2 bit nie używany. 

T2R1

T2R0 − wybór trybu autoładowania licznika: 

T2R1 = 0, T2R1 = x − zablokowane funkcje autoładowania, 
T2R1 = 1, T2R0 = 0 − tryb 0 autoładowania, 
T2R1 =  1, T2R0 = 1 − tryb 1 autoładowania. 

T2CM

 − wybór trybu porównania: 

T2CM = 0 − tryb 0, 
T2CM = 1 − tryb 1. 

T2I1

T2I0 − wybór źródła sygnału taktującego: 

 

T2I1 = 0, T2I0 = 0 − zatrzymanie licznika, 
T2I1 = 0, T2I0 = 1 − taktowanie sygnałem wewnętrznym f

osc

/12 lub f

osc

/24, 

T2I1 = 1, T2I0 = 0 − taktowanie sygnałem zewnętrznym, 
T2I1  =  1,  T2I0  =  1  −  bramkowanie  wewnętrznego  sygnału  taktującego  (blokowanie 

licznika niskim poziomem sygnału doprowadzonego do wejścia 
P1.7). 

Programowanie trybów pracy rejestrów CRC,CC1–CC3 jest dokonywane w rejestrze CCEN

Należy  zwrócić  uwagę,  że  w  odróżnieniu  od  trybu  porównania  możliwe  jest  jednoczesne  wybranie 
trybu 0 wpisu wartości początkowej licznika T2 dla jednych rejestrów CCRCC1–CC3 i trybu 1 dla 

pozostałych. Ponadto istotne jest, że przy zerowaniu mikrokontrolera linią 

RESET

 zawartość rejestru 

CCEN

  również  jest  zerowana.  Przedstawiono  zawartość  rejestru  CCEN  ,  a  przeznaczenie 

poszczególnych znaczników rejestru opisano w tabeli 4.5.

 

 

Rejestr CCEN 

 

 

 

 

 

 

adres 0C1h 

COCAH3 

COCAL

COCAH2  COCAL2  COCAH1 

COCAL

COCAH0  COCAL0 

 

Tabela 4.5. Sterowanie komparatorami 

Rejestry 

Znaczniki 

Przeznaczenie 

CRC 

CC1 
CC2 
CC3 

COCAH0 
COCAH1 
COCAH2 
COCAH3 

 

 
 

COCAL0 
COCAL1 
COCAL2 
COCAL3 

 

 
 

 
 
 
 
 

zablokowany tryb porównania / wpisu 

wartości początkowej 

 

tryb 0 zapamiętania 

background image

 

 
 

 

 
 

 

odblokowany tryb porównania / wpisu 

wartości początkowej 

 

tryb 1 zapamiętania 

 

Praca równoległa komparatora CC4 (concurrent compare) 

Praca  równoległa  komparatora  CC4  dozwolona  jest  wyłącznie  w  1  trybie  porównania.  

Wówczas  możliwe  jest  jednoczesne  sterowanie  przez  komparator  do  9  linii  wyjściowych  (wyjście 
standardowe  P1.4  oraz  wyjścia  dodatkowe  P5.0–P5.7),  przy  czym  sygnały  wyjściowe  mogą  być 
maskowane  wcześniej  zdefiniowaną  maską  9–bitową.  Maska  ta  powinna  zostać  ustawiona  w 
rejestrach  buforów  portów  P1  i  P5  zanim  nastąpi  porównanie  wartości  chwilowej  licznika  T2  z 
wartością wpisaną do rejestru CC4. W momencie porównania tych dwóch wartości, wartości logiczne 
wpisane  do  bufora  portu  są  przepisywane  na  wyjścia  portu  w zależności  od  ustawienia  bitów 
sterujących  COCON0–COCON2.  Na  rysunku  4.13  przedstawiono  schemat  blokowy  współpracy 
licznika T2 i komparatora CC4 podczas pracy równoległej komparatora. 

 

 

Rys.4.13. Praca równoległa komparatora CC4 

Sterowanie  pracą  komparatora  CC4  odbywa  się  poprzez  odpowiednie  ustawianie  bitów 

w rejestrze CC4EN, przy czym znaczenie poszczególnych bitów jest następujące: 

 

Rejestr CC4EN 

 

 

 

 

 

 

adres 0C9h 

– 

COCON2  COCON1  COCON0  COCOEN  COCAH4  COCAL4  COMO 

 

COMO

 − wybór trybu porównania: 

 

 

COMO = 0 – tryb 0 porównania, 

 

 

COMO = 1 – tryb 1 porównania 

COCOEN

 – załączenie trybu porównania 1 oraz wyjść  równoległych  rejestru CC4. Ustawienie tego 

bitu powoduje automatyczne ustawienie bitu COMO. 

 
COCAH4

 i COCAL4 – znaczenie tych bitów przedstawiono w tabeli 4.4. 

 
 

 

  Tabela 4.4. Znaczenie bitów COCAH4 i COCAL4 

Znaczniki 

Przeznaczenie 

COCAH4 

COCAL4 

 

Komparator

Licznik T2

TH2

TL2

CC4

Bufor wewnętrzny portu P5

Bufor wyjściowy portu P5

COCON 1
COCON 2
COCON 3

Do systemu przerwań

Do obwodu P1.4

background image

 
 

 

 
 

 
 

 

 
 

zablokowany tryb porównania / wpisu 

wartości początkowej 

 

tryb 0 zapamiętania 

 

odblokowany tryb porównania / wpisu 

wartości początkowej 

 

tryb 1 zapamiętania 

 
COCON0, COCON1 i COCON2

 – znaczenie tych bitów przedstawiono w tabeli 4.5. 

 
 

 

Tabela 4.5. Znaczenie bitów COCON0, COCON1 i COCON2 

COCON2 

COCON1 

COCON0 

Przeznaczenie 

Odblokowane dodatkowe wyjście P5.0 

Odblokowane dodatkowe wyjścia P5.0–P5.1 

Odblokowane dodatkowe wyjścia P5.0–P5.2 

Odblokowane dodatkowe wyjścia P5.0–P5.3 

Odblokowane dodatkowe wyjścia P5.0–P5.4 

Odblokowane dodatkowe wyjścia P5.0–P5.5 

Odblokowane dodatkowe wyjścia P5.0–P5.6 

Odblokowane dodatkowe wyjścia P5.0–P5.7 

 

4.4.2. Timer komparatorów 

Timer  komparatorów  jest  16–bitowym  układem,  który  we  współpracy  z  komparatorami 

CM0-CM7

  umożliwia  budowę  modułu  szybkich  wyjść  cyfrowych  lub  szybkiego  16–bitowego 

modulatora  MSI.  W  tym  przypadku,  każdy  rejestr  CMx  skojarzony  z  timerem  automatycznie 
rozpoczyna pracę w 0 trybie porównania: przepełnienie timera komparatorów powoduje wyzerowanie 
odpowiedniego  wyjścia  portu  P4,  natomiast  w   chwili  zrównania  się  wartości  chwilowej  timera 
z wartością danego komparatora CMx wyjście portu P4 ustawiane jest w stan jedynki logicznej. 

Timer  komparatorów  taktowany  jest  sygnałem  zegarowym  o  częstotliwości  regulowanej  8–

stopniowym  preskalerem  sterowanym  za  pomocą  trzech  najmłodszych  bitów  rejestru  CTCON.  Stan 
bitów rejestru można zmieniać w dowolnym momencie, zmieniając w czasie rzeczywistym parametry 
pracy  timera.  Po  resecie  procesora  wszystkie  bity  rejestru  CTCON  ustawiane  są  w  stan  zera 
logicznego i timer taktowany jest domyślną częstotliwościa f

osc

/2. 

Schemat blokowy timera przedstawiono na rys. 4.14. 
 

 

CTF

Do systemu

przerwań

Do obwodów 

komparatorów

16–bitowy timer

16–bitowy rejestr autoładowania CTREL

CTCON

CTCON

/2

/4

/8

/16 /32

/64 /128

f

OSC

/2

przepełnienie

16

background image

Rys.4.14. Schemat blokowy timera komparatorów 

Timer  komparatorów,  podobnie  jak  licznik  T2  jest  układem  autonomicznym  i  raz 

uruchomiony  działa  bez  przerwy:  po  osiągnięciu  wartości  maksymalnej  timer  przepełnia  się  i 
rozpoczyna zliczanie od wartości początkowej umieszczonej w rejestrze CTREL (tryb autoładowania 
wartości  początkowej),  przy  czym  rejestr  CTREL  składa  się  z dwóch  ośmiobitowych  rejestrów: 
CTRELL

 (mniej znaczący) i CTRELH (bardziej znaczący). 

Start  timera  rozpoczyna  się  w  momencie  wpisu  dowolnej  wartości  do  mniej  znaczącego 

rejestru  CTRELL,  dlatego  jeżeli  wartość  początkowa  jest  16–bitowa,  to  należy  wcześniej  dokonać 
wpisu  do  rejestru  CTRELH.  Jeśli  timer  jest  już  uruchomiony,  to  wpis  powoduje  natychmiastowe 
przeładowanie wartości początkowej.  

Znaczenie bitów sterujących jest następujące: 
 

 

Rejestr CTCON 

 

 

 

 

 

adres 0E1h 

T2PS1 

– 

– 

– 

CTF 

CLK2 

CLK1 

CLK0 

 
 

CLK2, CLK1, CLK0

 

 

 

Tabela 4.6. Znaczenie bitów CLK2, CLK1 i CLK0 

CLK2 

CLK1 

CLK0 

Przeznaczenie 

Taktowanie timera sygnałem f

osc

/2 

Taktowanie timera sygnałem f

osc

/4 

Taktowanie timera sygnałem f

osc

/8 

Taktowanie timera sygnałem f

osc

/16 

Taktowanie timera sygnałem f

osc

/32 

Taktowanie timera sygnałem f

osc

/64 

Taktowanie timera sygnałem f

osc

/128 

Taktowanie timera sygnałem f

osc

/256 

 

CTF

 − znacznik przerwania od timera komparatorów, ustawiany i kasowany sprzętowo, 

T2PS1

  –  włączenie  dodatkowego  dzielnika  dla  licznika  T2  (tylko  w  wersji  mikrokontrolera 

oznaczonego dodatkowym symbolem BB). 

 
 

4.4.3. Rejestry CM0–CM7 

Moduł  komparatorów  CCU  wyposażony  jest  w  osiem  dodatkowych  rejestrów  CM0–CM7

które  wraz  z timerem  komparatorów  dedykowane  są  do  pracy  w  aplikacjach  MSI.  Komparatory  te 
mogą  także  współpracować  z  licznikiem  T2,  przy  czym  konfiguracja  może  być  dowolna:  każdy  z 
komparatorów może współpracować zarówno z timerem, jak i licznikiem T2

Każdy  z  rejestrów  CM0–CM7  współpracujący  z  timerem  komparatorów  automatycznie 

pracuje  w trybie  porównania  0,  natomiast  rejestry  współpracujące  z  licznikiem  T2  pracują  w  trybie 
porównania 1. Rejestry CM0–CM7 sterują wyjściami portu P4

Współpraca rejestrów CM0–CM7 z licznikiem T2 lub timerem komparatorów odbywa się za 

pośrednictwem  8–kanałowgo  multipleksera,  który  programowany  jest  za  pomocą  rejestru  CMSEL
Funkcje porównania mogą być indywidualnie blokowane przez odpowiednie ustawienie bitów rejestru 
CMEN

.  Należy  przy  tym  zauważyć,  że  rejestry  te  są  adresowane  wyłącznie  bajtowo.  Znaczenie 

poszczególnych bitów rejestrów sterujących są następujące: 

 
 

Rejestr CMSEL 

 

 

 

 

 

adres 0F7h 

CMSEL.7  CMSEL.6  CMSEL.5  CMSEL.4  CMSEL.3  CMSEL.2  CMSEL.1  CMSEL.0 

 

background image

CMSEL.x

 = 0 – współpraca wybranego rejestru CMx z timerem komparatorów i uruchomienie trybu 

porównania 0, 

CMSEL.x 

= 1 – współpraca  wybranego  rejestru  CMx  z  licznikiem  T2  i  uruchomienie  trybu 

porównania 1. 

 

 

Rejestr CMEN  

 

 

 

 

 

adres 0F6h 

CMEN.7 

CMEN.6 

CMEN.5 

CMEN.4 

CMEN.3 

CMEN.2 

CMEN.1 

CMEN.0 

 

CMEN.x

 = 1 – włączenie funkcji porównania dla wybranego rejestru, 

CMEN.x 

= 0 – wyłączenie funkcji porównania dla wybranego rejestru. 

 

Współpraca rejestrów CM0–CM7 z timerem komparatorów 

Rejestry CM0–CM7 współpracujące z timerem komparatorów pracują w trybie 0 porównania: 

aktualna wartość wybranego rejestru CMx przepisywana jest do rejestru zatrzaskowego komparatora 
w chwili przepełnienia timera. Jednocześnie zgłoszone zostaje przerwanie przez ustawienie znacznika 
CTF

  w  rejestrze  CTCON,  co  może  zostać  wykorzystane  do  zasygnalizowania  jednostce  CPU 

rozpoczęcia  nowego  cyklu  zliczana  przez  timer,  oraz  że  wartość  porównania  dla  następnego  cyklu 
może zostać wpisana do rejestrów CMx.  

Schemat  blokowy  ilustrujący  współpracę  rejestrów  CMx  z  timerem  komparatorów 

przedstawiono na rys.4.15. 

 

 

Rys.4.15. Schemat współpracy rejestrów CMx z timerem komparatorów 

Podstawową różnicą pomiędzy rejestrami CMx pracującymi w trybie 0 porównania a  innymi 

rejestrami  komparatorów  struktury  CCU  jest  brak  możliwości  zgłoszenia  przerwania  dedykowanego 
do każdego sterowanego  wyjścia portu P4. W tym przypadku używa  się tzw. wpisu kontrolowanego 
timerem – TOC. Oznacza to, że w strukturze CCU musi istnieć moduł sterujący wpisem wartości do 
porównania dający taką samą pewność wykonania operacji, jak w przypadku użycia systemu przerwań 
–  jest  to  blok  zaznaczony  na  rys.  4.15  jako  „sterowanie”.    Działanie  modułu  TOC  jest  następujące: 
komparator  CMx  w  trybie  0  porównania  współpracuje  z dwoma  rejestrami  zatrzaskowymi.  Kiedy 
jednostka  CPU  usiłuje  uzyskać  dostęp  do  rejestru  CMx  adresuje  jedynie  rejestr  zatrzaskowy 
komparatora, a nie rejestr komparatora skojarzony bezpośrednio ze sterowanymi wyjściami portu P4
Przepisanie wartości z rejestru zatrzaskowego komparatora następuje dopiero po wystąpieniu sygnału 
przepełnienia  timera  komparatora  i wówczas  wartość  z  rejestru  zatrzaskowego  komparatora  CMx 
przepisywana jest do komparatora i porównana z wartością timera.  Skutek działania modułu jest taki, 

System 

przerwań

16 bit

Rejestr CMx

Komparator

sterowanie

Timer komparatora

Rejestr zatrzaskowy 

komparatora

CTF

Obwód

wy.

P4.x/CMx

16 bit

16 bit

16 bit

wpis do CMx

przepełnienie

Przepisanie 

TOC

background image

ż

e wartość rejestru  zatrzaskowego komparatora CMx może być zmieniania w dowolnym momencie, 

natomiast zmiana ta zostanie zarejestrowana przez CCU dopiero po wystąpieniu przepełnienia timera 
komparatora.  Jest  to  bardzo  istotne  w  aplikacjach  generatorów  MSI,  ponieważ  uniemożliwia 
przypadkowe nadpisanie aktualnej wartości okresu generowanego przebiegu MSI

 
 

Współpraca rejestrów CM0–CM7 z licznikiem T2 

Każdy  z  rejestrów  CMx  współpracujących  z  licznikiem  T2  pracuje  w  trybie  1  porównania 

w taki sam sposób, jak  to opisano w przypadku współpracy licznika T2 z rejestrami CC1–CC4

Schemat  blokowy  współpracy  rejestrów  CMx  z  licznikiem  T2  przedstawiono  na  rysunku 

4.16. 

 

Rys.4.16. Schemat współpracy rejestrów CMx z licznikiem T2 

Przepisanie  wartości  do  porównania  z  rejestru  CMx  do  rejestru  zatrzaskowego  komparatora 

następuje w momencie wykonanioa instrukcji wpisu do rejestru CMLx. Należy przy tym pamiętać o 
określonej  kolejności  wpisu  do  rejestru  CMx:  najpierw  należy  wpisać  wartość  bardziej  znaczącą  do 
rejestru CMHx, a następnie wartość mniej znaczącą do rejestru CMLx.  

 

4.4.4. Przykłady programowania licznika T2 

Przykład 1 

;***************************************************************************************** 
;Przykład  wykorzystania  licznika  T2  do  generowania  sygnału  PWM.  Przetwornik  A/C  obsługuje  kanał 
;pomiarowy  AN1.  W  przerwaniach  od  T2  jest  modyfikowana  wartość  CCL2  i CCH2.  Na  wyjściu  P1.2 
;generowany jest sygnał PWM 
;***************************************************************************************** 
 
RAM_1 BYTE  (20h) 

 

 

 

;Deklaracja adresu w pamięci wewnętrznej

 

EPR_1   

EQU 

100h 

 

 

;Deklaracja adresu w pamięci zewnętrznej

 

 
; ------------------- 
;Start programu 
; ------------------ 
 

ORG 

00h 

 

 

 

;Adres początku programu

 

 

LJMP  MAIN   

 

 

;Skok do programu głównego

 

System 

przerwań

16 bit

CMHx

CMLx

Komparator

Timer T2

Rejestr zatrzaskowy 

komparatora

TF2

Obwód

wy.

P4.x/CMx

16 bit

16 bit

16 bit

przepełnienie

wpis do CMx

background image

; --------------------------------------- 
;Podprogram obsługi przerwania 
; --------------------------------------- 
 

ORG 

02Bh 

 

 

 

;Adres obsługi przerwania od T2

 

 
 

LJMP  MODUL 

 

 

;Skok do programu wykonania przerwania

 

 
; ------------------------------------------ 
;Podprogram wykonania przerwania 
; ------------------------------------------ 

 

 

ORG 

050h 

 

 

 

;Adres programu wykonania przerwania

 

MODUL: CLR TF2 

 

 

 

;Kasowanie znacznika przerwania od T2

 

 

MOV DPTR,#100h 

 

 

;Adresowanie pamięci zewnętrznej

 

 

MOVX A,@DPTR 

 

 

;Przesłanie wyniku do akumulatora

 

 

ADD 

A,#17h   

 

 

;Sumowanie z wartością początkową

 

 

MOV 

CCL2,A  

 

 

;Modyfikacja rejestru CCL2

 

 

INC 

DPTR   

 

 

;Adresowanie kolejnego rejestru pamięci

 

 

MOVX A,@DPTR 

 

 

;Przesłanie wyniku do akumulatora

 

 

ADDC A,#FCh   

 

 

;Sumowanie z wartością początkową

 

 

MOV   CCH2,A  

 

;Modyfikacja rejestru CCH2

 

 

SETB  C 

 

 

 

;Ustawienie flagi C oznaczającej koniec modyfikacji

 

 

RETI 

 
; --------------------------------------------- 
;Podprogram konfiguracji licznika T2 
; --------------------------------------------- 
 

ORG 

200h 

 

 

 

;Adres programu  konfiguracji licznika T2

 

 

 

MAIN: MOV  CCEN,#00100000b  

 

;Uaktywnienie trybu porównania dla CC2

 

 

ANL  T2CON,#00100000b 

 

;Zerowanie rejestru T2CON

 

 

ORL  T2CON,#00010001b 

 

;Autoładowanie po przepełnieniu licznika T2

 

 

MOV 

CRCH,#0FCh 

 

 

;Wpis wartości początkowej do rejestru CRCH

 

 

MOV 

CRCL,#17h 

 

 

;Wpis wartości początkowej do rejestru CRCL

 

 

MOV 

CCH2,#0FEh 

 

 

;Wpis wartości początkowej do rejestru CCH2

 

 

MOV 

CCL2,#17h 

 

 

;Wpis wartości początkowej do rejestru CCL2

 

 

SETB  EAL 

 

 

 

;Uaktywnienie wszystkich przerwań

 

 

SETB  ET2 

 

 

 

;Uaktywnienie przerwania od licznika T2

 

 

LOOP: LCALL  PAD 

 

 

;Wywołanie programu obsługi przetworników A/C

 

 

CLR 

 

 

 

;Zerowanie flagi C

 

 

ALA: 

JNC 

ALA 

 

 

;Oczekiwanie na zakończenie programu obsługi przerwania

 

 

SJMP  LOOP   

 

 
; ------------------------------------------------------------------ 
; Program obsługi przetworników AD w SAB80C537 
; Wynik (10 bitów) w 100h i 101h pamięci zewnętrznej 
; ------------------------------------------------------------------ 
;ADCON 

D8h  

 

 

 

;Rejestr konfiguracji przetwornika

 

;ADDAT 

D9h  

 

 

 

;Rejestr wyniku przetwarzania A/C

 

;DAPR   

DAh  

 

 

 

;Rejestr programowania napięć wzorcowych

 

 

ORG 

1000h   

 

 

;Adres programu obsługi przetworników

 

 
PAD: 

MOV 

A,ADCON0 

 

 

 

 

ANL 

A,#0F0h  

 

;Zerowanie mniej znaczących bitów

 

 

ORL 

A,#01h   

 

 

;Wybór trybu przetwarzania i kanału pomiarowego

 

 

MOV 

ADCON0,A 

 

MOV 

DAPR,#00h 

 

 

;Wybór zakresu pomiarowego , start rzetwarzania

 

LOOP1: JB 

ADCON.4,LOOP1 

 

;Oczekiwanie na zakończenie przetwarzania

 

 

MOV A,ADDAT  

 

;Wpis wyniku do akumulatora

 

 

ANL  A,#0C0h   

 

 

;Wyzerowanie 6 bitów mniej znaczących

 

 

SWAP A 

 

 

 

;Konwersja czterech bitów

 

background image

 

RR 

 

RR 

 

MOV 

RAM_1,A 

 

 

;Przesłanie 2 bitów do pamięci wewnętrznej

 

 

MOV 

DPTR,#CONV   

 

;Adresowanie tablicy zakresów

 

 

MOVC A,@A+DPTR 

 

 

;Pobranie elementu tablicy

 

 

MOV 

DAPR,A 

 

 

;Wybór nowego podzakresu, start przetwarzania

 

LOOP2: JB ADCON.4,LOOP2 

 

 

;Oczekiwanie na zakończenie przetwarzania

 

 

MOV 

A,ADDAT 

 

 

;Wpis wyniku do akumulatora

 

 

MOV 

DPTR,#EPR_1   

 

;Adresowanie pamięci zewnętrznej

 

 

MOVX @DPTR,A 

 

 

;Wysłanie wyniku do pamięci zewnętrznej

 

 

INC 

DPTR   

 

 

;Adresowanie kolejnego rejestru

 

 

MOV 

A,RAM_1 

 

 

;Wysłanie wartości 2 bitowej do pamięci zewnętrznej

 

 

MOVX @DPTR,A  

 

RET 

 
CONV:  DB 

40h,84h,0C8h,0FCh 

 

;Tablica zakresów pomiarowych

 

 
 

Przykład 2 

 

;***************************************************************************************** 
;Program  zmiany  współczynnika  wypełnienia  impulsu  PWM  przez  modyfikację  rejestrów  komparatora 
wartościami z tablicy. 
;***************************************************************************************** 
 

ORG 

0h 

 

LJMP  MAIN   

 

 

;Skok do programu konfiguracji licznika T2

 

 
; -------------------------------------------------- 
;Modyfikacja rejestru komparatora CCL2 
; -------------------------------------------------- 
 

 

ORG 

100h 

LOOP_1: 

CJNE R6,#$00,LOOP_2   

;Licznik powtórzeń  modyfikacji, skok do procedury 

 

 

 

 

 

 

 

;opóźnienia  czasowego

 

 

 

MOV 

DPTR,#TAB 

 

;Adresowanie tabeli

 

 

 

MOV 

R6,#18h  

 

;Wpis liczby elementów tabeli do licznika powtórzeń

 

LOOP_2: 

MOV 

R0,#03h  

 

;Procedura opóźnienia czasowego,

 

LOOP_5: 

MOV 

R1,#0FFh 

 

;wartość opóźnienia do rejestrów R0, R1 i R2

 

LOOP_4: 

MOV 

R2,#0FFh 

 

 

LOOP_3: 

DJNZ  R2,LOOP_3 

 

;Dekrementowanie rejestru R2

 

 

 

DJNZ  R1,LOOP_4 

 

;Dekrementowanie rejestru R1

 

 

 

DJNZ  R0,LOOP_5 

 

;Dekrementowanie rejestru R0

 

 

 

ANL 

A,#00   

 

;Zerowanie akumulatora

 

 

 

MOVC A ,@A+DPTR 

 

;Pobranie  z  tabeli  wartości  współczynnika  wypełnienia,

 

 

 

 

 

 

 

;modyfikacja rejestru CCL2

 

 

 

MOV 

CCL2,A  

 

;Adresowanie kolejnego elementu tabeli

 

 

 

INC 

DPTR   

 

  

 

 

DEC 

R6 

 

 

;Dekrementowanie licznika powtórzeń

 

 

 

LJMP  LOOP_1 

 

;Skok do początku programu modyfikacji rejestru  

 

 

 

 

 

 

 

 

;komparatora

 

 
; ------------------------------  
;Konfiguracja licznika T2 
; ------------------------------ 
ORG 

200h 

 
MAIN:  MOV  CCEN,#20h 

 

 

;Odblokowanie komparatora CC2

 

 

ANL 

T2CON,#20h 

 

 

;Zerowanie rejestru sterującego licznika T2

 

 

ORL 

T2CON,#$11 

 

 

;Wybór sygnału taktującego, trybu autoładowania 

 

 

 

 

 

 

 

 

;i trybu porównania , start licznika T2

 

 

MOV 

CRCH,#0FFh 

 

 

;Wartość  początkowa licznika T2 po przepełnieniu

 

background image

 

MOV 

CRCL,#00h 

 

 

;częstotliwość  sygnału  PWM

 

 

MOV 

CCH2,#0FFh 

 

 

;Wartość  porównania  rejestru  komparatora, 

 

 

MOV 

CCL2,#01h 

 

 

;zmiana  współczynnika  wypełnienia  sygnału PWM

 

 

MOV 

R6,#18h  

 

 

;Liczba  powtórzeń  modyfikacji

 

 

LJMP  LOOP_1 

 

 

;Skok  do programu  modyfikacji  wypełnienia 

 

 
TAB: 

DB 

05,10,20,30,40,50,60,70,80,90,100,110,120,130 

 

DB 

140,150,160,170,180,190,200,210,220,230,240