You are on page 1of 7

Hit roku 2000

BASCOM College
Pierwsze programy

Ć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
wyższa już pora na bliższe zapoznanie się P1.0 12 IN/OUT Wejście „+” komparatora analogowego Brak rezystora podciągającego
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
praktycznie podstawowe polecenia odnoszą− P1.5 17 IN/OUT Brak
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
płytki. Od kilku dociekliwych Czytelników to procesorowi Pin Pin
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
na nieumieszczeniu na schemacie złącza światem zewnę− zboczem lub poziomem
Aktywne opadającym
oznaczonego jako ISP oraz jumpera JP7. trznym, przyj− P3.3 7 IN/OUT Wejście przerwania zewnętrznego INT1
zboczem lub poziomem
Rzeczywiście, elementy te zostały celowo mowanie z nie− P3.4 8 IN/OUT Wejście timera 0
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− informacji, tylko na drodze programowej
ku przez wprowadzanie do niego dodatko− a także wysyła− P3.7 11 IN/OUT Brak

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ądź do całe−
go portu, bądź 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:
Sprawdźmy teraz w praktyce, czy rzeczywi−
ście podane polecenia funkcjonują poprawnie. $sim 'zawiadomienie kompilatora, że program będzie testowany w symulacji 'sprzętowej lub
Uruchamiamy program BASCOM i w okienku programowej
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

24 Elektronika dla Wszystkich


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
1 do 255 w okienku emulatora sprzętowego portu P3 spowoduje ukazanie się na wyświe− program. BINGO! Na C P3.2
i od 1 do 32 na płytce testowej, na której nie tlaczu upragnionej jedynki to binarnie: wyświetlaczu ukazała D P3.3
zmieściła się już większa liczba diod. 0X00 0110 się cyfra “1” i wszystko E P3.4
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
Set P3.1 'ustaw stan wysoki na zadanym wyjściu portu (P3.1) End cyfr. Wykonałem tę pracę za Was, a jej wy−
Reset P3.1'ustawia stan niski na zadanym wyjściu portu (P3.1) nik pokazany został w poniższej tabeli.
Loop i kompilujemy ten wyjątko− Pozostaje nam zatem praktyczne sprawdze−
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
konywania operacji na pojedynczych wyj− w okienku symulatora programowego. Segment G F E D C B A Wartość
ściach portów ma ogromne znaczenia prak− Nie jest to bynajmniej ozdoba, ale ko− Cyfra
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ć,
go i służyły wyłącznie celom poznawczym. czyli przypisać odpowiednie segmenty 3 1 0 0 1 1 1 1 143
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−
Popatrzmy przez chwilę na schemat naszej stępstwem tego odważnego kroku jest 8 1 1 1 1 1 1 1 191
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 Cyfra(1) = 6 Dim R as Byte
my tablicę danych. Sposób deklaracji tablicy bajtów cennej pa− Cyfra(2) = 155
jest bardzo podobny do deklarowania poje− mięci RAM proce− Cyfra(3) = 143 Działanie polecenia Dim jest już dla Was
dynczej zmiennej, a różnica polega na tym, że sora. Nie obawiaj− Cyfra(4) = 166 oczywiste, ale zastanówmy się, jakie czynno−
tym razem powiadamiamy kompilator o ko− cie się jednak, to co Cyfra(5) = 173 ści mają wykonywać ostanie cztery linijki
nieczności zarezerwowania w pamięci RAM zostało wystarczy Cyfra(6) = 189 programu.
procesora miejsca jednorazowo na więcej niż jeszcze na potrzeby Cyfra(7) = 7 For R = 0 To 9 oznacza, że wszystkie
jedną wartość. Mówiąc ściślej, deklaracja ta− nawet dość rozbu− Cyfra(8) = 191 czynności zawarte pomiędzy tym poleceniem
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 pokaźną 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

26 Elektronika dla Wszystkich


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óźnień 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 źle: 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óźnienia
programu, nawet podczas powolnej emulacji 'Ładowanie 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"
cza. Na szczęście rozwiązania problemu są Cyfra(4) = 166 'umieszczenie w tablicy kodu cyfry "4"
bardzo proste: wystarczy w jakiś sposób Cyfra(5) = 173 'umieszczenie w tablicy kodu cyfry "5"
zmusić program, aby po wyświetleniu każdej Cyfra(6) = 189 'umieszczenie w tablicy kodu cyfry "6"
cyfry zaczekał trochę na powolnego człowie− Cyfra(7) = 7 'umieszczenie w tablicy kodu cyfry "7"
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óźnienie 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óźnienia
Next X 'pętla opóźnienia
Realizowanie opóźnienia Next R 'zamknięcie pętli głównej
w symulacji sprzętowej Loop 'wykonaj jeszcze raz
i/lub programowej End

W symulacji najprościej jest zrealizować Zauważyliście pewnie, że dodałem do nie ich jednym z wyżej opisanych poleceń.
opóźnienie 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óźnienia
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óźnienie 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óźnień 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óźnień z zakre− śmy postawione przed nami zadania: uczy−
pętlę opóźniają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óźnienia, 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.

Do 'początek niekończącej się pętli Print "**Elektronika dla Wszystkich**"


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ść
Print P3.7 ; P3.6 ; P3.5 ; P3.4 ; P3.3 ; P3.2 ; P3.1 ; P3.0 'napisz, jakie są stany poszczegól− emulatora programowego i to samo zjawisko
nych pinów zajdzie w przypadku korzystania z emulatora
End If 'koniec uwarunkowania sprzętowego. Na jednej z najbliższych lekcji
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.

28 Elektronika dla Wszystkich


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−
głem sobie z tym problemem poradzić $sim
(no, może jest w tym trochę kokieterii) Config Lcd = 16 * 1a
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"
zawsze stosujcie wzmacniacz prądowy End If
z układem ULN2803 umieszczony na If P3.2 = 0 Then
płytce testowej. Cls
To wszystko, co chciałem przekazać Print "Stan niski na P3.2"
Wam w ćwiczeniu 2. Lcd "Low on P3.2"
Zbigniew Raabe End If
zbigniew.raabe@edw.com.pl Loop

Elektronika dla Wszystkich 29

You might also like