120 12. Port szeregowy
Jeżeli w mikrokontrolerach 8xC52 jako generator zostanie użyty licznik T2, to w rejestrze T2CON należy odpowiednio ustawić znaczniki RCLK, TCLK oraz znacznik OT2 (taktowanie licznika impulsami zewnętrznymi C7T2 = 1 lub wewnętrznymi C7T2 = 0). Gdy licznik T2 pracuje jako 16-bitowy dzielnik z auto-ladowaniem i taktowaniem wewnętrznym (fOS(/2), to częstotliwość transmisji jest określona zależnością:
f _ _^osc_
,r 32 [65536- (RCAP2H, RCAP2L)]
gdzie: (RCAP2H/RCAP2L) - liczba wpisywana do rejestru bardziej znaczącego RCAP2H i mniej znaczącego RCAP2L licznika T2.
W mikrokontrolerach 80C515/535, przy taktowaniu portu szeregowego z dzielnika :39 zależność na prędkość transmisji jest następująca:
2SMOD f" = fosc'~249<r
gdzie: ftr - prędkość transmisji
fOSc - częstotliwość oscylatora mikrokontrolera
Poniższy program umożliwia obserwację na oscyloskopie sygnałów wysyłanych przez port szeregowy mikrokontrolera 80C51. Przyjęto, że częstotliwość oscylatora mikrokontrolera wynosi 12 MHz, a prędkość transmisji wysyłanych znaków 1200 bodów' (1200 bitów/sekundę). Przez port szeregowy jest wysyłany kod ASCII litery a. Po wysłaniu każdego znaku jest wprowadzona przerwa w transmisji, by łatwiej uchwycić początek transmisji. Wyliczenie wartości podziałowej wrpisywanej do licznika Tl przeprowadzono na podstawie zależności podanej wyżej, a samo obliczenie wykonuje asembler.
******************* ^ł***********************************************
Program wysyłania znaku litery a przez port szeregowy.
Prędkość transmisji 2400 bodów,
Częstotliwość oscylatora 12 MHz,
Port pracuje w trybie 1, taktowanie z licznika Tl,
Opóźnienie zrealizowane na liczniku TO
************* * *********************»*****************■*■***>^**>t■’ł■**♦#■,*,*■*■
DANA |
EQU |
'a |
;kod ASCII litery a |
FTR |
EQU |
2400 |
;prędkość transmisji |
FOSC |
F.QU |
12000000 |
;częstotliwość zegara mikrokontrolera |
NTH1 |
EQU |
256-FOSC/(FTR*32*T2) ;wartość określająca częstotliwośc | |
;taktowrania portu szeregowego | |||
SETT0T1 |
m O C |
21H |
;tryby pracy liczników: TO - tryb 1, Tl - tryb 2 ;taktowanie wewmętrzne |
SET_RS EQU 40H ;port szeregowy tryb 1
CSEG
ORG 0 ;adres początku programu
MOV MOV |
TMOD,#SETTOT1 TH1,#NTH1 |
;wpis wartości podziałowej |
MOV SETB |
SCON,#SET RS TRI |
;start licznika Tl |
PĘTLA: | ||
MOV |
SBUF,#DANA |
;wysłanie danej |
JNB |
TI,$ |
;oczekiwanie na koniec transmisji znaku |
CLR |
TI |
;kasowanie znacznika końca transmisji |
;opóźnienie SETB TRO |
;start licznika TO | |
JNB |
TF0,$ |
;oczekiwanie na przepełnienie licznika TO |
CLR |
TRO |
;zatrzymanie licznika TO |
CLR |
TFO |
;kasowanie znacznika przepełnienia licznika |
SJMP |
PĘTLA |
;skok do ponownego wysłania znaku |
END
Po uruchomieniu programu będzie on działał bez przerwy aż do wyzerowania mikrokontrolera.
Program z tego przykładu wysyła i przyjmuje przez port szeregowy tego samego mikrokontrolera łańcuch znaków. Łańcuch ten jest umieszczony w pamięci programu i jest przepisywany do tablicy umieszczonej w pamięci wewnętrznej RAM mikrokontrolera. Adres początku tablicy przyjmowanych danych jest umieszczony w rejestrze RO. Port szeregowy pracuje w trybie 1, taktowany z licznika Tl. Prędkość transmisji 9600 bodów. Podział licznika został tak dobrany, by uzyskać minimalną częstotliwość oscylatora. Kolejny znak jest wysyłany po odbiorze poprzedniego. Znakiem końca łańcucha jest znak $. Żeby przesłać dane należv połączyć w-yjście nadajnika (P3.1) z wejściem odbiornika (P3.0).
Minimalną częstotliwość oscylatora uzyskuje się przy podziale licznika Tl 1 (THl = 255). Standardowo częstotliwość oscylatora dla mikrokontrolerów MC51 nie powinna być mniejsza od 2,5 MHz. Przy tych założeniach i przy sMOD = 0 ze wzoru na częstotliwość transmisji portu szeregowego pracującego w trybie 1 częstotliwość kwarcu powinna wynosić 3,686 MHz.