kurs cd.pdf

(2859 KB) Pobierz
54844424 UNPDF
Forum Czytelników
F ORUM C ZYTELNIKÓW
Forum Czytelników ma służyć celom edukacyjnym, wymianie doświadczeń i pomysłów.
Zasady są następujące:
– publikujemy wyłącznie projekty opracowane samodzielnie i nigdzie dotychczas nie publikowane
(należy dołączyć stosowne oświadczenie z własnoręcznym podpisem);
– oprócz tekstu i rysunków, prosimy przysłać działający model lub jego fotografie (model odeślemy);
– publikacja projektu nie oznacza jego pozytywnej oceny przez redakcję EdW, lecz stanowi punkt
wyjścia do publicznej dyskusji nad proponowanym rozwiązaniem. Etap dyskusji nazywany „Do−
grywką”, trwa dwa miesiące. W tym czasie oczekujemy nie tylko listów z uwagami krytycznymi, ale
przede wszystkim propozycji innych, lepszych rozwiązań (tym razem wystarczy schemat z opisem
działania układu);
– nagroda za opublikowany projekt wynosi 100 zł (brutto) za stronę artykułu w EdW. Nagroda nie
zostanie przyznana, jeśli „Dogrywka” wykaże, iż projekt stanowi plagiat. Jeśli w ”Dogrywce” zosta−
ną zaproponowane lepsze rozwiązania, wówczas część nagrody (w proporcji uznanej przez redakcję
EdW) zostanie przyznana autorom lepszych rozwiązań.
Prosimy też o załączenie do projektu fotografii paszportowej i kilku zdań życiorysu.
Prosimy nie przysyłać opisów urządzeń, które powstały tylko na papierze, a nie zostały zrealizowane
w praktyce. Znamy się trochę na elektronice i wiemy, że większość takich układów nie będzie działać.
Stąd nasza prośba o model lub przynajmniej fotografię modelu.
Port multi−IO
Nazywam się Ireneusz Czerniak, mam 34 lata, studiuję elektrotechnikę na Politechnice Radomskiej.
Interesują mnie zastosowania techniki komputerowej w sterowaniu i komunikacji.
Pozdrawiam wszystkich Czytelników i Redakcję EdW.
Chciałbym zaprezentować projekt
modułu „karty Multi I/O” do mikrokom−
putera AVT2250. Do jego opracowania
skłoniła mnie potrzeba posiadania więk−
szej liczby wejść/wyjść niż ofero−
wane przez Port1. W projekcie
wykorzystano wielokrotnie już
opisywany w czasopismach po−
święconych elektronice i techni−
ce cyfrowej układ scalony 8255
oraz dwie typowe kostki TTL :
74LS138 i 74LS260.
Na początku jednak chciałbym
opisać, owiane mgłą tajemnicy,
złącze systemowe naszego mini−
komputerka – wszystkie sygnały
występujące na tym złączu, wraz
z numeracją odpowiadających im
pinów pokazuje rrysunek 1. Opis ten jest
wynikiem „badań empirycznych” – co nie
oznacza, że nie jest zgodny z prawdą –
wykorzystuję go od dawna i nie było żad−
nych kłopotów z nieprawidłowym adreso−
waniem, na tym samym rysunku podano
też numerację wyjść Portu1.
Sam moduł I/O (rrysunek 2) składa się
z dwóch części : dekodera adresów
2000h−2003h oraz właściwego układu
I/O. Taki obszar adresowy wykorzysta−
łem z tego powodu, że nie przewiduję
pracy układu jednocześnie z zewnętrzną
pamięcią RAM, a nie chciałem zabierać
(co prawda tylko czterech) komórek z ob−
szaru 8000h−FFFFh. Ponieważ w przy−
Fott.. 1..
44
E LEKTRONIKA DLA WSZYSTKICH 8/98
54844424.005.png
Też to potrafisz
Większość komentarzy zawarłem po średniku w listingu programu.
Po włączeniu do kompilacji zbioru “PORT8255.INC” zawierającego de−
klaracje portów układu 8255 rozpoczyna się właściwy kod programu.
Deklaracja
i 82 sprawdzany jest kod znaku. Jeżeli kod jest < 14 to znak należy do
tzw. znaków sterujących drukarki i nie powinien być drukowany, a za−
miast niego wstawiana jest w linii 83 kropka. Reszta znaków o kodach
14...255 jest drukowana normalnie. W tym miejscu jeżeli ktoś chce za−
węzić bardziej zbiór drukowanych znaków może w linii 81 wstawić za−
miast wartości 0E0h większą np. 20h, wtedy będą drukowane znaki
ASCII od spacji w górę.
Reszta programu to po prostu inicjacja drukarki (linia 125) oraz spraw−
dzenie działania procedury drukowania obszaru (linia 126).
ORG 8000h
powinna być w razie potrzeby zmieniona jeżeli przewidujesz umie−
szczenie kodu programu w innym obszarze RAM komputerka.
Po tej deklaracji dołączam zbiór PRINTER.INC zawierający procedury
zdefiniowane i omówione w poprzednim odcinku klasy mikroproceso−
rowej czyli
Na kolejne popołudniowe zimowe wieczory proponuję następujące
zadania:
Dokonać poprawek w programie przedstawionym w dzisiejszym ar−
tykule, a dotyczącym odbioru danych z SA9203 i umieszczania ich w bu−
forze o długości np. 128 bajtów, umieszczonym w wewn. RAM proce−
sora 80C52 (adresy: 80h...FFh). Wykorzystać rejestr R1 jako wskaźnik
początku bufora (podpowiedź − @R1)
Zapisać sekwencję instrukcji programującej układ SA9203 w postaci:
− PA jako wejście z potwierdzeniem
− PB jako wyjście – adresowany bitowo
− PC jako wyjście – adresowany bajtowo
− PD...PF jako wejścia adresowane bitowo z aktywnymi rezystorami
podciągającymi
Rozwiązania zadań w kolejnym numerze EdW.
Z okazji zbliżających się świąt, wszystkim entuzjastom techniki mikro−
procesorowej autor cyklu składa najserdeczniejsze życzenia dalszych
sukcesów, korzyści a przede wszystkim satysfakcji z ujarzmiania tych
arcyciekawych elementów elektronicznych, do których z pewnością na−
leży przyszłość współczesnej elektroniki. Do zobaczenia w Nowym Ro−
ku 1999!
PRNINIT – procedura inicjacji układu 8255 na potrzeby drukowania
PRNACC – procedura wysłania znaku z akumulatora na drukarkę
PRNTXT – procedura wysłania na drukarkę tekstu zakończonego zna−
kiem “0” (zero)
Kolejne linie to już procedura drukowania danych z RAM’u w postaci
przedstawionej wcześniej – czyli PRNDUMP. Rozpoczyna się ona zapa−
leniem na DL1 literki “d” w celu zaproszenia do wpisania z klawiatury
komputerka adresu początkowego i końcowego obszaru który ma być
wydrukowany. Dane te są zapamiętywane w rejestrach R1.R2 i R3.R4
odpowiednio start i koniec obszaru.
Dalej w liniach 34 i 35 drukowany jest nagłówek czyli tekst spod ety−
kiety “nagl”:
Potem to już kolejne linie zawierające adres początkowy (linie
40...56) rekordu 16 bajtów danych, następnie 16 bajtów z RAM w po−
staci HEX oddzielonych spacjami (linie 58...74), wreszcie te same dane
wydrukowane zostają w postaci znaków ASCII (linie: 76...95) i zakoń−
czone znakiem końca linii CRLF (linie: 96...99). Dodatkowo w liniach 81
Słławomiir Surowiińskii
Adres Dana Hex Dana ASCII
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
46
E LEKTRONIKA DLA WSZYSTKICH 12/98
54844424.006.png
Forum Czytelników
szłości planuję
sterowanie róż−
nych układów
przy wykorzysta−
niu AVT2250, za−
stosowałem
więc tzw. deko−
dowanie pełne
adresów po−
szczególnych
części układu
8255. Analizując
schemat ideowy
mikrokomputer−
ka zauważyłem,
że adres 2000h
jest dostępny na
przełączniku
ROM 2000h/−
0000h, jednak
właśnie z powo−
du niepełnego
dekodowania
adresu postano−
wiłem wyko−
rzystać dodatko−
wy dekoder. Wy−
krywa on jedno−
znacznie odpo−
wiednią kombi−
nację sygnałów
na złączu syste−
Rys.. 2..
Rys.. 1..
mowym, co zabezpiecza przed trudny−
mi do określenia stanami na wejściach
bądź wyjściach układu 8255.
Ponieważ „kość” 8255 była już
wielokrotnie opisywana w literatu−
rze nie będę szczegółowo wyjaśniał
jej budowy – podam tylko odpowied−
nie adresy i sposoby wprowadza−
nia/wyprowadzania danych. Układ
posiada trzy ośmiobitowe porty, któ−
re mogą być programowo ustawia−
ne jako wyjścia/wejścia. Zwyczajo−
wo są one opisywane jako PortA (PA),
PortB (PB), PortC (PC). Do kontroli
przepływu informacji procesor−porty
wykorzystywany jest tzw. rejestr ste−
rujacy (RS).
W opisywanym module adresy po−
szczególnych portów są następujące
(jest to listing pliku io.inc, który należy do−
łączyć do pisanych przez siebie progra−
mów za pomocą dyrektywy INCLUDE
IO.INC, bądź dołączyć je do listingu
const.inc) :
;
; Definicje dla Ò8255 interfaceÓ
;
_PA equ 2000h
_PB equ 2001h
_PC equ 2002h
_RS equ 2003h
Zapis do portw ustawionych jako wyjściowe odbywa się z poziomu
asemblera następującą sekwencją rozkazw :
mov A,#dana ;wpisz daną do akumulatora
mov DPTR,#_PA ;ustaw się na adres portu (tutaj PA)
movx @DPTR,A ;przepisz Acc do PA
Odczyt z portw ustawionych jako wejścia odbywa się następująco:
mov DPTR,#_PC ;ustaw się na adres portu (tutaj PC)
movx A,@DPTR ;przepisz zawartość PC do Acc
Format słowa wpisywanego do RS jest następujący:
Bity 7 6543210
| | | | | | | |- PortC (bity 0-3) 1=wejście, 0=wyjście
| | | | | | |Ï- PortB 1=wejście, 0=wyjście
| | | | | |ÏÏ- Tryb praracy (w naszym przypadku zawsze rwny 0)
| | | | |ÏÏÏ- PortC (bi(bity 4-7) 1=wejście, 0=wyjście
| | | |ÏÏÏÏ- Por PortA 1=wejście, 0=wyjście
| | |ÏÏÏÏÏ- Tryb prab pracy (w naszym przypadku zawsze rwny 0)
| |ÏÏÏÏÏÏ- Tryb prayb pracy (w naszym przypadku zawsze rwny 0)
|ÏÏÏÏÏÏÏ- Typ da Typ danej (1=ustaw konfigurację, 0=ustaw PortC)
Przykładowo ustawienie PA jako wyjścia a PB i PC jako wejść wygląda następująco:
mov A,#10001011b ;wpisz daną do akumulatora
mov DPTR,#_RS ;ustaw się na adres portu (tutaj RS)
movx @DPTR,A ;przepisz Acc do RS
Programowanie poszczeglnych bitw PC ustawionego jako wyjście odbywa się nastepująco :
E LEKTRONIKA DLA WSZYSTKICH 8/98
45
54844424.007.png 54844424.008.png 54844424.001.png 54844424.002.png 54844424.003.png
Też to potrafisz
87 80EE A3 inc DPTR
88 80EF E583 mov A,DPH
89 80F1 8BF0 mov B,R3
90 80F3 B5F009 cjne A,B,ok4
;sprawdzenie czy aby nie koniec adresu
91 80F6 E582 mov A,DPL
92 80F8 8CF0 mov B,R4
93 80FA B5F002 cjne A,B,ok4
94 80FD 8013 sjmp finix
95 80FF DDE0 ok4: djnz R5,nastc
96 8101 740D mov A,#CR
97 8103 128003 lcall PRNACC
98 8106 740A mov A,#LF
99 8108 128003 lcall PRNACC
;wydrukowanie konca linii
100 810B A983 mov R1,DPH
101 810D AA82 mov R2,DPL
102 810F 028086 ljmp nastrek
103 8112 740D finix: mov A,#CR
104 8114 128003 lcall PRNACC
105 8117 740A mov A,#LF
106 8119 128003 lcall PRNACC
;koniec linii
107 811C 22 ret
108 811D C083 prnspc: push DPH
109 811F C082 push DPL
110 8121 90812C mov DPTR,#space
111 8124 12803B lcall PRNTXT
112 8127 D082 pop DPL
113 8129 D083 pop DPH
114 812B 22 ret
115 812C 207C2000 space db
20h,’|’,20h,0
116 8130 20416472
8134 65732020
8138 20202020
813C 20202020
8140 20202020
8144 20202020
8148 20204461
814C 6E652048
8150 6578 nagl db
‘ Adres Dane Hex’
117 8152 20202020
8156 20202020
815A 20202020
815E 20202020
8162 20202020
8166 20202020
816A 20202020
816E 2044616E
8172 65204153
8176 4349490D
817A 0A
db
‘ Dane ASCII’,13,10
118 817B 2D2D2D2D
817F 2D2D2D2D
8183 2D2D2D2D
8187 2D2D2D2D
818B 2D2D2D2D
818F 2D2D2D2D
8193 2D2D2D2D
8197 2D2D2D2D
819B 2D2D2D2D
819F 2D2D
db
‘———————————————————’
119 81A1 2D2D2D2D
81A5 2D2D2D2D
81A9 2D2D2D2D
81AD 2D2D2D2D
81B1 2D2D2D2D
81B5 2D2D2D2D
81B9 2D2D2D2D
81BD 2D2D2D2D
81C1 2D2D2D2D
81C5 2D2D2D0D
81C9 0A00
db
‘———————————————————−’,13,10,0
120
121 ;********************************************************
122 8200 org 8200h ;tak dla czytelnosci
123 ;********************************************************
124 8200 START:
125 8200 12804A lcall PRNINIT
;zainicjuj 8255 na potrzeby drukowania
126 8203 12805D lcall PRNDUMP
;wywolanie procedury
127 8206 80FE stop: sjmp stop
;wcisnij klawisz M(onitor)
128
129 8208
END
Kompilacja zakonczona pomyslnie !
Zbior: “dump.s03” , 467 bajt(ow), 0.2 sekund(y).
E LEKTRONIKA DLA WSZYSTKICH 12/98
45
 
Forum Czytelników
mov A,#dana ;wpisz daną do akumulatora
mov DPTR,#_RS ;(tutaj zawsze RS)
movx @DPTR,A
;przepisz Acc do PA,
gdzie dana ma następujący format :
Bity 76543210
| | | | | | | |- 0=zeruj bit, 1=ustaw bit
| | | | | | |Ï- biity 1-3 ustalają, ktry bit PC ustawić/wyzerować
| | | | | |ÏÏ- 000=bit nr 0 0 PC, 001=bit nr 1,..,111=bit nr 7
| | | | |ÏÏÏ- --
| | | |ÏÏÏÏ- bez zna znaczenie np.0
| | |ÏÏÏÏÏ- bez znaz znaczenie np.0
| |ÏÏÏÏÏÏ- bez znaez znaczenie np.0
|ÏÏÏÏÏÏÏ- w----- w tym przypadku zawsze rwny 0
pamiętać należy jedynie, że w tym przypadku daną wysyłamy bezpośrednio do RS.
Przykład : ustawić bit 4 PC (tzn. PC:=xxx1xxxx):
mov A,#00001001b ;wpisz daną do akumulatora
mov DPTR,#_RS ;(tutaj zawsze RS)
movx @DPTR,A
;przepisz Acc do RS.
Ta w łaściwość portu PC jest bardzo przy-
datna w szeroko pojętym sterowaniu.
Do wykonania płytki drukowanej wykorzys-
tałem folię TES300+ z ogłoszeń w EdW.
Wyjścia poszczeglnych portw dostępne
są na złączu J2, gdzie doprowadzono też
zasilanie +5V (widok gotowej płytki przed-
stawia fotografia 1 ). Po zmontowaniu mo-
dułu łączy się go krtkim odcinkiem typo-
wego przewodu taśmowego 40-żyłowego
z AVT2250 ( fotografia 2 ). Przykładowy
program testujący wygląda następująco:
CPU Ò8052.DEFÓ
INCLUDE CONST.INC
INCLUDE BIOS.INC
INCLUDE IO.INC
org 8000h
init: mov A,#10000000b ;wszystkie porty jako wyjściowe
mov DPTR,#_RS
movx @DPTR,A
send1: mov A,#01h
lcall send
lcall opozn
send0: mov A,#00h
lcall send
lcall opozn
sjmp send1
;i tak w koło, klawisz M Î powrt do Monitora
send: mov DPTR,#_PA
movx @DPTR,A
;wyslij 1 do PA
mov DPTR,#_PB
movx @DPTR,A
;wyslij 1 do PB
mov DPTR,#_PC
movx @DPTR,A
;wyslij 1 do PC
ret
opozn:
push A
mov A,#FFh
lcall DELAY
pop A
ret
END
ustawia on wszystkie porty jako wyjścia i cyklicznie zmienia na ich bitach nr 0 stan 0/1,
co można sprawdzić woltomierzem bądź analizatorem stanw logicznych.
Fott.. 2..
Ewentualnym wykonawcom mo−
dułu życzę miłego sterowania. Wiele
ciekawych zastosowań układu 8255
można znaleźć w książce Wolfganga
Linka pt. „Jak mierzyć, sterować i re−
gulować za pomocą Basicu?”,(tytuł
jest mylący ;−)).
Ewentualne zapytania i uwagi
proszę przesyłać na:
borel@free.polbox.pl .
IIrreneusz Czerrniiak
Uwaga! Projekt płytki drukowanej
znajduje się na wkładce w środku
numeru.
46
54844424.004.png
Zgłoś jeśli naruszono regulamin