152 14 Licznik T2 w 8052 i SAB 80515/535
skojarzonym z tym rejestrem (PI. 1 /CCI) pojawia się stan jedynki logicznej. Stan ten trwa dopóki nie nastąpi przepełnienie licznika. W tym momencie linia PI.1/CCI przechodzi w stan zera logicznego. W przykładowym programie, który został przedstawiony poniżej drugi sygnał generowany jest na linii P1.2/CC2 (rysunek 14-6). W programie założono następujące warunki pracy mikrokontrolera:
• częstotliwość rezonatora kwarcowego mikrokontrolera wynosi 12 MHz,
• wewnętrzny sygnał taktujący ma częstotliwość fCEN/12; nie jest włączony dodatkowy dzielnik częstotliwości,
• po przepełnieniu wartość początkowa licznika T2 jest przepisywana z pomocniczego rejestru CRC,
• sygnały generowane są na liniach portu P1.1/CC1 i P1.2/CC2,
• porównywanie cluvilow'ej wartości licznika T2 i pomocniczych rejestrów CCI oraz CC2 wykonywane jest w trybie 0,
• w programie nie wykorzystuje się przerwań; nie ma takiej potrzeby.
Program realizujący podane założenia złożony jest z dwóch części:
• pierwszą są deklaracje stałych,
• drugą program sterujący licznikiem T2 rozpoczynający się od etykiety Generator 1 2.
Okres |
F.QU |
Stan T2 |
EQU |
Stan CRC |
EQU |
P1_1_H |
EQU |
Stan_CCl |
EQU |
PI 2 H |
EQU |
Stan CC2 |
EQU |
Stan CCEN |
EQU |
1000 ;okres obu sygnałów w ps
OFFFFh +1 -Okres ;=0FC18h, wartość początkowa ; licznika T2
Stan T2 ;wartość początkowa licznika po przepełnieniu 500 ;czas trwania jedynki logicznej na wyjściu PI .1 OFFFFh + 1 - PI _1 _H OFEOCh, wartość porównywa-; na w rejestrze CCI
250 ;czas trwrania jedynki logicznej na wejściu PI .2 OFFFFh + 1 - PI 2 H ;= OFFOóh, wartość porównywa-; na w rejestrze CC2
OOlOlOOOb ;odblokowany tryb porówmania ;dla rejestru CCI oraz CC2
COCAH3 COCAL3
COCAH2 | COC A 1.2 ||
j COCAHl | COCAL1 | COCAHO | COCAU)
;COCAH2,COCAL2 - w'ybór trybu porównania wartości chw ilowej licznika z rejestrem CC2,
;COCAHl,COCALl - wfybór trybu porównania wartości chwilowej licznika z rejestrem CCI,
Stan_T2CON EQU OOOlOOOlb ; T2PS | 13FR \ 12FR "
programowanie trybów licznika T2 T2R1 | T2R0 | T2CM | T211 | T210 |
T2PS =0, wyłączony dodatkowy dzielnik przez 2, nPT? n ynar^nik nipi«iłntnv
T2R1/T2R0 = lOb, wpis wartości początkowej po przepełnieniu, T2CM = 0, porównanie w trybie 0,
T2I1/T2I0 = Olb, taktowanie sygnałem wewnętrznym.
TH2 «- OFCh,
TL2 <- 18h, CRCH <- OFCh,
CRCL <—18h, CCH1 <r- OFEh, CCL1 <- OCh, CCH2 OFFh, CCL2 <- 06h,
CSEG AT 0 Cenerator_l_2:
MOV TH2,#High Stan T2
MOV TL2,#Low Stan_T2 MOV CRCH,tfHigh Stan CRC
MOV CRCL,#Low Stan CRC MOV CCHMHighStan CCI MOV CCLl,#Low Stan_CCl MOV CCH2,#High Stan CCI MOV CCL2,#Low Stan.CCl MOV CCEN,#Stan_CCEN MOV T2CON,#Stan T2CON
;dek1aracja segmentu kodu programu
wpisanie wartości początkowej do rejestrów licznika wartość początkowa w licznika T2 po przepełnieniu wartość porównania dla PI. 1 wartość porównania dla PI 2
odblokowanie trybu porównania programowanie i start licznika T2
Koniec_programowania:
NOP ;miejsce na punkt zatrzymania programu
END ;koniec kodu źródłowego programu
Raz zaprogramowany licznik T2 generuje sygnał aż do ponownego programowania, niezależnie od obliczeń wykonywanych przez jednostkę arytme-tyczno-logiczną mikrokontrolera, zerowania mikrokontrolera (RESET#) lub wyłączenia zasilania. Efekt programowania licznika T2 można zaobserwować na oscyloskopie dołączonym do linii portu PI . 1/CCI i P1.2/CC2.
Każdy z czterech rejestrów CRC..CC3 może być użyty do zapamiętania wartości chwilowej licznika T2. Operacja ta realizowana jest sprzętowo. Gdyby wykonać tę operację programowo, to odczytane wartości mogłyby się różnić od wartości rzeczywistej o liczbę cykli maszynowych potrzebnych do wykonania tych instrukcji. Innym rozwiązaniem jest zatrzymanie na czas odczytu licznika 12 (np. T2I1=T2I0=0) i ponowne jego uruchomienie po wykonaniu odczytu. Gdyby licznik nie był zatrzymywany to jego zawartość zostałaby zwiększona o liczbę cykli maszynowych potrzebnych do wykonania programu:
• zatrzymania licznika,
• odczytu zawartości licznika,
• ponownego uruchomienia licznika.