Mikrokontrolery cz12 (2)


Też to potrafisz
T
e
ż
t
o
p
o
t
r
a
f
i
s
z
Po dłuższej przerwie w opisie blo-
ków funkcjonalnych mikrokontrolera
8051, wypełnioną opisem niezbęd-
nych do programowania, instrukcji
Mikrokontrolery?
asemblera, kontynuujemy prezenta-
cję pozostałych układów wewnę-
trznych procesora.
Dzięki temu, że już znacie język ma-
szynowy procesora, a przynajmniej
orientujecie się w jego składni i spo-
To takie proste...
sobach  panowania na różnego ro-
dzaju rejestrami kostki, będzie mi
łatwiej opisywać elementy proceso-
ra, bowiem za każdym razem będę
ilustrował opisy, przykładami sposo-
bów programowania takich elemen-
tów jak port szeregowy, układy licz-
nikowo-czasowe, czy układ prze-
rwań. Cel takiego podejścia do te-
matu jest oczywisty, to praktyczne
nauczenie Was, drodzy Czytelnicy,
Część 12
łatwego i przyjemnego korzystania
z wszystkich możliwości mikrokon- UART  port szeregowy procesora
trolera 8051.
Zanim przejdę do sedna dzisiejszego odcinka, chciałbym zaanonso- obszarze rejestrów specjalnych SFR. Rejestr ma nazwę SBUF a zapisać
wać wszystkim zainteresowanym Czytelnikom, że od dzisiejszego nu- go można tak samo jak każdy inny rejestr, np. instrukcją zapisu poprzez
meru EdW uruchamiam wskaznik Ri:
 Kącik pocztowy 8051 , w którym będę odpowiadał na wszystkie za- MOV SBUF, @R1

K
ą
c
i
k
p
o
c
z
t
o
w
y
8
0
5
1

warte w waszych listach problemy, dotyczące programowania naszego W przypadku, kiedy wcześniej ustawiliśmy parametry transmisji i u-
mikrokontrolera. Ze względu na to, że część z ogromnej liczby listów ruchomiliśmy port szeregowy (o tym jak to zrobić  za chwilę), taki za-
które dostaję będzie wiązała się z wybranymi, prezentowanymi w kolej- pis spowoduje automatyczne wytransmitowanie bajtu który wcześniej
nym odcinku, problemami, odpowiedzi będą wiązały się z tematami, znajdował się pod adresem wskazywanym przez rejestr indeksowy R1.
które już omawialiśmy lub tymi, które akurat są tematem kolejnego od- W przypadku odbioru danej, po zakończeniu transmisji odebrany bajt
cinka klasy mikroprocesorowej. informacji będzie automatycznie umieszczony w rejestrze SBUF, a fakt
W dzisiejszej części zapoznamy się z układem transmisji szeregowej zajścia takiego zdarzenia zostanie zasygnalizowany w programie auto-
oraz praktycznymi sposobami programowania go i wykorzystywania do matycznie. Dzięki temu będziemy wiedzieć, że w rejestrze SBUF czeka
własnych celów, w tym także do przesyłania danych pomiędzy kompu- na odczytanie gotowa odebrana dana, z którą można zrobić na co się
terem PC lub dwoma komputerkami edukacyjnymi. ma ochotę.
Zanim przejdę do omawiania sposobu sterowania transmisją danych
Port szeregowy poprzez port szeregowy, pragnę wyjaśnić dwa pojęcia związane z por-
Mikrokontroler 8051 i pochodne posiadają sprzętowy port szeregowy tem szeregowym. Być może niektórzy z Was dokładnie wiedzą o co
(w skrócie UART), dzięki któremu możliwe jest wysyłanie i odbieranie chodzi, lecz pozostałym Czytelnikom należy się wyjaśnienie zasady sa-
informacji w postaci szeregowej, czyli  bit po bicie . Jak już wiecie z o- mej transmisji szeregowej.
pisu wyprowadzeń, który przedstawiłem na początku naszego kursu, Po pierwsze, należy wiedzieć że istnieją praktycznie dwa sposoby na
s
y
n
c
h
r
o
n
i
c
z
n
a
procesor posiada dwie dedykowane końcówki które wchodzą w skład przysyłanie danych metodą szeregową, są to: transmisja synchroniczna
a
s
y
n
c
h
r
o
n
i
c
z
n
a
portu P3 procesora. Są to: i transmisja asynchroniczna.
R
RXD  (P3.0) wejście szeregowe ( Receive data ) Ponieważ port szeregowy procesora 8051 może pracować w oby
T
TXD  (P3.1) wyjście szeregowe ( Transmit data ) tych trybach, wyjaśnię na początku o co chodzi i jakie są zasadnicze róż-
Jak zapewne pamiętacie, końcówki te mogą być wykorzystywane jako nice pomiędzy obiema rodzajami transmisji.
uniwersalne wejścia-wyjścia, dzięki instrukcjom zapisu do portu P3, np.
T
r
a
n
s
m
i
s
j
a
s
y
n
c
h
r
o
n
i
c
z
n
a
MOV P3, #dana Transmisja synchroniczna
lub indywidualnym sterowaniem każdej końcówki portu np.: W tym przypadku dane (informacje) przesyłane są od nadajnika do
SETB P3.0 ;ustawienie  1 na końcówce RXD odbiornika za pomocą dwóch przewodów (nie licząc oczywiście masy).
CLR P3.1 ;ustawienie  0 na końcówce TXD Jednym przesyłane są dane, a drugim generowany jest sygnał zegaro-
Jednak przy wykorzystaniu portu szeregowego, sterowanie końców- wy, w takt którego odbiornik może odebrać informację i stwierdzić, czy
kami odbywa się automatycznie (za pomocą CPU), według ustawio- nadeszła  1 -ka czy logiczne  0 . Można więc powiedzieć że dane są
nych wcześniej przez programistę parametrów przesyłowych. Port sze- przesyłane synchronicznie z przebiegiem zegarowym transmitowanym
regowy wysyła i odbiera dane w postaci bajtów (8-bitowych słów da- równolegle z danymi, stąd m.in. nazwa rodzaju transmisji.
nych). Konwersja danej wysłanej lub odebranej przez procesor z posta- Sytuację tę ilustruje rys.1a. Stan nieaktywny na linii może być umo-
ci bajtu do postaci szeregowej lub odwrotnie, odbywa się automatycz- wny, może to być logiczne 0 lub jedynka, umowny jest też sposób ge-
nie. Dzięki temu wystarczy wskazać tylko dana którą chcemy wysłać nerowania sygnału zegarowego, wszystko zależy od przyjętego w ukła-
lub czekać na odbiór jej z zewnętrznego urządzenia, także wyposażone- dzie rozwiązania. Nie dotyczy to konkretnie mikrokontrolera 8051 i po-
go w port szeregowy. chodnych, lecz tu także ustalono, kiedy transmisja się zaczyna i w jaki
Miejscem z którego wysyła się wspomniane dane  bajty, lub do któ- sposób generuje się sygnał zegarowy (nazywany czasem  synchronizu-
rego one trafiają po transmisji z zewnątrz jest specjalny rejestr, znajdu- jącym ). O tym jakie zasady obowiązują w przypadku 8051 powiem za
jący się pod adresem 99h w pamięci wewnętrznej danych procesora w chwilę.
ELEKTRONIKA DLA WSZYSTKICH 4/98 35
Też to potrafisz
T
e
ż
t
o
p
o
t
r
a
f
i
s
z
Jakie są zalety a jakie wady obu rodzajów
transmisji?...hm, na to pytanie dość trudno
jednoznacznie odpowiedzieć, zresztą jedna
wyrazna korzyść od razu się rysuje:
zmniejszenie liczby przewodów w przypadku
transmisji asynchronicznej.
Istnieją urządzenia które po prostu z definicji
potrzebują zewnętrznego sygnału zegarowe-
go, nie tylko do przesyłania danych pomiędzy
nim a systemem nadrzędnym, lecz także do
poprawnej pracy innych funkcjonalnych blo-
ków systemu. W takich przypadkach transmi-
sja synchroniczna staje się nieodzowna.
Do niedawna panowało mniemanie, że trans-
misja synchroniczna jest  bezpieczniejsza od
asynchronicznej, a także znacznie szybsza. Tak
jednak było dla niedużych połączeń pomiędzy
nadajnikiem a odbiornikiem (do kilkudziesięciu
centymetrów dla szybkości do kilkunastu
MHz). Wynikało to z tego, że jak dotąd urzą-
dzenia nadawcze i odbiorcze pracujące w try-
bie asynchronicznym nie były dość doskonałe,
i często przy stosunkowo dużych (choć i tak
małych w porównaniu z transmisją synchro-
niczną) prędkościach transmisji następowały
 przekłamania i  gubienie informacji.
W dzisiejszych czasach, kiedy mamy do dyspo-
zycji takie urządzenia jak port szeregowy
w kontrolerze 8015 i podobnych, zaawansowa-
ne układy UART w komputerach PC, zdolne do
transmitowania danych w trybie asynchronicz-
nym z prędkościami nawet do 4Mb/sek. (tak !,
czterech megabitów na sekundę), problem ten
praktycznie zniknął. Dochodzą do tego jeszcze
inne udogodnienia takie jak korekcja błędów o-
raz kompresja danych, co zwiększa realne szyb-
Rys. 1. Transmisja synchroniczna i asynchroniczna
R
y
s
.
1
.
T
r
a
n
s
m
i
s
j
a
s
y
n
c
h
r
o
n
i
c
z
n
a
i
a
s
y
n
c
h
r
o
n
i
c
z
n
a
kości transmisji oraz zwiększa bezpieczeństwo
przed utratą często tak cennej informacji.
Transmisja asynchroniczna Jednak w wielu sytuacjach fakt że procesor 8051 potrafi przesyłać
T
r
a
n
s
m
i
s
j
a
a
s
y
n
c
h
r
o
n
i
c
z
n
a
danej w sposób synchroniczny, może pomóc w rozwiązywaniu wielu
W przypadku tego rodzaju transmisji (patrz rys.1b) nie ma oddzielnej
ciekawych zagadnień przy projektowaniu peryferyjnych układów cyfro-
linii zegarowej, a dane są przesyłane w takt wewnętrznego sygnału ze-
wych, wykorzystywanych nie tylko w domowym zaciszu. Warto zatem
garowego, generowanego oddzielnie w nadajniku i odbiorniku. Warun-
o tym pamiętać.
kiem prawidłowego przesłania danych w asynchronicznym sposobie
transmisji jest to, aby nadajnik i odbiornik miały ustawioną tę samą czę-
UART w mikrokontrolerze 8051
U
A
R
T
w
m
i
k
r
o
k
o
n
t
r
o
l
e
r
z
e
8
0
5
1
stotliwość wspomnianych sygnałów zegarowych (nazywanych też
Teraz, kiedy już wiecie na czym polega różnica pomiędzy transmisją
 taktującymi ). Takie ustalenie prędkości transmisji odbywa się na róż-
synchroniczną a asynchroniczną możemy przejść do omawiania układu
ne sposoby, z reguły jest to  ręczne ustalenie przez operatora.
UART w naszym procesorze.
Zauważcie przecież że w naszym komputerku, przed przesłaniem da-
Oprócz rejestru SBUF istnieje dodatkowy rejestr sterujący wszystki-
nych z komputera PC można ustawić (za pomocą klawisza  B -baud)
mi funkcjami portu, a więc trybem jego pracy, sygnalizowaniem stanu
żądaną szybkość transmisji, tak samo można postąpić w portem szere-
transmisji, czy wreszcie uaktywnianiem odbiornika portu szeregowego.
gowym komputera PC, za pomocą komendy DOS u np.:
Znajduje się on pod adresem 98h w obszarze wewnętrznej pamięci da-
nych procesora i jest jednym z rejestrów specjalnych SFR. Na sciągaw-
MODE COM2: 9600, n, 8, 1 {Enter} ce we wkładce z numeru 11/97 EdW znajduje się opis tego rejestru,
jednak przedstawię poniżej nieco dokładniej znaczenie poszczególnych
jego bitów.
gdzie szybkość ustalono na 9600 bitów na sekundę (bodów). Pozosta-
łe parametry omówię za chwilę.
Jeżeli zatem urządzenie odbiorcze uczestniczące w przesyłaniu da-
nych wie z jaką szybkością nadawane są dane, to będzie mogło odebrać
SCON.0 (RI)  (ang.  Receive Interrupt ) znacznik odebrania przez port
S
C
O
N
.
0
(
R
I
)
informację, bez dodatkowej linii zegarowej, jak to miało miejsce w przy-
szeregowy bajtu, jest jednocześnie znacznikiem zgłoszenia przerwa-
padku transmisji synchronicznej. Zaoszczędzimy w ten sposób jeden
nia (przy uaktywnionym systemie przerwań). W przypadku kiedy u-
 przewód . No tak, ale przecież w mikrokontrolerze 8051 są dwie linie
kład szeregowy mikrokontrolera jest ustawiony na odbiór (odbloko-
portu szeregowego: nadawania (TXD) i odbioru (RXD). To prawda, nie
wany jest układ odbiornika: bit REN=1), po odebraniu poprawnego
jest możliwe przesyłanie danych w obie strony po jedne linii w trybie
znaku z urządzenia zewnętrznego, znacznik ten zostaje automatycz-
asynchronicznym (oczywiście przy wykorzystaniu sprzętowego portu
nie ustawiony. Zerowanie tego znacznika odbywa się wyłącznie pro-
szeregowego o którym mowa), lecz zauważmy że w przypadku, kiedy gramowo, np. przez instrukcję:
np. do naszego komputerka dołączymy urządzenie które potrafi tylko
odbierać dane, to wystarczy połączyć je tylko 1 przewodem z końców- CLR RI
ką TXD procesora (nie zapominając o masie), a linię RXD pozostawić nie
SCON.1 (TI)  (ang. Transmit Interrupt ) znacznik wysłania przez port
S
C
O
N
.
1
(
T
I
)
wykorzystaną.
szeregowy bajtu, jest jednocześnie znacznikiem zgłoszenia przerwa-
Z drugiej strony, wyobraz sobie że jeżeli np. do naszego komputerka
nia jeżeli uaktywniono wcześniej układ przerwań. W przypadku kiedy
dołączono oddalony o kilkadziesiąt metrów cyfrowy układ automatycz-
do rejestru SBUF zostanie zapisany znak (bajt) po wytransmitowaniu
nego termometru, który w określonych odstępach czasu automatycz-
go przez procesor, bit ten zostaje automatycznie ustawiony (TI=1), co
nie przesyła dane dotyczące aktualnej temperatury, to do odbioru tych
informuje o zakończeniu nadawania znaku przez UART. Podobnie jak
danych wystarczy dołączyć linię do wejścia RXD procesora.
w przypadku znacznika RI, znacznik ten jest ustawiany automatycz-
W obu przypadkach jeżeli chcielibyście wykorzystać transmisję syn-
nie a musi być zerowany programowo za pomocą instrukcji np.
chroniczną, trzeba by pociągnąć jeszcze jeden przewód między odbior-
nikiem a nadajnikiem,. co zwiększyłoby koszty takiego przedsięwzięcia
CLR TI
a jednocześnie skomplikowało instalację urządzenia.
36 ELEKTRONIKA DLA WSZYSTKICH 4/98
Też to potrafisz
T
e
ż
t
o
p
o
t
r
a
f
i
s
z
SCON.2 (RB8)  (ang.  Receive Bit no. 8 ) port szeregowy mikrokon- czekaj: jnb TI, czekaj ;testowanie flagi nadania
S
C
O
N
.
2
(
R
B
8
)
trolera 8051 ma możliwość odbioru i transmisji znaków 9-bitowych  ;(czekanie na zakończenie nadawania)
istnieje specjalny tryb pracy UART, o tym za chwilę. W takim trybie clr TI ;wyzerowanie flagi nadawania
w przypadku odbioru znaku z urządzenia zewnętrznego, bit RB8 za- ret ;powrót z procedury (podprogramu)
wiera właśnie wspomniany 9-ty bit odebranego znaku, Oczywiście 8
pierwszych bitów znaku znajduje się jak poprzednio w rejestrze Zaś procedur odebrania znaku i umieszczenia go w akumulatorze mo-
SBUF. że wyglądać tak:
SCON.3 (TB8)  (ang.  Transmit Bit no. 8 ) 9-ty bit nadawanego znaku
S
C
O
N
.
3
(
T
B
8
)
w trybie transmisji z 9 bitami danych. Sytuacja analogiczna do po- INRS:
przedniej, lecz w tym przypadku aby wysłać 9-bitowy znak poprzez setb REN ;odblokowanie odbiornika
port szeregowy należy najpierw wpisać 9-ty bajt nadawanego znaku czekaj: jnb RI, czekaj ; testowanie flagi odbioru
do bitu TB8 a potem załadować rejestr SBUF ośmioma młodszymi bi- ;(czekanie na odbiór znaku)
tami (bajtem) nadawanego znaku. clr RI ;po odbiorze wyzerowanie flagi
SCON.4 (REN)  ( Receive ENable ) bit uaktywnienia odbiornika trans- clr REN ;i zablokowanie odbiornika
S
C
O
N
.
4
(
R
E
N
)
misji szeregowej. W celu odbioru znaku (oczekiwania na nadejście mov A, SBUF ;przepisanie znaku do akumulatora
bajtu z portu szeregowego) należy najpierw wyzerować bit REN, aby ret ;powrót z podprogramu
odblokować sprzętowy odbiornika znaku zawarty w mikrokontrole-
rze. W przypadku nadawania znaku bit ten powinien być wyzerowa- O ile podprogram nadania znaku nie zajmie z reguły więcej niż 10 cyk-
ny (REN=0). li maszynowych procesora, o tyle sprawa odbioru znaku bez włączone-
SCON.5 (SM2)  znacznik maskowania odbioru transmisji. Bit ten mo- go układu przerwań może być czasochłonna. Popatrzcie przecież, że w
S
C
O
N
.
5
(
S
M
2
)
że być zmieniany programowo. Ustawienie go (SM2=1) powoduje że przypadku gdy nie będzie nadchodził żaden znak z portu szeregowego,
odbiornik ignoruje te odbierane znaki, których (w trybie 9-bitowym) 9- procedura INRS w ogóle się nie zakończy, innymi słowy program może
ty bit (RB8) jest równy zero (RB=0). W efekcie w takim przypadku nie się  zawiesić w przypadku gdy czekamy na jakis znak z urządzenia ze-
jest ustawiany znacznik odebrania znaku (RI). Dodatkowo w trybie 8- wnętrznego, a on nie nadchodzi.
bitowym (tryb=1) sytuacja jest identyczna kiedy po odebraniu znaku Właśnie dlatego użycie układu przerwań przy odbiorze znaków może
nie został wykryty bit stop u. okazać się bardzo pomocne. Jak tego dokonać omówię w dalszej czę-
ści cyklu klasy mikroprocesorowej.
Numeracja trybów ich znaczenie oraz wyjaśnienie bitów  stop u już Istnieje jednak sposób zabezpieczenia się przed takim  nieskończo-
za chwilę. nym czekaniem na odbiór znaku bez angażowania często i tak przecią-
żonego systemu przerwań procesora. Otóż wystarczy oprócz flagi RI
SCON.7 (SM0) oraz SCON.6 (SM1)  bity ustalające jeden z czterech sprawdzać stan jakiegoś przyjętego w programie rejestru, który jest au-
S
C
O
N
.
7
(
S
M
0
)
S
C
O
N
.
6
(
S
M
1
)
trybów pracy portu szeregowego. Oto one: tomatycznie zmniejszany o jeden np. co 1 sekundę. Załóżmy że zmniej-
SM0 SM1 = 00  tryb 0: Transmisja szeregowa synchroniczna, znaki 8- szanie odbywa się automatycznie w procedurze przerwania generowa-
bitowe, taktowane sygnałem zegarowym o częstotliwości Fxtal/12, nej przez jeden z liczników procesora np. T0. W takim przypadku, jeże-
SM0 SM1 = 01  tryb 1: Transmisja szeregowa asynchroniczna, znaki li stwierdzimy że rejestr ten (nazywany często rejestrem  przetermino-
8-bitowe, szybkość transmisji może być określana programowo (tryb wania ) jest równy zero, kończymy sprawdzanie flagi RI, uznając że na-
do pracy np. z PC-tem) stąpił błąd w odbiorze znaku. Wtedy nasza procedura odbioru znaku bę-
SM0 SM1 = 10  tryb 2: Transmisja szeregowa asynchroniczna, znaki dzie wyglądała następująco.
9-bitowe, szybkość określona jako 1/32 lub 1/64 częstotliwości zega- Załóżmy przy tym że wspomniany rejestr  przeterminowania na-
ra procesora, zwaliśmy np. jako  overtime i zdefiniowaliśmy jego adres jako np.
SM0 SM1 = 11  tryb 3. Transmisja szeregowa asynchroniczna, znaki
9-bitowe, szybkość transmisji może być określana programowo overtime EQU 7Fh
(znajduje także zastosowanie przy pracy z PC-tem) czyli 7Fh w pamięci wewnętrznej danych kontrolera. Zakładamy też że
w wywoływanej automatycznie co 1 sekundę procedurze przerwania od
Znaczenie i funkcje poszczególnych trybów są następujące. licznika T0 licznik  overtime w przypadku stwierdzenia jego wartości ja-
ko różnej od zera jest zmniejszany o 1. Wtedy użycie podprogramu:
Tryb 0
T
r
y
b
0
Jak już powiedziałem w tym synchronicznym trybie przesyłania infor- INRS:
macji port szeregowy pracuje nadawając i odbierając znaki 8-bitowe. Za- setb REN ;odblokowanie odbiornika
wsze pierwszym nadawanym lub odbieranym bitem jest najmniej zna- czekaj: jb RI, jest ;testowanie flagi odbioru
czący (D0). ;(czekanie na odbiór znaku)
Znaki przesyłane są po dwukierunkowej linii P3.0 (RXD). Odbierane mov A, overtime ;sprawdzenie rejestru
są i nadawane za pośrednictwem znanego nam już rejestru SBUF w  przeterminowania
takt sygnału zegarowego, który generowany jest przez kontroler na linii jnz czekaj ;jeżeli jeszcze <>0 to czekaj
P3.1 (TXD). na znak
W tym trybie częstotliwość sygnału zegarowego jest stała i jest ró- sjmp koniec ;jeżeli =0 to zaniechaj czekania
wna 1/12 (jednej dwunastej) częstotliwości sygnału taktującego proce- jest: clr RI ;po odbiorze wyzerowanie flagi
sor. W przypadku użycia obwodu oscylatora procesora z rezonatorem mov A, SBUF ;przepisanie znaku do akumulatora
kwarcowym 12 MHz, znaki w tym trybie będą przesyłane z szybkością koniec: clr REN ;i zablokowanie odbiornika
1 000 000 bitów / sek. (1 Mb/sek). ret ;powrót z podprogramu
Przy nadawaniu znaku obowiązuje zasada, że zapis wysłanego kolej-
nego bitu znaku w urządzeniu odbiorczym (zewnętrznym np. rejestrze z uprzednim załadowaniem rejestru  overtime liczbą sekund przezna-
n
a
r
a
s
t
a
j
ą
c
y
m
przesuwnym) powinien nastąpić przy narastającym sygnale zegarowym czonych na maksymalne oczekiwanie na odbiór znaku poprzez instrukcję:
wytwarzanym na linii TXD.
W przypadku odbioru (REN=1) narastające zbocze sygnału zega- mov overtime, #10 ;10 sekund na odbiór znaku
rowego powinno powodować przesunięcie zawartości zewnętrzne- lcall INRS ;i wywołanie podprogramu odbioru
go rejestru przesuwnego, z którego odbierane są dane, czyli de fac-
to odczyt odbywa się przy opadającym sygnale przesyłanym linią spowoduje czekanie maksymalnie 10 sekund na dobiór znaku z portu
TXD procesora. szeregowego.
Po odebraniu znaku następuje automatyczne ustawienie znacznika Opisana zasada znajduje zastosowanie w trzech pozostałych trybach
RI, a przy nadawaniu  znacznika TI. Fakt że znaczniki te nie są zerowa- pracy portu szeregowego, a więc w trybach 1, 2 i 3.
ne automatycznie pozwala programiście na testowanie stanu ich, a co
za tym idzie monitorowanie faktu odbioru czy nadania znaku bez potrze- Tryby 1, 2 i 3
T
r
y
b
y
1
,
2
i
3
by uruchamiania układu przerwań. Zanim opiszę szczegółowo wspomniane trzy pozostałe tryby pracy
Oto praktyczny przykład ilustrujący tą właściwość. portu szeregowego kontrolera powinienem przedstawić wspólną cechę
Procedura nadania znaku z akumulatora bez korzystania z układu charakteryzująca te tryby a mianowicie postać przesyłanej asynchronicz-
przerwań może wyglądać następująco: nie informacji, czyli format przesyłania znaku (8-bitowy lub 9-bitowy).
Ponieważ w trybie asynchronicznym nie istnieje linia przesyłająca syg-
OUTRS: nał taktujący poszczególne nadawane i odbierane bity, obie strony
mov SBUF, A ;przepisanie zawartości nadawcza i odbiorcza muszą w jakiś sposób  wiedzieć o tym że np.
;akumulatora do rejestru UART w danej chwili nadajnik rozpoczął nadawanie znaku. Wtedy odbiornik
ELEKTRONIKA DLA WSZYSTKICH 4/98 37
Też to potrafisz
T
e
ż
t
o
p
o
t
r
a
f
i
s
z
MODE COMx: baud, parity, data, stop, retry
gdzie, poszczególne nazwy oznaczają:
x  określa numer portu szeregowego, do którego dołą-
czony jest UART mikrokontrolera (1 dla COM1, 2 dla
COM2, 3 dla COM3 itd.)
baud  określa szybkość transmisji w bitach na sekundę
(standardowe najczęściej używane szybkości to: 600,
1200, 2400, 4800, 9600, 19200 bodów czyli bitów/sek)
parity  parametr określający sposób kontroli parzysto-
ści. Możliwe wartości to:  o -odd (nieparzysty) lub  e -
even (parzysty)
data  parametr określający liczbę bitów danych. Warto-
ści typowe akceptowane przez instrukcję MODE to 5...8
stop  liczba bitów stopu. Wartości akceptowane to 1
lub 2 (bity stopu).
Parametru  retry nie należy w ogóle podawać.
W ten sposób można zdefiniować parametry transmisji
w komputerze PC dla następujących trybów pracy portu
szeregowego mikrokontrolera 8051, np.:
MODE COM2: 9600, n, 8, 1 (1)
dla trybu 1 portu UART w 8051, prędkości 9600 bodów,
dołączonego do portu COM2 komputera PC, a w przy-
padku trybu 9-bitowego (3) :
MODE COM2: 9600, e, 8, 1 (2)
w przypadku badania parzystości bitów danych lub
Rys.2. Format znaku w trybie 8-bitowym (a) oraz 9-bitowym (b).
R
y
s
.
2
.
F
o
r
m
a
t
z
n
a
k
u
w
t
r
y
b
i
e
8
b
i
t
o
w
y
m
(
a
)
o
r
a
z
9
b
i
t
o
w
y
m
(
b
)
.
MODE COM2: 9600, o, 8, 1 (3)
detektując takie zajście będzie, znając oczywiście częstotliwość na- dla nieparzystości.
dawani znaku przez nadajnik (znając prędkość transmisji), wiedział w Najczęściej jednak przydaje się ustawienie portu komputera PC jak w
jaki sposób odbierać nadawany z zewnątrz znak. linii (1) oraz korzystanie z trybu 1 UART kontrolera 8051.
Ustalono, że podczas  ciszy na łączach , linie portów (RXD  odbioru i W trybie 2 pracy, port szeregowy taktowany jest sygnałem zegaro-
TXD  nadawania ) są w stanie wysokim. Sygnałem rozpoczęcia na- wym o częstotliwości Fxtal/32 lub Fxtal/64 (gdzie Fxtal to częstotliwość
dawania znaku, a z drugiej strony sygnałem konieczności jego odbio- rezonatora oscylatora). O tym, która z częstotliwości będzie taktować
ru jest pojawienie się tzw.  bitu startu , czyli niskiego poziomu lo- port, decyduje stan bitu 7 (SMOD) w rejestrze SFR o nazwie PCON (a-
gicznego na linii (TXD w przypadku nadawania) lub (RXD  w przypad- dres: 87h). Ustawienie tego bitu powoduje podwojenie szybkości trans-
ku odbioru). misji (Fxtal / 32) wyzerowanie  ustawienie taktowania na Fxtal/64.
Bit startu trwa dokładnie tyle ile powinny trwać (w zależności od Jak wspomniałem wcześniej w trybach 1 i 3 szybkość transmisji może
r
y
s
u
n
k
u
2
szybkości transmisji) pozostałe bity informacji. Na rysunku 2 oznaczono być określana programowo. W tym przypadku układ transmisyjny taktowa-
ten bit dokładnie. ny jest za pomocą sygnału przepełnienia licznika T1 układu czasowo-liczni-
Po bicie startu (pamiętajmy, zawsze równy zero!), następują kolejno kowego.
bity danych. I tak pierwszy transmitowany jest najmłodszy bit (D0) baj- W kontrolerach 8032/52 do taktowania portu może także posłużyć
tu wpisanego do rejestru SBUF, potem starszy (D1) i tak dalej aż do bi- licznik dodatkowy T2. Jak tego dokonać pokażę na przykładach po opi-
tu D7, a w przypadku transmisji 9-bitowej dodatkowo transmitowany sie sposobów modyfikacji i wartości szybkości transmisji.
jest bit SCON.3 (TB8), po czym następuje bit stopu, który zawsze jest Ponieważ wgłębianie się w przebiegi i szczegóły nadawania i odbioru
równy  1 . znaków w trybach asynchronicznych jest mało praktyczna, zaintereso-
Pojawienie się bitu stopu kończy nadanie znaku, a po drugiej stronie wanych odsyłam do lektury [1]. Poniżej skupie się jedynie na praktycz-
jego odbiór. nych aspektach korzystania z dobrodziejstw portu szeregowego oraz
Mechanizm transmisji znaku w trybach 1, 2 i 3 jest taki sam, różna programowania jego rejestrów.
jest tylko liczba bitów danych oraz szybkość transmisji, zgodnie z opi- Zanim do tego przejdę zapoznajmy się z możliwościami modyfikowania
sem wcześniej.
S
z
y
b
k
o
ś
c
i
t
r
a
n
s
m
i
s
j
i
Dla przykładu powiem, że choć transmisja 9-bitowa może wydawać się Szybkości transmisji
t
r
y
b
i
e
0
mniej naturalna i niepotrzebna, to jednak jest ona często wykorzystywa- W trybie 0 szybkość przesyłania danych, jak powiedziałem wcześniej
na do przesyłania danych z tzw. bitem parzystości. Jest to prosty sposób jest niezmienna i wynosi Fxtal/12.
t
r
y
b
i
e
2
na wyeliminowanie odbioru zafałszowanych danych, kiedy to pomimo, że W trybie 2 prędkość transmisji wynosi: Fxtal/32 przy SMOD=1, lub
w określonej, koniecznej chwili nastąpiło wygenerowanie poprawnego Fxtal/64 przy SMOD=0.
bitu startu o raz bitu stopu, to jednak bity danych uległy zniekształceniu, W trybach 1 i 3 sprawa ma się nieco inaczej. W tym przypadku pręd-
co spowodowało zafałszowanie danych i odbiór niewłaściwego znaku. kość transmisji określa wzór:
Przy korzystaniu z transmisji z komputerem PC można poleceniem
MODE ustawić tryb transmisji portu szeregowego komputera na kilka Fxtal
sposobów, a mianowicie: n =           
(256  TH1) x 12 x dz
Jak się za chwilę przekonasz nasz UART w mikrokontrolerze 8051
gdzie: dz = 32 w przypadku gdy SMOD = 0 zaś dz = 16 gdy SMOD = 1, zaś
potrafi pracować z większymi szybkościami, lecz ustawienie tych
TH1 to wartość początkowa 8-bitowego licznika TH1 (starszy bajt T1)
szybkości transmisji w PC-cie jest możliwe tylko za pomocą specjal- pracującego w trybie taktowania portu szeregowego.
nie utworzonych programów, które są dostępne jako programu ter- Aby wykorzystać standardowe prędkości transmisji znane z kompu-
minalowe  shareware , lub mogą być napisane przez Czytelników, terów PC oraz innych wyposażonych w asynchroniczny port szeregowy
tych którzy potrafią to zrobić. Najprostszym a jednocześnie ogólnie (Commodore, Amiga), czyli: 600, 1200, 2400, 4800, 9600, 19200,
dostępnym programem twego typu jest program pochodzący z pa- 28800, 38400, 57600, 76800 bit/sek należy zastosować taki kwarc (os-
cylator) aby po lewej stronie równania otrzymać te wartości przy pamię-
kietu popularnego DOS-owego  Norton Commander a pod nazwą:
taniu że wartość TH1 jest liczbą całkowitą z zakresu 0...255.
 TERM90.EXE . O sposobie używania tego programu nie będę się
I tu wyjaśni się sprawa stosowania trochę dziwnych wartości rezona-
tu rozwodził, zasady powinien znać każdy komputerowiec, a jeżeli
torów kwarcowych w niektórych układach wykorzystujących procesory
nie to radzę się tym programem nieco pobawić.
rodziny 8051 i ich port szeregowy.
38 ELEKTRONIKA DLA WSZYSTKICH 4/98
Też to potrafisz Też to potrafisz
T
e
ż
t
o
p
o
t
r
a
f
i
s
z
T
e
ż
t
o
p
o
t
r
a
f
i
s
z
Ot chociażby w naszym komputerku edukacyjnym zastosowany re-
zonator kwarcowy ma wartość 11,0592 MHz, zobaczmy dlaczego i co 2400 bodów (TH1 = F3h, SMOD = 0), wtedy błąd wyniesie tylko: 0,16%
w efekcie uzyskamy. 4800 bodów (TH1 = E6h, SMOD = 0), wtedy błąd wyniesie także 0,16%
Podstawiając do powyższego wzoru, określającego prędkość trans-
misji danych, wartość oscylatora równą 11059200 Hz oraz zakładając że ale już przy prędkości transmisji równej
SMOD = 1 (czyli dz = 16) otrzymamy np. dla 9600 bodów (TH1 = F9h, SMOD = 1), błąd wyniesie aż 7%, bo aktual-
TH1 = F4h (244 dziesiętnie): n = 11059200/((256-244)x12x16)=4800 na szybkość transmisji będzie mniejsza od założonej i wyniesie w tym
bodów. przypadku: 8923 body.
Postepując podobnie z innymi wartościami początkowymi licznika
TH1 otrzymamy dla podanego rezonatora oraz innych (których częstot- W przypadku użycia do taktowania portu szeregowego w kontrole-
liwość rezonansowa dzieli się przez liczbę 12 i 32 (lub 16)) inne standar- rach 8032/52 licznika T2, prędkość transmisji określona będzie wzorem:
dowe wartości, oto one:
Fxtal
Fxtal (MHz) SMOD TH1 n (bodów) n =            ---
F
x
t
a
l
(
M
H
z
)
S
M
O
D
T
H
1
n
(
b
o
d
ó
w
)
(65536  RLD) x 16 x 2
11,0592 1 FFh 57600
11,0592 1 FEh 28800
gdzie RLD to wartość początkowa, zapisana przez program użytkowni-
11,0592 1 FDh 19200
ka do pary rejestrów RLDH i RLDL. Jeżeli zastosujemy rezonator kwar-
11,0592 1 FCh 14400
cowy o częstotliwości np. 16 MHz to możliwe do uzyskania częstotli-
11,0592 1 FAh 9600
wości transmisji będą z przedziału:
11,0592 1 F4h 4800 7...50000 bitów / sek.
11,0592 1 E8h 2400
Praktyczne wskazówki
P
r
a
k
t
y
c
z
n
e
w
s
k
a
z
ó
w
k
i
11,0592 1 D0h 1200
Jak zatem zaprogramować rejestr sterujący portu szeregowego oraz
11,0592 1 A0h 600
jak zmusić do pracy licznik którego zadaniem będzie taktowanie trans-
misji. Oto przykład który pomogą wam zrozumieć ten problem.
14,7456 1 FFh 76800
14,7456 1 FEh 38400
Przykład
Zaprogramujemy UART tak, że będzie pracował w trybie asynchro-
14,7456 1 FCh 19200
nicznym 8-bitowymi znakami, a taktowany będzie licznikiem T1. Pręd-
14,7456 1 F8h 9600
kość transmisji określimy np. na 19200 bitów / sek (bodów). Inne war-
14,7456 1 F0h 4800
tości transmisji  patrz tabela.
14,7456 1 E0h 2400
Aha, byłby zapomniał, zakładamy że w systemie zastosowano rezo-
14,7456 1 C0h 1200
nator kwarcowy o Fxtal = 11,0592 MHz.
Oto sekwencja początkowa uruchamiająca pracę portu:
1,8432 1 FFh 9600 INIT_RS:
mov SCON, #01000000b ;tryb 1 portu
1,8432 1 FEh 4800
orl TMOD, #00100000b ;licznik T1 tryb pracy 8-bitowej
1,8432 1 FDh 2400
;liczy TL1 z automatycznym
1,8432 1 FAh 1200
;wpisywaniem wartości
1,8432 1 F4h 600
;początkowej
;z TH1
Jak zapewne się domyślacie wyzerowanie znacznika bitu SMOD w
orl PCON, #80h ;ustawienie SMOD = 1
rejestrze PCON (87h) spowoduje zmniejszenie o połowę wszystkich
mov TH1, #FDh ;prędkość = 19200 bodów
prędkości transmisji podanych w tabeli. I tu uwaga, ponieważ rejestr
;(tabela)
PCON nie może być adresowany bitowo, czyli nie da się zmodyfikować
setb TR1 ;start licznika T1 (TL1)
wspomnianego bitu w tym rejestrze instrukcja np.
..... ;i gotowe...
setb SMOD
Teraz wystarczy użyć procedur które opisałem wcześniej (INRS i
OUTRS) aby wysłać dowolny znak poprzez łącze szeregowe. Zmienia-
stąd trzeba użyć innego polecenia, a mianowicie:
jąc wartość ładowaną do rejestru TH1 (linia: mov TH1, #xx) można w
anl PCON, #7Fh ;aby SMOD = 0
dowolnej chwili zmieniać prędkość transmisji w zakresie zależnym o-
lub
czywiście od zastosowanego rezonatora kwarcowego.
orl PCON, #80h ;aby SMOD = 1
Analogicznie, opierając się o opis rejestru licznika T2CON (w kost-
sprawdzcie na kartce papieru lub kalkulatorze.
kach 8032/52) można zaprogramować i zmusić do pracy licznik T2, ra-
W tabeli podano najczęściej używane wartości rezonatorów kwarco-
dzę poeksperymentować w domu, oczywiście zaopatrując się wcześ-
wych dla zastosowań portu szeregowego 8051. Najbardziej popularną
niej w odpowiedni mikrokontroler.
jest wartość 11,0592 MHz, dość rozpowszechniona w handlu, w szcze-
No dobrze ale czy można bezpośrednio dołączyć końcówki portu pro-
gólnych zastosowaniach przydaje się rezonator o Fxtal = 14,7456 MHz,
cesora 8051 (TXD i RXD) do np. komputera PC ?... absolutnie nie. Po-
kiedy chcemy aby nasz mikroprocesor konsumował jak najmniej prądu
trzebny jest do tego odpowiedni konwerter poziomów napięć. Przykład
a jednocześnie pracował przy kilku standardowych prędkościach trans-
takiego rozwiązania powinien nasunąć się Wam sam, no tak przecież w
misji, powinniśmy użyć kostki w wersji CMOS (80C51/80C31) oraz za-
naszym komputerku edukacyjnym zastosowaliśmy taki właśnie układ,
stosować rezonator o Fxtal = 1,843200 MHz.
wykorzystujący popularną przetwornicę w postaci układu scalonego
Możliwe jest także w praktyce stosowanie  okrągłych wartości re-
MAX232 lub ICL232.
zonatorów kwarcowych, lecz w tym przypadku należy liczyć się z błęda-
Więcej na temat portu szeregowego możecie przeczytać w kilku o-
mi szybkości, które jednak przy małych prędkościach transmisji nie ma-
statnich numerach EdW (6, 7, 9 z roku 1997).
ją wielkiego znaczenia dla poprawnej pracy układu UART mikrokontro-
Dodatkowe szczegółowe informacje oraz specyficzne cechy układu
lera 8051. Wynika to z faktu że błędnie odebrany bit zawsze  leży po-
UART mikrokontrolera 8051 o pochodnych znajdziecie w dodatkowej li-
za transmitowanymi 9-cioma czy 10-cioma bitami (nie występuje), któ-
teraturze [1].
re wchodzą w skład transmitowanego w trybie asynchronicznym sło-
Sławomir Surowiński
S
ł
a
w
o
m
i
r
S
u
r
o
w
i
ń
s
k
i
wa. I tak np. z zastosowaniem rezonatora kwarcowego Fxtal = 12 MHz
możemy śmiało wymieniać dane z komputerem PC lub innym urządze- Literatura
niem wykorzystującym łącze szeregowe i standardowe prędkości
[1] A. Rydzewski  Mikrokomputery jednoukładowe rodziny MCS-51, WNT1992,
transmisji prędkościami: 1995
ELEKTRONIKA DLA WSZYSTKICH 4/98 39
Też to potrafisz
T
e
ż
t
o
p
o
t
r
a
f
i
s
z
Lekcja 7
7
W dzisiejszej lekcji rozwiążę zadania z poprzedniego miesiąca pop Acc
i wyjaśnię sposób wykonywania przytoczonych procedur arytme- ret
tycznych przez mikrokontroler 8051. dla ułatwienia będę numero-
wał wszystkie linie w nawiasach tuż obok komentarza. prawda że proste! komentarz jest chyba zbędny, poza wyjaśnie-
niem, dlaczego na początku procedury wyzerowano znacznik prze-
1. Procedura dodawania dwóch liczb 16-bitowych niesienia C. Otóż instrukcja SUBB procesora 8051 powoduje z de-
1
.
P
r
o
c
e
d
u
r
a
d
o
d
a
w
a
n
i
a
d
w
ó
c
h
l
i
c
z
b
1
6
b
i
t
o
w
y
c
h
finicji odjęcie dwóch składników działania z uwzględnieniem znacz-
Pierwszy składnik będzie np. umieszczony w rejestrach DPH i
DPL (DPTR) nika C. Toteż profilaktycznie należy go wyzerować przez wykona-
Drugi składnik dodawania będzie umieszczony w rejestrach B niem procedury, inaczej w przypadku gdy będzie C=1, wynik będzie
(starszy bajt) i A (młodszy bajt). W wyniku dodawania powstanie obarczony błędem (będzie za mały o 1). Podobnie jak poprzednio
liczba w rejestrach B.A oraz dodatkowo przy przekroczeniu zakresu procedurę można zapisać jako:
liczb zostanie ustawiony znacznik przeniesienia C.
; B.A = B.A  DPTR
; C.B.A = DPTR + B.A SUBB16_2:
ADD16: clr C
add A, DPL ;(1) dodanie LSB subb A, DPL
push Acc ;(2) przechowanie LSB wyniku na stosie xch A, B
mov A, B ;(3) przepisanie składnika MSB do Acc subb A, DPH
addc A, DPH ;(4) dodanie składnika 2 xch A, B
mov B, A ;(5) przepisanie wyniku do rejestru B ret
pop Acc ;(6) odtworzenie LSB wyniku
ret ;(7) i koniec (powrót) podprogramu Uwaga! W przypadku kiedy B. A będzie mniejsze od DPTR, obliczo-
U
w
a
g
a
!
ny zostanie moduł różnicy, a ujemny znak działania będzie sygna-
W podprogramie wykonano operację: lizowany ustawieniem znacznika C!
B A
3. Procedura mnożenia liczby 16-bitowej przez 8-bitową
3
.
P
r
o
c
e
d
u
r
a
m
n
o
ż
e
n
i
a
l
i
c
z
b
y
1
6
b
i
t
o
w
e
j
p
r
z
e
z
8
b
i
t
o
w
ą
+ DPH DPL
W tym przypadku pomnożymy zawartość rejestru DPTR przez
          
Acc (akumulator). Wynik będzie zatem 24-bitowy, a umieszczony w
C B A
DPTR. A (DPH. DPL. A)
Zauważmy że mnożenie możemy zapisać jako:
Popatrzmy na zapis matematyczny. Najpierw dodajemy składniki
DPH. DPL x Acc = DPL x Acc + DPH x Acc x 100h
a prawej strony, czyli A i DPL (linia 1). Potem aby dodać starsze baj-
Jak widać najpierw trzeba wymnożyć starszy (MSB) oraz młod-
ty (B i DPH) trzeba było użyć znowu akumulatora, lecz aby to zrobić
szy bajt (LSB) rejestru DPTR przez akumulator, a potem odpowied-
należało najpierw zachować wynik z Acc, stąd linia (2)  posłużono
nio dodać składniki. Wykonam zatem działania:
się stosem. Następnie przepisano zawartość B do A (linia 3), aby ją
wymnożę DPL x Acc
dodać za chwilę (linia 4) do MSB drugiego składnika, który przecież
mnożę DPH x Acc
znajduje się w DPH. Na końcu przepisano tak powstałą sumę MSB
a następnie dodam w kolejności
do rejestru B (linia 5) i odtworzono akumulator (linia 6).
A teraz dodatkowe zadanie, poniżej przedstawię alternatywny za-
DPH DPL 00h
pis powyższej procedury, spróbuj się zastanowić, dlaczego oba
+B A
przykłady w efekcie wykonują to samo?
               -
DPH DPL A
; C.B.A = DPTR + B.A
ADD16_2:
i w ten sposób otrzymam wynik. Skorzystam przy tym z instrukcji
add A, DPL
mnożenia dwóch liczb 8-bitowych. A oto procedura:
xch A, B
MUL24:
addc A, DPH
xch A, B
push Acc ;przechowanie mnożnika na stosie
ret
mov B, DPH
mul AB ;mnożenie DPH x Acc
2. Procedura odejmowania dwóch liczb 16-bitowych mov DPH, B ;i zapisanie wyniku  MSB
2
.
P
r
o
c
e
d
u
r
a
o
d
e
j
m
o
w
a
n
i
a
d
w
ó
c
h
l
i
c
z
b
1
6
b
i
t
o
w
y
c
h
push DPL ;przechowanie wyniku pośredniego
Odejmowanie dwóch liczb 16-bitowych przeprowadzimy w po-
mov DPL, A ;przepisanie LSB wyniku mnożenia DPH x Acc
dobny sposób jak to miało miejsce z dodawaniem, a więc od pary
pop B ;odtworzenie wyniku pośredniego
rejestrów B.A odejmiemy zawartość DPTR, wynik pozostanie w B.A
pop Acc ;odtworzenie mnożnika
; B.A = B.A  DPTR mul AB ;mnożenie DPL x Acc
SUBB16: xch A, B
clr C ;wyzerowanie znacznika C add A, DPL ;dodanie Acc + DPL
subb A, DPL mov DPL, A
push Acc jnc less ;czy > FFh
mov A, B inc DPH ;tak to korekcja na DPH wyniku
subb A, DPH less: xch A, B ;odtworzenie Acc
mov B, A ret ;...i koniec mnożenia, wynik w DPTR. A
40 ELEKTRONIKA DLA WSZYSTKICH 4/98
Też to potrafisz
T
e
ż
t
o
p
o
t
r
a
f
i
s
z
4. Procedura dekrementacji z korekcją akumulatora pop Acc ;(9) tak to odtwórz wynik
4
.
P
r
o
c
e
d
u
r
a
d
e
k
r
e
m
e
n
t
a
c
j
i
z
k
o
r
e
k
c
j
ą
a
k
u
m
u
l
a
t
o
r
a
anl A,#0F0h ;(10) i zamaskuj 4 lsb
Jak wiemy zastosowanie instrukcji
orl A,#9 ;(11) a na miejsce 4 lsb wpisz cyfrę  9
ret ;(12) i zakończ podprogram
dec A
nieF: pop Acc ;(13) jeżeli druga cyfra to nie  F to
;odtwórz wynik
w przypadku kiedy w akumulatorze znajduje się liczba np. 50h da w
ret ;(14) i zakończ podprogram
rezultacie wynik w postaci liczby 4Fh. A co zrobić aby zamiast ta-
kiego wyniku otrzymać po  podobną do ludzi liczbę 49h. Do takiej
Procedura sprawdza trzy warunki:
dekrementacji czyli zmniejszania o 1 liczb zapisanych w kodzie
a) jeżeli w akumulatorze jest liczba 0, to wpisywana jest liczba 99h
BCD, posłużyć może poniższa procedura, oto ona:
i procedura zostaje zakończona (linie 1...3)
DECACC:
b) jeżeli po zwyczajnym odjęciu jedynki (linia 5) druga cyfra wyniku
jnz nie0 ;(1) sprawdzenie czy Acc=0
jest równa  F to przeprowadzana jest konwersja wyniku do po-
mov A,#99h ;(2) tak to załadowanie liczby 99h
staci BCD  linie 9...11. Taka sytuacja ma miejsce gdy liczba we-
ret ;(3) i powrót z podprogramu
jściowa jest  okrągła czyli np. 30h, 40h, 50h, 60h, itp.
nie0: clr C ;(4) nie to zeruj wskaznik C
c) jeżeli po odjęciu jedynki druga cyfra wyniku jest z przedziału 0...9
subb A,#1 ;(5) odejmij od akumulatora 1
to nie rób nic tylko opuść podprogram  wynik jest w porządku.
push Acc ;(6) i przechowaj wynik na stosie
Sytuacja taka mam miejsce w przypadku gdy liczba wejściowa
anl A,#0Fh ;(7) zamaskuj 4 msb wyniku
ma na drugiej pozycji cyfrę z przedziału: 1...9.
cjne A,#0Fh,nieF ;(8) czy druga cyfra to  F ?
Kącik pocztowy 8051
Zasypany wieloma listami, dotyczącymi cyklu artykułów poświęconych programowaniu mik-
rokontrolerów 8051, postanowiłem uruchomić kącik pytań i odpowiedzi, które kierujecie do
mnie w swoich listach.
Na wstępie chciałem bardzo podziękować za każdy list, zarówno te pochwalne jak i krytycz-
ne. Przyznam że, cieszy mnie bardzo fakt, iż tak wielu z Was zdecydowało się sięgnąć po
 mikroprocesory , a co najważniejsze odnosi już małe ale jak ważne w nauce sukcesy.
R
a
f
a
ł
o
w
i
M
a
j
Na początek chciałem szczególnie podziękować: Rafałowi Maj- wynika z waszych listów, częste próby wykonywania układu na
dzie z Krakowa, Hubertowi Hawłasowi z Warszawy, Zdzisławowi własnych PCB kończą się problemami. Podziwiam jednak determi-
d
z
i
e
H
u
b
e
r
t
o
w
i
H
a
w
ł
a
s
o
w
i
Z
d
z
i
s
ł
a
w
o
w
i
Chmielewskiemu z Tomaszowa Mazowieckiego, Robertowi Szy- nację Czytelników i chęć wykonania wszystkiego samemu (sam ta-
C
h
m
i
e
l
e
w
s
k
i
e
m
u
R
o
b
e
r
t
o
w
i
S
z
y
maszkowi z Bielsko-Białej, Tomaszowi Jabłonowskiemu z Moniek, ki byłem), dlatego informuję że zaprogramowany EPROM można
m
a
s
z
k
o
w
i
T
o
m
a
s
z
o
w
i
J
a
b
ł
o
n
o
w
s
k
i
e
m
u
Jarosławowi Chudobie z Gorzowa Wlkp. nabyć za pośrednictwem Działu Handlowego AVT.
J
a
r
o
s
ł
a
w
o
w
i
C
h
u
d
o
b
i
e
W
i
e
s
ł
a
w
a
Z
a
c
h
a
r
s
k
i
e
g
o
Specjalnie podziękowania także dla pana Wiesława Zacharskiego
z Karoliną i Piotrkiem. *
K
o
n
r
a
d
a
I
w
a
n
i
u
k
a
Chciałbym jednocześnie uspokoić Konrada Iwaniuka z Mysłowic,
...Jeżeli chodzi o sam układ (elektroniczny) to zastrzeżeń nie
drogi Konradzie prześlij swój komputerek pod adresem redakcji AVT
mam, ale jeżeli chodzi o zaprojektowana płytkę, to zastanawia mnie
z dopiskiem na kopercie  Serwis , problem zostanie rozwiązany.
kilka rzeczy: czy umieszczone złącze ARK do zasilania jest tu najlep-
P
r
z
e
m
k
a
P
i
e
t
r
z
y
k
a
Wyrazy uznania dla Przemka Pietrzyka z Lublina za jego wyczer- szym rozwiązaniem... lepiej by było zastosować standardowy wtyk
pujący list z zamieszczonymi, własnoręcznie napisanymi programi- zasilania. nie wiem czym kierował się projektant płytki podłączając
kami  brawa  ręczniakom .
w dość dziwnej kolejności linie do złącza PORT, nie wierzę w to że
na dwustronnej płytce nie dało się połączyć tego normalnie. Jak już
Gorąca prośba ode mnie: piszcie proszę swoje adresy nie tylko
wspomniałem mam płytki przykręcone jedna nad drugą i prawdę
na kopertach ale także w treści korespondencji. Przyznam że czę- mówiąc jedne otwór mi nie pasował, wiem że przeszkadza wy-
sto koperty z natury swojej zostają oddzielone o listu i pózniejsze
świetlacz, ale czy nie dało się tego poprzesuwać...
dopasowanie obu części jest praktycznie niemożliwe.
Hubert Hawłas z Warszawy
H
u
b
e
r
t
H
a
w
ł
a
s
z
W
a
r
s
z
a
w
y
No dobrze, przejdzmy zatem do kilku listów.
A
n
d
r
z
e
j
a
M
i
l
e
w
Jako odpowiedz cytuje fragment innego listu Andrzeja Milew-
skiego z Torunia:
s
k
i
e
g
o
z
T
o
r
u
n
i
a
:
*
... trafne moim zdaniem było zastosowanie typowego złącza ARK
...Jestem początkującym studentem telekomunikacji jak również
roli gniazda doprowadzającego zasilanie do układu. W wielu kon-
czytelnikiem gazety EdW. ... Nawiązując do sprawy z zaciekawie-
strukcjach  kitach AVT używacie nietypowych, różnych gniazd za-
niem śledzę artykuły dotyczące 8051, lecz zakup kitu jest dość
silających, a każdy elektronik zdaje sobie sprawę, że w tej dobie na
kosztowny i moje pytanie i prośba do Was  czy jest możliwość za-
rynku nie panuje praktycznie żaden standard, przynajmniej jeżeli
kupienia samej kostki EPROM wraz z  monitorem ?
chodzi o układy niskonapięciowe...
Rafał Majda z Krakowa
R
a
f
a
ł
M
a
j
d
a
z
K
r
a
k
o
w
a
Sposób wyprowadzania sygnałów na złącz komputerka opisuje
Krzysztof Wójcik z Gdańska, mianowicie:
K
r
z
y
s
z
t
o
f
W
ó
j
c
i
k
Odpowiedz: No cóż, nie wszystkim dobrze się powodzi, aczkolwiek
O
d
p
o
w
i
e
d
z
:
przyznam że trochę jestem zaskoczony twierdzeniem że kit kompu- ... zresztą każdy wie, że porządkowanie sygnałów na złączach po-
terka jest kosztowny. Muszą przyznać że AVT poczyniło wszelkie woduje zwiększenie komplikacji druku a im więcej przelotek na
kroki, aby ów zestaw był jak najtańszy. Porównując obecne ceny u- płytce szczególnie dwustronnej, tym większe prawdopodobień-
kładów scalonych oraz płytek drukowanych doszedłem wielokrot- stwo uszkodzenia mechanicznego płytki podczas wielu godzin pra-
nie do wniosku, że samodzielny zakup elementów oraz wykonanie cy z komputerem edukacyjnym.... I chwała za to autorowi, bowiem
(ręczne !, tak ręczne) płytek w sumie daje koszt zbliżony do ceny przyznać musze że wykonując płytki samodzielnie miałem mniej ot-
zestawu. Dochodzi do tego sprawa pozornej prostoty układu, i jak worów do wiercenia...
ELEKTRONIKA DLA WSZYSTKICH 4/98 41
Też to potrafisz
T
e
ż
t
o
p
o
t
r
a
f
i
s
z
Sprawa sposobu mocowania obu płytek, obok siebie, czy jedna ły akceptowane przez kompilator oferowany na dyskietce : AVT-
nad drugą, jest dyskusyjna, w każdym razie otrzymuję od Czytelni- 2250/D. Otóż aby wszystko było w porządku, jak już wspominałem
ków zdjęcia komputerków obudowanych w różny sposób. Wszyst- przy pisaniu programów, obowiązuje zasada, że wszystkie etykiety
kie wyglądają wspaniale! Oby tak dalej. powinny zaczynać się od pierwszej kolumny tekstu (czyli najbliżej
P
r
z
e
m
y
s
ł
a
w
P
i
e
r
t
r
z
y
k
Nieco szerszy list napisał Przemysław Piertrzyk z Lublina, który brzegu). Pan Tomasz zwraca uwagę, że w artykułach klasy mikrop-
postanowił zastosować w czasie świąt komputerek do sterowania rocesorowej przy opisywaniu kompilatora AVT-2250/D nie podano
lampkami na choince  i bardzo dobrze! tego faktu.
... Wykorzystałem do tego specjalne złącze z wyprowadzeniami Odpowiadam: na dyskietce znajduje się zbiór tekstowy, w któ-
portu P1 i na próbę zmontowałem układ z 8-miu diod LED tak by rym wymienione są wszystkie zasady pisania programów zródło-
każda odpowiadała innemu bitowi portu. Układ próbny miałem go- wych na zawarty kompilator, proszę tylko go przeczytać. W artyku-
towy, teraz wystarczył tylko program. ... łach pominięto niektóre informacje zawarte w treści tego zbioru, ze
Ponieważ Przemek jest ręczniakiem, musiał samodzielnie napi- względu na fakt, że część czytelników tzw.  ręczniaków nie korzy-
sać a następnie zamienić na kod maszynowy programik do stero- sta w ogóle z kompilatora, i taki opis byłby praktycznie zbędny.
wania lampkami. Pierwsza wersja programu nie działała popra- Dlatego zachęcam do przestudiowania zbioru tekstowego zawar-
wnie  powodowała zawieszanie się systemu, druga zaś jak pisze tego na dyskietce, z pewnością rozwieje on wszystkie wątpliwości.
nasz czytelnik działa znakomicie, dlatego przytaczam ja poniżej ja- W swoim jakże ciekawym liście, Tomasz porusza także sprawę
ko dobry i prosty przykład. Przemek do efektu tzw. biegnącego prób wyświetlania liczb większych niż te akceptowane przez proce-
światła wykorzystał instrukcję rotacji akumulatora (RL A i RR A). durę A2HEX, opisywaną przy okazji prezentowania Bios u kompu-
Oto listing. terka. Przytacza prosty programik próbny, dzięki któremu na pozy-
kod etyk mnemonik komentarz cjach DL3,4, i 5 zostają wyświetlona liczba 123.
74FE pr1: mov A,#254 ;załadowanie do A liczby 254 Zamieszcza listing tego programu, oto on:
(11111110) include const.inc
12801A pr_1: lcall wait ;wywołanie podprogramu include bios.inc
;opóznienia
F590 mov 90h, A ;wyświetlenie A w porcie P1 org 8000h
23 rl A ;rotacja bitów A w lewo lcall CLS
;(11111101) mov DL3, #_1
309702 jnb 97h, pr2 ;skok jeśli najstarszy bit P1 mov DL4, #_2
jest =0 mov DL5, #_3
80F5 sjmp pr_1 ;skok do etykiety pr_1
747F pr2: mov A, #127 ;załadowanie do A liczby 127 END
;(01111111)
12801A pr_2: lcall wait ;wywołanie programu Program jest jak najbardziej poprawny, z jednym wyjątkiem, jego
;opóznienia wpisanie do komputerka i wykonanie spowoduje że system  pój-
F590 mov 90h, A ;wyświetlenie A w porcie P1 dzie w maliny , a to ze względu na brak na końcu programu przed
03 rr A ;rotacja bitów A w prawo deklaracją END pętli zatrzymującej program w postaci np.:
3090E1 jnb 90h, pr1 ;skok do pr.1 jeżeli najmłodszy stop: SJMP stop
;bit P1=0 Ponieważ mówiłem w artykule dwa miesiące temu o konieczno-
;następny cykl ści stosowania tego polecenia, nie będę przypominał konsekwencji
80F5 sjmp pr_2 ;skok do etykiety pr_2 wykonania programu, który kończy się bez tej nieskończonej pętli
;(od początku) (lub innego skoku bezwzględnego  gdzieś w górę programu). Pro-
szę zatem pamiętać o stosowaniu tego zalecenia, w przeciwnym
wait: ;definicja procedury  wait przypadku przy wykonaniu tego programu nie zobaczy się efektu
C0E0 push Acc ;przechowaj A na stosie swojej pracy, bowiem natychmiast po wyświetleniu liczby 123, na
7433 mov A, #51 ;czas opóznienia = 51 x 4 ms wyświetlaczu prawdopodobnie pojawi się komunikat  -HELLO ,
;(ok. 200ms) znany wszystkim, a sygnalizujący zresetowanie komputerka.
120295 lcall DELAY ;wywołanie systemowej
proc. opóznienia W kolejnej skrzynce porad omówię pozostałe listy, na razie po-
D0E0 pop Acc ;odtworzenie akumulatora zdrawiam wszystkich sympatyków i uczestników Klasy
22 ret ;i powrót z podprogramu Mikroprocesorowej!
Sławomir Surowiński
S
ł
a
w
o
m
i
r
S
u
r
o
w
i
ń
s
k
i
Przemysław pyta także o możliwość zastosowania komputerka
jako timera- zegara, tematem tym zajmę się w kolejnym odcinku
przy okazji omawiania układu przerwań kontrolera i układu liczniko-
wego oraz sposobów praktycznego ich programowania.
I na koniec uwaga Przemka dotycząca treści artykułu klasy mik-
roprocesorowej z 11 numeru EdW z poprzedniego roku, gdzie ob-
jaśniano przykład obliczania skoku do etykiety  w górę . W artyku-
le wkradł się błąd, napisano mianowicie, że:
... jeżeli policzona ilość bajtów jest równa 10 (0Ah), to przy skoku
 w górę będzie:
1
0
0
h
U2ofset = 100h  F6h...
Oczywiście zamiast liczby 100h powinno być FFh, za zwrócenie
uwagi na błąd w treści bardzo dziękuję, jak widać chochlik drukar-
ski nie śpi.
*
Tomasz Jabłonowski jako  komputerowiec w swoim liście po-
T
o
m
a
s
z
J
a
b
ł
o
n
o
w
s
k
i
rusza sprawę sposobu pisania programów zródłowych tak, aby by-
42 ELEKTRONIKA DLA WSZYSTKICH 4/98


Wyszukiwarka

Podobne podstrony:
Mikrokontrolery ARM cz12
Mikrokontrolery ARM cz1
Fotogrametria cz12 teledetekcja cz2
Mikrokomputer Pecel z procesorem AT90S8535 cz 3
Mikrokontrolery ARM cz10
Mikrokontrolery PIC w praktycznych zastosowaniach mipicp
Mikrokontrolery ARM cz8
Mikrokontrolery cz1 (2)
Mikrokontrolery To takie proste, cz 15 (układ licznikowy w 8052C & specjalne tryby pracy 8051)
Układy licznikowe mikrokontrolera 8051

więcej podobnych podstron