Bascom Collage Elektronika Dla Wszystkich


Hit roku 2000
BASCOM College
B
A
S
C
O
M
C
o
l
l
e
g
e
BASCOM College
B
A
S
C
O
M
C
o
l
l
e
g
e
Pierwsze programy
P
i
e
r
w
s
z
e
p
r
o
g
r
a
m
y
Pierwsze programy
P
i
e
r
w
s
z
e
p
r
o
g
r
a
m
y
Ćwiczenie
Witam ponownie Studentów BASCOM dzić do uszkodzenia portu równoległego, dowanego w procesor, a jego stan, a tym sa-
College. W wykładzie wchłonęliśmy już spo- a tym samym płyty głównej nowoczesnego mym informację o relacji pomiędzy napięcia-
rą dawkę teorii dotyczącej wyświetlaczy komputera!
LCD, wypróbowaliśmy wbudowany w pa-
PORT P1
kiet BASCOM symulator programowy i naj-
Pin portu Pin układu Funkcja Funkcja dodatkowa Uwagi
P1.0 12 IN/OUT Wejście  + komparatora analogowego Brak rezystora podciągającego
wyższa już pora na bliższe zapoznanie się
P1.1 13 IN/OUT Wejście  - komparatora analogowego Brak rezystora podciągającego
z jednym z najważniejszych elementów na-
P1.2 14 IN/OUT Brak
szego systemu edukacyjnego - płytką testo-
P1.3 15 IN/OUT Brak
wą. Podczas tego ćwiczenia poznamy także P1.4 16 IN/OUT Brak
P1.5 17 IN/OUT Brak
praktycznie podstawowe polecenia odnoszą-
P1.6 18 IN/OUT Brak
ce się do operacji dokonywanych na portach
P1.7 19 IN/OUT Brak
i pojedynczych wyprowadzeniach procesora
89C2051. Jeżeli zostanie nam dość czasu, to mi dołączonymi do wejść komparatora, mo-
spróbujemy także emulacji sprzętowej wy- Operacje na portach i po- żemy odczytać na drodze programowej.
świetlacza LCD. jedynczych pinach proce- Sądzę, że warto uporządkować sobie
Zacznijmy od bliższego zapoznania się sora 89C2051 informacje na temat portów procesora
z płytką testową AVT-2500. Zanim jednak W struktury procesorów podrodziny  2051, tym bardziej, że wiele ich pinów
przejdziemy do tej części ćwiczenia, chciał- 89CX051 wbudowane są dwa ośmiobitowe spełnia dodatkowe, niekiedy bardzo uży-
bym wyjaśnić pewne nieporozumienie, które porty wejściowo-wyjściowe nazwane, P1 teczne funkcje.
powstało w związku z konstrukcją naszej i P3. Zapewnia
PORT P3
Pin Pin
płytki. Od kilku dociekliwych Czytelników to procesorowi
Funkcja Funkcja dodatkowa Uwagi
portu układu
otrzymałem e-maile informujące o błędach możliwość ko- P3.0 2 IN/OUT Wejście RXD toru transmisji RS232
P3.1 3 IN/OUT Wejście TXD toru transmisji RS232
na płytce testowej! Błędy te miały polegać munikacji ze
Aktywne opadającym
P3.2 6 IN/OUT Wejście przerwania zewnętrznego INT0
zboczem lub poziomem
na nieumieszczeniu na schemacie złącza światem zewnę-
Aktywne opadającym
P3.3 7 IN/OUT Wejście przerwania zewnętrznego INT1
oznaczonego jako ISP oraz jumpera JP7. trznym, przyj-
zboczem lub poziomem
P3.4 8 IN/OUT Wejście timera 0
Rzeczywiście, elementy te zostały celowo mowanie z nie-
P3.5 9 IN/OUT Wejście timera 1
pominięte na schemacie, ponieważ nie go potrzebnych Odczyt stanu tego
P3.6 - IN/OUT Wewnętrzne wyjście komparatora analogowego wyjścia jest możliwy
chciałem bez potrzeby komplikować rysun- i nf or macj i ,
tylko na drodze programowej
P3.7 11 IN/OUT Brak
ku przez wprowadzanie do niego dodatko- a także wysyła-
wych, potrzebnych dopiero w dalekiej przy- nie danych do układów peryferyjnych i stero- Bardzo ważna uwaga!
szłości składników.Zakładam, że przeszli- wanie urządzeniami podporządkowanymi. Dwa wejścia portu P1: P1.0 i P1.1 nie zo-
ście już przez męki związane z wlutowa- Do dyspozycji mamy piętnaście wejść stały wyposażone w wewnętrzne rezystory
niem w płytkę testową blisko 100 kołecz- i wyjść, które możemy wykorzystywać zgo- podciągające! Jeżeli jedno z tych wyjść
ków, że nie poparzyliście się podczas pod- dnie z aktualnymi potrzebami. Z pewnością ustawimy w stan niski, to będzie ono zacho-
grzewania izolacji termokurczliwej na prze- wielu Czytelników zwróciło uwagę na drob- wywać się dokładnie tak, jak pozostałe ak-
wodach montażowych i że gotowa płytka te- ną nieścisłość w poprzednim zdaniu. Naj- tywne wyprowadzenia procesora: wewnę-
stowa leży przed Wami na biurku. Pozosta- pierw mówiliśmy o dwóch ośmiobitowych trzny rezystor wymusi na nim stan wysoki.
je więc już tylko dołączyć ją do komputera portach, a następnie o piętnastu wejściach! Jeżeli jednak ustawimy P1.0 lub P1.1 w stan
oraz zasilania i rozpocząć pracę. Na szczęście nie była to pomyłka: procesor wysoki, to wyjście to bez stosowania elemen-
Uwaga! Dołączanie płytki do kompute- 89C2051 rzeczywiście posiada dwa pełne tów zewnętrznych będzie  wisieć w powie-
ra może odbywać się wyłącznie przy odłą- porty ośmiobitowe, z tym jednak, że wyjście trzu i nie będzie mogło być wykorzystane
czonym zasilaniu obydwóch urządzeń. Nie- 6 portu P3 nie jest dostępne z zewnątrz. Jest np. do sterowania bazy tranzystora lub in-
spełnienie tego warunku może doprowa- to wyjście komparatora analogowego wbu- nego wejścia bez rezystora podciągającego.
Elektronika dla Wszystkich
23
BASCOM
Na razie zajmiemy się tylko podstawowy-
mi funkcjami pełnionymi przez porty proce-
sora 89C2051. Funkcje dodatkowe będziemy
poznawać stopniowo, w miarę zdobywania
kolejnych porcji wiedzy o programowaniu
w języku MCS BASIC.
Na rysunku 1 został pokazany schemat
połączeń, jakie będziemy musieli wykonać
w celu przerobienia materiału dzisiejszych
ćwiczeń, a rysunek 2 pokazuje schemat mon-
tażowy: połączenia, które będziemy musieli
wykonać na płytce testowej w celu wykona-
nia pierwszych ćwiczeń.
Wszystkie ćwiczenia będziemy mogli
przerobić na trzech  poziomach : za pomocą
emulatora programowego, emulatora sprzę-
towego oraz wykorzystując zaprogramowa-
ny procesor.
Operacje na portach procesora  2051 mo-
żemy przeprowadzać wykorzystując polece-
nia programowe odnoszące się bądz do całe-
go portu, bądz do pojedynczych pinów. Naj-
prostszymi poleceniami, za pomocą których
możemy zmienić stan pojedynczego wypro- Rys. 1
wadzenia są: To chyba najkrótszy program, jaki kiedy-
kolwiek został napisany, ale jego działanie nie wiernie wszystkie czynności wykonywane
SET [port.pin] oraz RESET [port.pin] jest pozbawione sensu. Kompilujemy nasz przez procesor, a nie tylko te, których wykona-
program (za pomocą naciśnięcia klawisza F7 nie zostało przewidziane w testowanym pro-
Wydanie polecenia SET powoduje ustawie- możemy podać dowolną nazwę pliku lub po- gramie. Aby wykonywanie programu mogło
nie wyznaczonego pinu w stan wysoki. zostawić  NONAME ), a następnie naciska- się rozpocząć, procesor przez okres co naj-
Wydanie polecenia RESET powoduje my klawisz F2 wywołując w ten sposób panel mniej dwóch taktów zegarowych musi znajdo-
ustawienie wyznaczonego pinu w stan niski. symulatora sprzętowego i programowego. wać się w stanie RESET, co połączone jest
Np.: Klawiszem oznaczonym strzałką uruchamia- z wystąpieniem na wszystkich wyjściach po-
SET P3.0 spowoduje wystąpienie stanu my nasz program i pilnie obserwujemy okien- rtów stanu wysokiego. Dopiero po ustąpieniu
wysokiego na wyprowadzeniu 0 portu P3 ko emulacji programowej, w którym zobrazo- stanu wysokiego z wejścia RESET procesora,
wane są stany wyjść wszystkich portów proce- może on rozpocząć normalną pracę.
RESET P3.1 spowoduje wystąpienie sora (także portów P0 i P2, które nie istnieją Uruchommy teraz jeszcze raz nasz progra-
stanu niskiego na wyprowadzeniu 1 wprawdzie w procesorze  2051, ale których mik obserwując tym razem płytkę testową.
portu P3 emulacja jest potrzebna przy korzystaniu Aha, zapomniałem powiedzieć, że symulator
z  większych  51). sprzętowy i programowy mogą działać jedno-
Jeszcze prościej możemy dokonywać ope- Zgodnie z przewidywaniami, po wykona- cześnie. Spowalnia to trochę pracę programu
racji odnoszących się do całego portu. niu naszego programu wszystkie wyjścia po- i nie zawsze ma sens, ale w przypadku pro-
rtu P3 znalazły się w stanie niskim, co sygnali- stych ćwiczeń nie ma to większego znaczenia.
P[1,3] = [ X (liczba z zakresu 0 ...255)] zowane jest wyłączeniem wszystkich symbo- Od razu zauważymy, że zaszły na niej zjawi-
lizujących je lampek (rys. 3). Powtórzmy na- ska z pozoru odwrotne do tych, jaki obserwo-
Wydanie tego polecenia powoduje sze doświadczenie kilkakrotnie, cały czas ob- waliśmy w okienku emulatora programowe-
wysłanie binarnej reprezentacji liczby X serwując ekran emulatora programowego. Są- go. Wszystkie diody LED najpierw zgasły na
na wyjścia wskazanego portu dzę, że wszyscy z Was zauważyli już pewne moment, a potem zapaliły się ponownie. Jed-
dziwne zjawisko, występujące po każdorazo- nak i tym razem wszystko jest w porządku:
Np. wym uruchomieniu naszego programu. Otóż, Diody LED na naszej płytce testowej
P3 = 0 spowoduje ustawienie wszystkich lampki obrazujące stan wyjść portu P3 zapala- włączone są pomiędzy wyjścia procesora
wyjść portu P3 w stan niski ją się na moment, aby następnie, zgodnie z po- (lub emulatora sprzętowego) a plus zasila-
P3 = 255 spowoduje ustawienie wszyst- leceniem programowym zgasnąć. Oznacza to, nia i świecą przy stanie niskim dołączonego
kich wyjść portu P3 w stan wysoki. że po uruchomieniu wszystkie wyjścia portu do nich wyjścia.
P3 = 3 spowoduje wysłanie na wyjścia P3 przyjmują na moment stan wysoki, a dopie- Poćwiczmy jeszcze trochę wysyłanie da-
portu P3 liczby "3", czyli ustawienie w ro po chwili, zgodnie z wydanym poleceniem, nych do portów procesora i ożywmy trochę
stan wysoki wyjść P3.0 i P3.1. stan niski. Co jest, czyżby błąd w programie naszą płytkę testową. Piszemy kolejny,
emulatora? Nic podobnego, emulator oddaje króciutki programik:
Sprawdzmy teraz w praktyce, czy rzeczywi-
$sim 'zawiadomienie kompilatora, że program będzie testowany w symulacji 'sprzętowej lub
ście podane polecenia funkcjonują poprawnie.
programowej
Uruchamiamy program BASCOM i w okienku
Dim R As Byte 'deklaracja zmiennej R
edytora piszemy sobie następujący programik:
For R = 1 To 255 'od wartości R = 1 do osiągnięcia wartości R=255 powtarzaj:
P3 = R 'wyślij do portu P3 aktualną wartość R
P3= 0
Next R 'powtórz powyższą instrukcję
End
End 'po wyjściu z pętli FOR .... NEXT koniec programu
Elektronika dla Wszystkich
24
BASCOM
i po skompilowaniu uruchamiamy go w sy- włączenie segmentów  b i  c wyświetla- w tabelkę zawartą w tym okienku odpowie-
mulacji programowej i sprzętowej. Efekt jest cza, a pozostałe segmenty muszą być wyłą- dnie wartości, zgodnie z tabelą:
nawet ładny: wszystkie diody zapalają się czone. Segment  b sterowany jest z wyjścia Klikamy  OK
Segment Pin
i gasną, wyczerpując wszystkie możliwe P3.1, a segment  c z wyjścia P3.2 proceso- w okienku konfigura-
A P3.0
kombinacje kodu dwójkowego z zakresu od ra. A zatem liczba, której podanie na wyjścia cyjnym i uruchamiamy
B P3.1
C P3.2
1 do 255 w okienku emulatora sprzętowego portu P3 spowoduje ukazanie się na wyświe- program. BINGO! Na
D P3.3
i od 1 do 32 na płytce testowej, na której nie tlaczu upragnionej jedynki to binarnie: wyświetlaczu ukazała
E P3.4
zmieściła się już większa liczba diod. 0X00 0110 się cyfra  1 i wszystko
F P3.5
Jak jednak będziemy musieli postąpić, je- gdzie X - bit nieznaczący (pamiętajmy, że wskazuje na to, że do-
G P3.7
żeli naszym zamiarem będzie zmiana stanu wyjście P3.6 nie może być w jakikolwiek spo- kładnie tak samo za-
tylko jednego wyprowadzenia któregoś z po- sób sterowane od  strony procesora i nie jest chowa się wyświetlacz na naszej płytce testo-
rtów, bez ingerowania w stan pozostałych wyprowadzone na zewnątrz kostki. Liczba bi- wej, oczywiście po włączeniu symulacji sprzę-
wejść lub wyjść? To bardzo proste, napiszmy narna 0000 0110 to w kodzie dziesiętnym po towej i ponownym uruchomieniu programu!
sobie mały program: prostu  6 . A zatem piszemy: Zajmijmy się teraz określeniem, jakie
wartości należy wysłać do portu P3, aby uzy-
P3 = 0 'wyślij na wyjścia portu P3 liczbę "0"
p3= 6 skać wyświetlanie pozostałych dziewięciu
Do
End cyfr. Wykonałem tę pracę za Was, a jej wy-
Set P3.1 'ustaw stan wysoki na zadanym wyjściu portu (P3.1)
nik pokazany został w poniższej tabeli.
Reset P3.1'ustawia stan niski na zadanym wyjściu portu (P3.1)
i kompilujemy ten wyjątko- Pozostaje nam zatem praktyczne sprawdze-
Loop
wo  rozbudowany pro- nie poprawności moich obliczeń (wykona-
I jak zwykle: F7, F2 i już możemy oglądać gram. Następnie możemy uruchomić go w sy- nych dla przyśpieszenia pracy w arkuszu
rezultaty działania poleceń SET i RESET. mulacji sprzętowej i/lub programowej, ale naj- kalkulacyjnym MS EXCELL). Bierzmy się
Zgodnie z naszymi oczekiwaniami dioda do- pierw musimy wykonać jeszcze jedną czyn- zatem do napisania pierwszego nieco bar-
łączona do wyjścia 1 portu P3 migocze, a po- ność. Z pewnością zauważyliście rysunek wy- dziej rozbudowanego programu.
zostałe pozostają wyłączone. Możliwość do- świetlacza siedmiosegmentowego
Segment G F E D C B A Wartość
konywania operacji na pojedynczych wyj- w okienku symulatora programowego.
Cyfra
ściach portów ma ogromne znaczenia prak- Nie jest to bynajmniej ozdoba, ale ko-
tyczne i upraszcza pisanie programów, o czym lejny  fajerwerk pakietu BASCOM,
0 0 1 1 1 1 1 1 63
przekonacie się w najbliższej przyszłości. ułatwiający programistom życie. Jed-
1 0 0 0 0 1 1 0 6
Jak dotąd, wszystkie wykonane ćwiczenia nak aby z niego skorzystać, musimy go
2 1 0 1 1 0 1 1 155
nie miały większego zastosowania użytkowe- najpierw odpowiednio skonfigurować,
3 1 0 0 1 1 1 1 143
go i służyły wyłącznie celom poznawczym. czyli przypisać odpowiednie segmenty
Spróbujmy teraz zrobić coś, co nie tylko bę- emulowanego wyświetlacza odpowia- 4 1 1 0 0 1 1 0 166
dzie ćwiczeniem szkoleniowym, ale znajdzie dającym im wyprowadzeniom portu
5 1 1 0 1 1 0 1 173
praktyczne zastosowanie: uruchommy wy- procesora. Naprowadzamy zatem kur-
6 1 1 1 1 1 0 1 189
świetlacz siedmiosegmentowy na płytce te- sor na rysunek wyświetlacza i klikamy
7 0 0 0 0 1 1 1 7
stowej i w emulacji programowej. PRAWYM klawiszkiem myszki. Na-
8 1 1 1 1 1 1 1 191
Popatrzmy przez chwilę na schemat naszej stępstwem tego odważnego kroku jest
płytki testowej zamieszczony w numerze rozwinięcie się okienka konfiguracyj- 9 1 1 0 1 1 1 1 175
3/2000 Elektroniki dla Wszystkich i na samą nego wyświetlacza, pokazanego na
płytkę. W układzie został zastosowany wy- rysunku 5. Następnie wpisujemy
świetlacz siedmiosegmentowy ze wspólną Rys. 2
anodą, a do wejść każdego z segmentów zo-
stał dołączony tranzystor NPN, który po spo-
laryzowaniu bazy będzie zwierał odpowiada-
jący mu segment do masy, włączając go.
A więc, podając na odpowiednie wejścia,
oznaczone na płytce jako a ... g, stan wysoki
możemy uzyskać włączanie odpowiednich
segmentów wyświetlacza i obrazować na nim
cyfry, a także inne znaki możliwe do zdefinio-
wania za pomocą siedmiu świecących seg-
mentów. Jeżeli zatem dołączymy wejścia a ....
g do wyjść jednego z portów procesora, to wy-
starczy wysyłać do tego portu odpowiednie
liczby, odpowiadające kodowi wyświetlacza
siedmiosegmentowego, aby uzyskać wyświe-
tlanie żądanych cyfr. A więc, do dzieła: zmon-
tujmy na płytce testowej układ przedstawiony
na rysunku 1 - 2 i na schemacie montażowym
z rysunku 4 i zastanówmy się, jakie liczby bę-
dziemy musieli wysyłać do portu P3 proceso-
ra, aby uzyskać wyświetlanie cyfr od 0 do 9.
Przeanalizujmy najprostszy przypadek:
cyfrę  1 . Do jej wyświetlenia niezbędne jest
Elektronika dla Wszystkich
25
BASCOM
Pierwszym problemem, jaki będziemy mu- Po wydaniu tego polecenia kompilator zare- skompilowaniu i uruchomieniu załaduje on
sieli rozwiązać, będzie z pewnością sprawa zerwuje sobie w pamięci już nie pojedynczą wprawdzie potrzebne dane do pamięci i nic
uporządkowania obliczonych wartości tak, komórkę, ale jakby malutką szafkę z dziesię- więcej. A więc, musimy jeszcze chwilę po-
abyśmy mogli z nich korzystać w możliwie cioma (pierwsza szafka ma numer  0 ) szuflad- pracować, aby wreszcie ujrzeć wszystkie cy-
wygodny sposób. Zastanówmy się, w jakich kami, w których umieścimy liczby potrzebne fry ukazujące się na wyświetlaczu. Zakłada-
programach będziemy musieli korzystać z wy- do wyświetlenia wszystkich dziesięciu cyfr. my, ze wystarczy nam jednorazowe spraw-
świetlania cyfr? Ano, przede wszystkim we No dobrze, mamy już tablicę danych, ale dzenie poprawności przeprowadzonych
wszelkiego rodzaju licznikach, zegarach, niewielki z niej pożytek, tak jak z każdej pustej uprzednio operacji. Piszemy zatem kolejne li-
miernikach częstotliwości i innych podobnych szafki. A zatem zapełnijmy naszą tablicę po- nijki programu:
urządzeniach. W większości wypadków bę- trzebnymi nam danymi. Czynność tę możemy For R = 0 To 9
dziemy zatem mieli do czynienia z cyklicz- wykonać w najrozmaitszy sposób, ale na razie P3 = Cyfra(r)
nym wyświetlaniem cyfr. Oczywiście, może- wybierzemy metodę najprostszą, wręcz intui- Next R
my każdej z wartości nadać indywidualne na- cyjną. Piszemy: P3= 0
zwy, np. Cyfra1, Cyfra2 itd. Wątpię jednak, i po uruchomieniu programu nasza szafka zo- End
czy korzystanie z tak określonych stałych by- stanie zapełniona aż A na początku, zaraz po poleceniu Dim
Dim Cyfra(9) As byte
łoby wygodne! Postąpimy zatem inaczej: po same brzegi! Pa- Cyfra(9) As Byte dopisujemy:
umieścimy nasze wartości w tabeli, czyli miętajmy jednak,
Cyfra(0) = 63
mówiąc językiem programistów zadeklaruje- że zużyliśmy już 10 Dim R as Byte
Cyfra(1) = 6
my tablicę danych. Sposób deklaracji tablicy bajtów cennej pa-
Cyfra(2) = 155
jest bardzo podobny do deklarowania poje- mięci RAM proce- Działanie polecenia Dim jest już dla Was
Cyfra(3) = 143
dynczej zmiennej, a różnica polega na tym, że sora. Nie obawiaj- oczywiste, ale zastanówmy się, jakie czynno-
Cyfra(4) = 166
tym razem powiadamiamy kompilator o ko- cie się jednak, to co ści mają wykonywać ostanie cztery linijki
Cyfra(5) = 173
nieczności zarezerwowania w pamięci RAM zostało wystarczy programu.
Cyfra(6) = 189
procesora miejsca jednorazowo na więcej niż jeszcze na potrzeby For R = 0 To 9 oznacza, że wszystkie
Cyfra(7) = 7
czynności zawarte pomiędzy tym poleceniem
jedną wartość. Mówiąc ściślej, deklaracja ta- nawet dość rozbu- Cyfra(8) = 191
blicy polega na zadeklarowaniu kilku zmien- dowanego progra- Cyfra(9) = 175 a NEXT mają być wykonane dziesięć razy,
nych o tej samej nazwie, ale o innym  nume- mu, a w najbliższej a po każdym ich wykonaniu wartość R zosta-
rze porządkowym . Jak wygodnym posunię- przyszłości dowiemy się, jak można usunąć nie- nie powiększona o 1.
ciem jest zadeklarowanie tablicy danych, potrzebne już zmienne z pamięci RAM i uwol- Polecenie P3 = Cyfra(r) wykonane zosta-
przekonamy się za chwilę, ale pamiętajcie nić zajmowaną przez nie pamięć. nie dziesięć razy, a za każdym razem do portu
o jednej sprawie: Podprogram, który napisaliśmy przed P3 zostanie wysłana liczba przyporządkowana
Każda zmienna typu "BYTE" zajmuje chwilą warto zapisać sobie w osobnym pliku. aktualnej wartości zmiennej R, czyli kolejno
w pamięci procesora dokładnie jeden bajt, Z pewnością przyda się on nam w przyszło- wszystkie umieszczone w tablicy liczby.
których do dyspozycji mamy zaledwie 128. ści. Tu na marginesie drobna uwaga: dobrą Polecenie NEXT zamyka pętlę programową
Inne zmienne zajmują (z wyjątkiem zmien- praktyką jest zapisywanie w osobnym katalo- Polecenie P3=0 sprawia, że po wyświetle-
nej typu "BIT") jeszcze więcej miejsca. De- gu szczególnie cennych fragmentów progra- niu wszystkich cyfr wyświetlacz siedmioseg-
klarowanie tablic powoduje drastyczne mów i ciekawych procedur. Po jakimś czasie mentowy zostanie wyłączony (na wyjściach
zwiększenie obszaru zajmowanej pamięci uzbieramy sobie pokazną bibliotekę, a pisa- portu P3 pojawią się same zera).
i dlatego musimy stosować je z rozwagą, de- nie kolejnego programu często będzie spro- End - koniec programu.
klarując tablice o minimalnych dopuszczal- wadzać się do  sklejania ze sobą zarchiwi- Wygląda na to, że wszystko powinno dzia-
nych rozmiarach. zowanych uprzednio podprogramów. łać zgodnie z przewidywaniami. Kompiluje-
Pomimo powyższego ostrzeżenia, docho- Jednak jak na razie nie mamy zbyt wiel- my więc nasz program i włączamy symulację
dzimy jednak do wniosku, że zadeklarowania kiego pożytku z napisanego programu. Po
tablicy jest niezbędne i czynimy to za pomo- Rys. 4
cą polecenia:
DIM [zmienna] ([ilość stosowanych zmien-
nych]) As [typ zmiennej]
W naszym, konkretnym przypadku pole-
cenie to będzie miało postać:
DIM Cyfra(9) As Byte
Rys. 3
Elektronika dla Wszystkich
26
BASCOM
programową. Tym razem jednak nie bardzo wa zostaną przed zaprogramowaniem proce- Waitms 255: Waitms 100
mamy ochotę zakrzyknąć  BINGO! . Na sy- sora usunięte z program, tak więc nie musi- Gdybyśmy chcieli teraz zaprogramować
mulowanym wyświetlaczu coś się wprawdzie my martwić się zwiększeniem zajmowanej procesor i sprawdzić w  real world jego
pokazało, ale wyświetlanie cyfr przebiegło powierzchni pamięci RAM. działanie, to musimy pamiętać o bezwzględ-
tak szybko, że nawet nie zdążyliśmy zaobser- Ostateczna, gotowa do uruchomienia we- nym usunięciu z niego opóznień realizowa-
wować jego ewentualnej poprawności. W sy- rsja naszego programu wygląda następująco: nych w formie pętli programowej i zastąpie-
mulacji sprzętowej, na płytce testowej sytua-
cja wygląda równie zle: wyświetlacz zamigo-
'Deklaracje Zmiennych
tał i wszystkie segmenty wyłączyły się. Gdzie
Dim Cyfra(9) As Byte 'deklaracja tablicy zmiennych
więc tkwi błąd?
Dim R As Byte 'deklaracja zmiennej pomocniczej (licznik instrukcji FOR ...NEXT)
Błąd tkwi w zbyt dużej szybkości pracy
Dim X As Byte 'deklaracja zmiennej pomocniczej opóznienia
programu, nawet podczas powolnej emulacji
'Aadowanie danych do tablicy
sprzętowej czy programowej. Gdybyśmy te-
Cyfra(0) = 63 'umieszczenie w tablicy kodu cyfry "0"
raz tak napisany program załadowali do pro- Cyfra(1) = 6 'umieszczenie w tablicy kodu cyfry "1"
cesora i uruchomili, to zobaczylibyśmy co Cyfra(2) = 155 'umieszczenie w tablicy kodu cyfry "2"
najwyżej krótki błysk segmentów wyświetla- Cyfra(3) = 143 'umieszczenie w tablicy kodu cyfry "3"
Cyfra(4) = 166 'umieszczenie w tablicy kodu cyfry "4"
cza. Na szczęście rozwiązania problemu są
Cyfra(5) = 173 'umieszczenie w tablicy kodu cyfry "5"
bardzo proste: wystarczy w jakiś sposób
Cyfra(6) = 189 'umieszczenie w tablicy kodu cyfry "6"
zmusić program, aby po wyświetleniu każdej
Cyfra(7) = 7 'umieszczenie w tablicy kodu cyfry "7"
cyfry zaczekał trochę na powolnego człowie-
Cyfra(8) = 191 'umieszczenie w tablicy kodu cyfry "8"
ka i umożliwił mu odczytanie pokazanej cy-
Cyfra(9) = 175 'umieszczenie w tablicy kodu cyfry "9"
fry. Celowo napisałem  rozwiązania , ponie-
'Właściwy program
waż żądane opóznienie zrealizujemy dwoma
Do 'wykonaj wszystko, co poniżej
różnymi metodami, odpowiednimi dla symu-
For R = 0 To 9 'początek pętli głównej programu
lacji i pracy programu w zaprogramowanym
P3 = Cyfra(r) 'wysłanie do portu P3 wartości odpowiadającej cyfrze
procesorze.
For X = 1 To 100 'pętla opóznienia
Next X 'pętla opóznienia
Next R 'zamknięcie pętli głównej
Realizowanie opóznienia
Loop 'wykonaj jeszcze raz
w symulacji sprzętowej
End
i/lub programowej
W symulacji najprościej jest zrealizować Zauważyliście pewnie, że dodałem do nie ich jednym z wyżej opisanych poleceń.
opóznienie za pomocą dodatkowej pętli programu jeszcze jeden element: niekończą- Tak więc zamiast:
programowej wstawionej w odpowiednim cą się pętlę DO .... LOOP. W związku z tym
miejscu programu. Pętla może być pusta, nasz program będzie wykonywany w nie- For X = 1 To 100
nie musi wykonywać jakichkolwiek czyn- skończoność, wyświetlając na wyświetlaczu Next X
ności, wystarczy, że wykonanie jej samej siedmiosegmentowym kolejne cyfry.
zajmuje trochę czasu. Najprościej zrealizo- Wstawimy np.:
wać taką pętlę za pomocą znanej już Wam Realizacja opóznienia
instrukcji NEXT ... FOR. Ilość powtórzeń w programie przeznaczo- WAIT 1
pętli zależy od szybkości działania proce- nym do umieszczenia
sora w komputerze i najlepiej ustalić ją do- w procesorze co da nam opóznienie 1 sekundy.
świadczalnie. Przykładowo: wykonanie Nie wyczerpaliśmy bynajmniej tematu
instrukcji: Język MCS BASIC oferuje nam wiele możli- wysyłania danych do portów procesora  51,
For X = 1 to 100 wości realizacji opóznień czasowych, zwal- ale pozostało już niewiele czasu z tej godzi-
Next X niając nas na razie od konieczności poznawa- ny lekcyjnej. W opisywaniu głównego te-
zajmuje na komputerze z procesorem nia obsługi timerów systemowych. Do dys- matu ćwiczenia przeszkadzały nam liczne
PENTIUM 133 około 2 sekund. pozycji mamy dwie podstawowe instrukcje, dygresje, ale także dzięki nim wypełniali-
Dopisujemy więc do naszego programu pozwalające na wnoszenie opóznień z zakre- śmy postawione przed nami zadania: uczy-
pętlę opózniającą, nie zapominając o zade- su od 1 ms do 255 sekund, czyli do ponad 4 liśmy się języka MCS BASIC i obsługi pa-
klarowaniu kolejnej zmiennej: X. Zarówno minut. Są to instrukcje: kietu BASCOM. Chciałbym wspomnieć
deklaracja tej zmiennej, jak i pętla programo- WAIT [liczba sekund, liczba z zakresu Wam jeszcze, chociażby w największym
1 do 255) skrócie, o odczytywaniu danych z portów
Rys. 5 procesora.
WAITMS [liczba milisekund, liczba Odczytanie jakichkolwiek danych z po-
z zakresu od 1 do 255] rtu procesora  2051 lub z pojedynczego pinu
Po wydaniu jednaj z tych dwóch instrukcji takiego portu jest możliwe dopiero po pro-
program wstrzymuje swoje działanie aż do gramowym ustawieniu na całym porcie lub
momentu upłynięcia oznaczonego czasu. wybranym pionie STANU WYSOKIEGO.
Oczywiście, zawsze możliwe jest wydanie Wyprowadzenia portów procesora  2051
kolejno kilku instrukcji opóznienia, chociaż- możemy z pewnym przybliżeniem traktować
by w celu  załatania dziury pomiędzy jako wyjścia typu OPEN DRAIN wyposażo-
255msek za 1 s. Np.: ne w bufory, w których zatrzaskuje się poda-
Wait 1: Waitms 125 na z wewnątrz informacja. Jeżeli np. po po-
lub daniu polecenia:
Elektronika dla Wszystkich
27
BASCOM
P3=0
chcielibyśmy odczytać z wejść tego portu ja-
kiekolwiek dane, to niezależnie od stanów lo-
gicznych na dołączonych do nich układów
peryferyjnych zawsze odczytywalibyśmy sa-
me zera! Dopiero po wydaniu polecenia:
P3= 255
uzyskujemy dostęp do wejść portu P3.
W języku MCS BASIC liczby charakte-
ryzujące stan portów procesora, a także
ich pojedynczych pinów, możemy trakto-
wać jako zwykłe zmienne, tzn. nadawać im
określone wartości, a także dokonywać
wszelkich innych operacji dozwolonych na
zmiennych.
Np. po wydaniu polecenia A = P1 zmien-
na A przyjmie taką wartość, jaka znajduje się
w momencie wydania polecenia na wejściach
portu P1. Możemy także napisać: A = P1.3,
a wtedy zmienna A przyjmie wartość, jaka
aktualnie istnieje na wejściu 3 portu P1. a następnie zmontujmy na naszej płytce testo- Rys. 6
Napiszmy sobie zatem króciutki program:, wej układ pokazany na rysunku 6.
Print "**Elektronika dla Wszystkich**"
Do 'początek niekończącej się pętli
programowej Print "**BASCOM College Forever!**"
P3 = 255 'przygotuj wejścia portu P3 do
odczytu danych
Tekst, którego wysłanie do portu szerego-
If P3 <> 255 Then 'jeżeli wartość podana do P3
wego zostało zlecone poleceniem PRINT
zmieniła się, to:
ukazał się na małym, niebieskim ekranie
Print P3 ; " " ; 'napisz, jaka to jest wartość
emulatora programowego i to samo zjawisko
Print P3.7 ; P3.6 ; P3.5 ; P3.4 ; P3.3 ; P3.2 ; P3.1 ; P3.0 'napisz, jakie są stany poszczegól-
zajdzie w przypadku korzystania z emulatora
nych pinów
sprzętowego. Na jednej z najbliższych lekcji
End If 'koniec uwarunkowania
Loop 'zamkniecie pętli programowej pokażę Wam, jak bardzo polecenie PRINT
może okazać się użyteczne, np. podczas uru-
Zanim jednak przejdziemy do testowania chamiania programów obsługujących magi-
w symulacji sprzętowej naszego programu stralę I2C. Bez najmniejszej przesady: stoso-
i zawartych w nim poleceń, winien jestem wanie tego polecenia do  podglądania pro-
Wam pewne wyjaśnienia, dotyczące nowego gramu pracującego w symulacji może niejed-
dla nas polecenia PRINT, które znalazło się nokrotnie pozwolić na zaoszczędzenie wielu
w powyższym programie. godzin czasu!
Generalnie, polecenie  PRINT używa- Wracajmy jednak do naszego programu
ne jest do zapewnienia komunikacji pomię- testującego stan wejść portu P.3 procesora.
dzy komputerem PC a systemem mikropro- Uruchamiamy go w symulacji sprzętowej, na
cesorowym wyposażonym w interfejs zmontowanej wg rysunku 6 płytce testowej1.
RS232. W przypadku procesorów  X051 Początkowo nic się nie dzieje, ale po naci-
i pracy w środowisku BASCOM-a nawiąza- śnięciu któregokolwiek z przycisków S1 ...
Rys. 7 nie takiej łączności jest szczególnie łatwe S3 na płytce na ekranie symulatora zaczyna-
i będzie tematem jednej z następnych lek- ją pojawiać się liczby. Na początku zostaje
cji. Polecenie   PRINT ma jednak je- wyświetlona liczba reprezentująca stan portu
szcze jedno, wyjątkowo użyteczne zastoso- P3 w notacji dziesiętnej, a zaraz po niej ta sa-
wanie: podczas pracy w emulacji sprzęto- ma liczba w kodzie binarnym.
wej lub programowej umożliwia  podgląd Nie przerobiliśmy jeszcze całego zapowie-
pracującego programu i w wielu przypad- dzianego materiału, a już odezwał się dzwo-
kach radykalnie przyspiesza i ułatwia jego nek oznajmiający koniec lekcji! Na zakończe-
uruchomienie. nie podam Wam trochę materiału do przero-
W przypadku pracy w symulacji i bez wy- bienia w domu:
korzystywania transmisji poprzez interfejs 1. Spróbujcie napisać, skompilować i prze-
RS232 efekty działania polecenie PRINT kie- testować na płytce testowej poniższy pro-
rowane są na ekran komputera, Napiszmy so- gram.
Rys. 8 bie dwie linijki programu i po skompilowaniu
uruchommy go w symulatorze (rys.7): Ciąg dalszy na stronie 36.
Elektronika dla Wszystkich
28
BASCOM
Ciąg dalszy ze strony 28.
Będzie to jednocześnie praktycznie pierwsza próba skorzystania
z wyświetlacza alfanumerycznego LCD umieszczonego na naszej
płytce testowej. Schemat montażowy jest taki sam, jak do poprze-
dniego ćwiczenia.
2. Popatrzcie na główny schemat, na którym pozostał jeszcze nie
omówiony fragment 3. Jeżeli posiadacie jakiś czterofazowy silnik kro-
kowy (np. od starej stacji dysków 5,25 ), to dołączcie go do naszej
płytki w sposób pokazany na schemacie i spróbujcie napisać program
wprawiający ten silnik w ruch. Nie mo-
$sim
głem sobie z tym problemem poradzić
Config Lcd = 16 * 1a
(no, może jest w tym trochę kokieterii)
Cursor Off
i bardzo byłbym wdzięczny za każdy
Cls
pomysł na napisanie takiego programu
Do
przesłany mi na
Set P3.0
zbigniew.raabe@edw.com.pl.
Set P3.1
3. Jeżeli nie posiadacie silnika kroko-
Set P3.2
wego, to spróbujcie napisać i uruchomić
If P3.0 = 0 Then
program obsługujący zwykły silnik DC
Cls
małej mocy. A może poeksperymentuje-
Print "Stan niski na P3.0"
cie z żarówkami na niskie napięcie lub
Lcd "Low on P3.0"
innymi odbiornikami DC, dołączanymi
End If
do płytki testowej? Pamiętajcie jednak
If P3.1 = 0 Then
o jednym: do każdego z wyprowadzeń
Cls
portów procesora  2051 może wpływać Print "Stan niski na P3.1"
prąd nie większy niż 20mA i najlepiej Lcd "Low on P3.1"
End If
zawsze stosujcie wzmacniacz prądowy
If P3.2 = 0 Then
z układem ULN2803 umieszczony na
Cls
płytce testowej.
Print "Stan niski na P3.2"
To wszystko, co chciałem przekazać
Lcd "Low on P3.2"
Wam w ćwiczeniu 2.
End If
Zbigniew Raabe
Loop
zbigniew.raabe@edw.com.pl
Elektronika dla Wszystkich
29


Wyszukiwarka

Podobne podstrony:
Elektronika Dla Wszystkich podręczny poradnik elekteronika stabilizatory liniowe 2
Elektronika dla Wszystkich 10 (2013) [PL] [pdf]
Basn dla wszystkich
CNC dla wszystkich
Społeczeństwo dla wszystkich(1)
Obowiązkowe szczepienia dla wszystkich
Samozwaniec Młodość dla wszystkich

więcej podobnych podstron