You are on page 1of 32

Glava 1

Komponenta 8255

Bitni pinovi

• D0  D7  Magistrala od 8 bita izmežu komponente i CPU-a.


• Tri porta (A, B , C ) za povezivanje na druge komponente sa magistra-
lom od 8 bita: PA0  PA7 , PB0  PB7 , PC0  PC7 .
• CS  Chip Select .
• A0 i A1  Pinovi za adresiranje portova i internog registra.
• RD i WD  Signali sa procesora za £itanja i pisanje.
Kombinacija signala je prikaza u tabeli 1.1.

RD WR CS A0 A1 Efekat

0 1 0 0 0 PA → CPU
0 1 0 0 1 PB → CPU
0 1 0 1 0 PC → CPU
0 1 0 1 1 Ctr → CPU

Tabela 1.1: Kombinacija signala komponente 8255

Modovi rada Ima ih 3: 0, 1 i 2. Modovi 1 i 2 sluºe za naprednije po-


vezivanje komponente (povezivanje sa handshake procedurom). Mod 0 kaºe
da port moºe biti ili ulazni ili izlazni i takav je tokom celog vremena rada
komponente.

1
Struktura kontrolne re£i Predstavlja kombinaciju za pode²avanje smera
portova A, B i C . Prikazana je na slici 1.1. Bit postavljen na jedinicu zna£i
da je nazna£eni port ulazni (input ); dok nula ozna£ava izlazni port (output ).

1 0 0 0
smer donje polovine PC
smer PB
smer gornje polovine PC
smer PA
režim
enable flag

Slika 1.1: Kontrolna re£ komponente 8255

Zadatak 1 Za mikroprocesor iAPX8086 projektovati mikrora£unarski


sistem sa 8 tastera i 8 LED indikatora pomo¢u komponente 8255A. Na
port A vezati indikatore, a na port B tastere. Na po£etku nijedna dioda
ne svetli. Pritiskom na neki od tastera odgovaraju¢a dioda treba da
zasvetli i treba da svetli sve dok je taster pritisnut. Komponenta se
nalazi na U/I adresi 0xFFC0.

Re²enje.

1
a) Kada je taster pritisnut, £itamo 0 na portu B , ²to dovodi do toga da
imamo 0 na portu A i uklju£ivanje LED. Logi£ka ²ema je prikazana na
slici 3.7. Isprekidane linije izmežu RD i WR nagla²avaju £injenicu da
ova veza nije direktna (obi£no ovi signali idu najpre na dekoder).

• M/IO  dovodimo signal 1 za MOV instrukciju, a 0 za IN i OUT


instrukcije (predstavlja tip transfera).

• BHE  Bus High Enable

• ALE  Address Latch Enable

b) Adresna ²ema je prikazana u slede¢om tabeli.

1 Svaki zadatak se sastoji od 4 dela i to su: a) crtanje osnovne logi£ke ²eme, b) odreži-
vanje adresne ²eme, c) odreživanje kontrolnih re£i i d) program.

2
8255 8086

D0 – D7 a0 – a15
a1 A0 BHE
a2 A1 ALE

LED PA RD RD
prekidači PB WD WD M/IO
CS

8205

a3 A0 Y0
Y1
a4 A1 Y2
a5 A1 Y3
Y4
Y5
Y6
Y7

E1 E2 E3

..
BHE
M/IO

a0
a3 · · · a5

a6
a15

Slika 1.2: Logi£ka ²ema

3
A15  A12 A11  A8 A7  A4 A3  A0

PA 1111 1111 1100 0000 0xFFC0


PB 1111 1111 1100 0010 0xFFC2
PC 1111 1111 1100 0100 0xFFC4
Ctr 1111 1111 1100 0110 0xFFC6

c) Kontrolna re£ je 10000010 (ili heksadekadno 82(16) ) i ²alje se na adresu


kontrolnog registra (0xFFC6).
d) Program:
DATA SEGMENT
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
; CLI - uklju£ivanje zabrane prekida

; inicijalizacija komponente 8255


MOV DX, 0FFC6h
MOV AL, 82h
OUT DX AL

;STI - iskljucivanje zabrane prekida

CALL MAIN ; poziv procedure za obradu prekida

MOV AX, 4C02h


INT 21h
CODE ENDS
END START

;;; Procedura za obradu prekida


MAIN PROC NEAR
PUSH AX
PUSH DX

PETLJA:
MOV DX, 0FFC2h ; adresa PB

4
IN AL, DX
MOV DX, 0FFC0h ; adresa PA
OUT DX, AL
JMP PETLJA

POP DX
POP AX
RET
MAIN ENDP

5
Glava 2

Adresiranje memorije kod 8086

neparna banka parna banka

512k · 8b 512k · 8b
CS CS

BHE A0

adresna
magistrala

magistrala D8 – D15 D0 – D7
za podatke

Slika 2.1: Logi£ka ²ema

Za neparnu banku se vodi signal BHE sa adresne magistrale, a za parnu


banku se vodi A0 .
Postoje £etiri slu£aja adresiranja:
1. Procesor prenosi podatke iz parne banke (parna adresa):
MOV AL, [4C00h] BHE = 1 i A0 = 0
2. Procesor prenosi podatke iz neparne banke (neparna adresa):
MOV AL, [4C01h] BHE = 0 i A0 = 1
3. Procesor prenosi 16-bitni podatak sa parne adrese:
MOV AX, [4C00h] BHE = 0 i A0 = 0

6
4. Procesor prenosi 16-bitni podatak sa neparne adrese:
MOV AX, [4C01h] BHE = 0 i A0 = 0
U poslednjem slu£aju je u pitanju neporavnat pristup, pa se zato obavlja iz
2 takta. Za prva tri slu£aja se sve obavlja u jednom taktu.

7
Glava 3

Komponenta 8251

8251
serijski
PC interni 8086
prenos bafer

Slika 3.1: Mesto komponente 8251 u sitemu sa procesorom 8086

Signalizacija kod serijskog prenosa Da bi se zapo£eo prenos na logi£koj


liniji, signal mora da padne sa 1 na 0. Da bi se preneo podatak, signal po£inje
start-bitom u trajanju od jednog bitskog intervala. Zatim se ²alje 5 do 8
bita podatka. Nakon toga, opciono moºe i¢i bit parnosti. Na kraju dolazi
stop-bit koji moºe da traje 1, 1.5 ili 2 bitska intervala. Ovo je ilustrovano
slikom 3.2 (marking je stanje kada nema prenosa).

marking

start 5b – 8b bit
bit parnosti

Slika 3.2: Izgled signala pri serijskom prenosu

Tipovi prenosa Postoje dva tipa prenosa.


• Asinhroni (koji je obja²njen iznad) omogu¢ava prenos u bilo kom
trenutku, tj. bez ikakve sinhronizacije sa taktom.

8
• Sinhroni ima dodatnu liniju za klok, tako da se podatak moºe pojaviti
samo u odreženim vremenskim intervalima.

Pinovi Komponenta 8251 ima slede¢e pinove:

RxD, TxD pinovi prenosa (Receive, Transmit )

RxC, TxC klokovi pinova prenosa

TxRDY postavljen na 1 kada je spreman za slanje (Transmit ready )

RxRDY postavljen na 1 kada je spreman za prijem (Receive ready )

TxE postavljen na 1 kada je unutra²nji bafer za podatke prazan

Raspored pinova je prikazan na slici 3.3.

8251

C/D D0 – D7
RD
WR
TxE
RxD
RxRDY
TxD
TxRDY
RxC
TxC CS

Slika 3.3: Raspored pinova komponente 8251

Kombinacija signala je prikazana u tabeli 3.1.

CS C/D RD WR Efekat

0 1 0 1 ƒitanja kontrolnog registra


0 1 1 0 Prenos u kontrolni registar

Tabela 3.1: Kombinacija signala komponente 8251

9
Kontrolne re£i Sa CPU-a dolaze dve kontrolne re£i: mode i command. Iz
kontrolnog registra dolazi samo status. Kontrola re£ mode prikazana je na
slici 3.4, a kontrolna re£ command na ??.

00 – disable 00 – 5b 00 – Sync
1 sb – 01
01 – disable 01 – 6b 01 – 1×
1.5 sb – 10
10 – neparna 10 – 7b 10 – 16×
2 sb – 11
11 – parna 11 – 8b 11 – 64×

broj stop bitova bit parnosti broj prenetih bitova definiše mod i brzinu
preko serijske linije serijskog prenosa

Slika 3.4: Kontrola re£ mode

0 0 0 0
TxE
RxE
Reset Error Flag
Internal Reset

Slika 3.5: Kontrola re£ command

Status je prikazan na slici 3.6 i ima tri bita gre²ke.


PE (Parity Error )
OE (Overrun Error )  Nastaje kada procesor ne pro£ita prethodni poda-
tak koji se nalazio u internom baferu. Mežutim, skoro je nemogu¢e
da se na ovaj na£in javi gre²ka jer je procesor za red veli£ine brºi od
komponente 8251, pa je jedini realan uzrok ovoga uzajamno blokiranje
(deadlock ) ili beskona£na petlja.
FE (Framing Error )  Nije detekovan start-bit ili stop-bit. Ovo predsta-
vlja poreme¢aje u signalizaciji.
Komponenta se koristi tako ²to procesor periodi£no proziva komponentu i
£ita egove kontrolne re£i status. Ova tehnika se naziva polling.

10
PE OE FE

TxRDY
RxRDY
TxE

Slika 3.6: Kontrola re£ status

Zadatak 2 Za mikroprocesor iAPX8086 projektovati mikrora£unar-


ski sistem za primopredaju pomo¢u komponente 8251A. Komponentu
isprogramirati za prijem i predaju po N osmobitnih podataka bez bita
parnosti sa jednim stop-bitom koriste¢i brzinu 16×. Prijem i predaju
organizovati ispitnim petljama. Obezbediti slanje i prijem kad god je
komponenta spremna za slanje i prijem novog podatka. Komponenta je
vezana na adresu 0xFE00h.

Re²enje.

a) Na slici 3.7 prikazana je logi£ka ²ema re²enja zadatka.


b) Adresna ²ema:

A15  A12 A11  A8 A7  A4 A3  A0


Data 1111 1110 0000 0000 0xFE00
Ctrl 1111 1110 0000 0010 0xFE02

c) Kontrolna re£: Mode je 0x4E, a Command je 0x15.


d) Dijagram stanja je prikazan na slici 3.8. Program je dat u nastavku.
DATA SEGMENT
N DB 100
SEND DB 100 DUP (2Eh) ; bafer za slanje
RECV DB 100 DUP (?) ; bafer za prijem
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA

START:
MOV AX, DATA
MOV DS, AX

11
8251 8086

D0 – D7
RD BHE
WR
a1 C/D

RD
WD M/I0
CS

8205

Y0 A0 a3
Y1
A1 a4
Y2
Y3 A2 a5
Y4
Y5
Y6
Y7

E1 E2 E3

..
BHE
M/IO

a0
a2 – a8

a9
a15

Slika 3.7: Logi£ka ²ema uz re²enje zadatka

idle

mode

sync1
reset
sync2

command

Slika 3.8: Dijagram stanja komponente 8251

12
; inicijalizacija 8251

; CLI

; Dovedi komponentu 8251


; u stanje za prijem komande.
; (Pogledati dijagram stanja.)
MOV AL, 00h
MOV DX, 0FE02h
OUT DX, AL
OUT DX, AL
OUT DX, AL

; Resetuj komponentu
MOV AL, 40h
OUT DX, AL

; Postavi kontrolnu re£ MODE


MOV AL, 4Eh
OUT DX, AL

; Postavi kontrlnu re£ COMMAND


MOV AL, 15h
OUT DX, AL

;STI

; Obri²i registre za slanje/prijem


XOR SI, SI
XOR DI, DI

PETLJA:
MOV DX, 0FE02h
IN AL, DX
TEST AL, 38h ; izvuci statusne bitove
JNZ GRESKA ; sko£i na obradu gre²ke
CMP SI, N
JL SLANJE
CMP DI, N
JL PRIJEM

13
JMP KRAJ

SLANJE:
CMP SI, N ; broja£ poslatih
JZ PRIJEM
TEST AL, 01h ; provera TxRDY == 1
JZ PRIJEM ; ako nije spreman
MOV DX, 0FE00h
MOV AL, SEND[SI]
OUT DX, AL ; prenos u 8251
INC SI ; uve¢anje poslatih

PRIJEM:
CMP DI, N
JZ PETLJA
MOV DX, 0FE02h
IN AL, DX
TEST AL, 02h ; provera RxRDY == 1
JZ PETLJA
MOV DX, 0FE00h
IN AL, DX ; £itanje podatka
MOV RECV[DI], AL
INC DI ; uve¢anje primljenih
JMP PETLJA

GRESKA:
; Bez obrade. Moºe da se javi na prijemu
; podataka, ali ¢e se registrovati tek
; prolaskom kroz glavnu petlju.

KRAJ:
MOV AH, 4Ch
INT 21h

CODE ENDS
END START

14
Glava 4

Komponenta 8259

Prekidi kod 8086 Prvi kilobajt procesora 8086 ima posebu namenu i
zove se tabela vektora prekida (Interrupt Vector Table ). Ilustrovan je
na slici 4.1. Zapis i tabele prekida je podeljen na 2 dela:

• CSi koji ozna£ava adresu segmenta koda prekidne procedure i

• IPi koji ozna£ava pokaziva£ instrukcije prekidne procedure.

1 kB

CSi
i 256 zapisa od po 4 B
IPi

Slika 4.1: Tabela prekida

Kako je zapis u tabeli prekida veli£ine 4 B, to zna£i da kada stigne prekid


i, bi¢e opsluºen procedurom sa adresom 4i. Hardverski prekidi1 su elementi
vi²eg, a softverski niºeg dela tabele prekida.
1 Hardverski prekidi su £esto pitanje na usmenom.

15
Da bi procesor mogao da iskoristi ovakvu konguraciju, pridruºena mu je
komponenta 8259. Logi£ka ²ema komponente 8259 prikazana je na slici 4.2.
Magistralom podataka se ²alje vektor prekida INTV ka procesoru 8086 (iden-
tikator prekida). A0 nije zi£ki odvojen registar, ve¢ mu govori kako da
protuma£i podatak u registru. Sluºi za adresiranje internih registara. Signal
INT prekida proces, a signal INTA ozna£ava potvrdu prekida.

8259

8b
IR0
IR1
IR2
IR3
IR4
IR5 A0
IR6
IR7 INT ka procesoru

INTA iz procesora
WR
RD CS

Slika 4.2: Logi£ka ²ema komponente 8259

Prvi znak da ¢e procesor prihvatiti prekid je prvi impuls na INTA (vidi


sliku 4.3). On sluºi da 8259 zabeleºi negde kod sebe da je prekd u toku
obrade. Drugi impuls mu kaºe da na linije stavi vektor prekida.

prvi impuls drugi impuls

Slika 4.3: Impuls

Kontrolne re£i Postoji pet kontrolnih re£i, date u nastavku.


ICW1 (A0 = 0)  Prvi bit zdesna odrežuje da li ¢e se koristiti ICW4 (1
zna£i da ho¢e, a 0 da ne¢e). Drugi bit postavljen na 1 govori da ¢e to
biti jedna jedina komponenta 8259 u sistemu. ƒetvrti bit se naj£e²¢e
postavlja na 0  to zna£i da ¢e se prekid otkriti na uzlaznoj ivici takta.

16
Kada je postavljen na 1, prekid ¢e se otkriti na IR liniji ako jedinica
traje zadato vreme.

ICW2 (A0 = 1)  Prva tri bita zdesna nemaju efekta kod inicijalizacije.
Levih pet bitova su deo vektora prekida.

ICW4 (A0 = 1)  Kada je prvi bit sleva postavljen na 1, prelazi se u mikro-


procesorski mod. Slede¢i bit, EOI, govori o na£inu zavr²etka prekida, tj.
kako da procesor obvesti 8259 da je obrada prekida zavr²ena na strani
procesora. Kada je postavljen na 1 (u zadacima ¢e uglavnom biti tako),
podrazumeva se da ¢e drugi impuls da zna£i kraj ciklusa prihvatanja
obrade prekida (zato je ovo primer hardverski kontrolisanog prekida).
Ovo je takozvani auto mod. Kada je postavljen na 0 (normal ), radi se
o softverskom prekidu i podrazumeva se slanje OCW2 kontrolne re£i
neposredno pre instrukcije IRET.

OCW1 (A0 = 1)  jedinica na poziciji i ozna£ava da je prekid sa IRi zabra-


njen.

OCW2  ne¢e biti izu£avana na ovom kursu.

Zadatak 3 Projektovati sistem za predaju i prijem podataka kori-


ste¢i komponentu 8251. Podaci se ²alju sa adrese SEND, a prihvataju na
adresu RECV. Komponentu isprogramirati za istovremeni prijem i pre-
daju 5 b podataka (64 × 5 b) brzinom 16× sa parnim bitom parnosti i
1.5 stop bitom. Predaju organizovati ispitnom petljom, a prijem preko
prekida 173.

Re²enje.

a) Logi£ka ²ema je prikazana na slici ??.

b) Adresna ²ema je prikazana u slede¢oj tabeli.

A15  A12 A11  A8 A7  A4 A3  A0

Data 1111 1111 0000 0000 0xFF00


Ctrl 1111 1111 0000 0010 0xFF02
A0 = 0 1111 1111 0000 0100 0xFF04
A0 = 1 1111 1111 0000 0110 0xFF06

c) Kontrolne re£ za 8251 su 0xB2 za mode , 0x15 za command .

17
d) Kontrolne re£ za 8259 su: ICW1  0x13, ICW2  0xA8, ICW4 0  0x03
i OCW1  0xDF.
e) Program:
EXTRN PREKID:FAR ;pomocna procedura za obradu prekida
PUBLIC RECV, BRULAZ ;vidljivo i iz drugih modula

DATA SEGMENT
BRULAZ DB 0
;baferi primljenih i poslatih podataka
SEND DB 64 DUP (3Fh)
RECV DB 64 DUP (?)
DATA ENDS

STEK SEGMENT
BOS DW 256 DUP (?)
TOS LABEL WORD
STEK ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STEK
START:
;inicijalizacija segmenata
MOV AX, DATA
MOV DS, AX
MOV AX, STEK
MOV SS, AX
LEA SP, TOS
;inicijalizacija komponenti
CLI
;8251
MOV AL, 00h
MOV DX, 0FF02h
OUT DX, AL
OUT DX, AL
OUT DX, AL
MOV AL, 40h
OUT DX, AL
MOV AL, B2h ;slanje mode kontrolne reci
OUT DX, AL
MOV AL, 15h ;slanje komandne kontrolne reci

18
OUT DX, AL
;8259
MOV DX, 0FF04h
MOV AL, 13h ;ICW1
OUT DX, AL
MOV DX, 0FF06h
MOV AL, 0A8h ;ICW2
OUT DX, AL
MOV AL, 03h ;ICW4
OUT DX, AL
MOV AL, 0DFh ;OCW1
OUT DX, AL
;inicijalizacija tabele vektora prekida
MOV AX, OFFSET PREKID
MOV 0:[173*4], AX ;PROVERITI OVO - trebalo bi da ne moze sa nulom, ali da m
MOV AX, SEG PREKID
MOV 0:[173*4+2], AX ;I OVO
MOV CX, 64
MOV SI, 0
STI ;dozvola prekida
PETLJA:
CEKAJ:
MOV DX, 0FF02h
IN AL, DX ;AL -- status
TEST AL, 38h ;test na gresku koja se moze javiti u prijemu
JNZ GRESKA
TEST AL, 01h ;TxRDY == 1?
JZ CEKAJ ;ako nije spreman, cekaj da bude
MOV DX, 0FF00h
MOV AL, SEND[SI]
OUT DX, AL
INC SI
LOOP PETLJA ;64 prolaza
CEKAJ1: ;cekanje na prekidnu proceduru
CMP BRULAZ 64
JL CEKAJ1
MOV DX, 0FF02h ;testiranje na gresku
IN AL, DX
TEST AL, 38h
JZ KRAJ
GRESKA: ;kod za upravljanje greskom

19
KRAJ:
MOV AH, 4Ch
INT 21h
CODE ENDS
END START
;----------------------
;Eksterna procedura za prekide
;Radi paralelno i vrsi prijem podataka
EXTRN RECV:BYTE, BRULAZ:BYTE
PUBLIC PREKID
PROCED SEGMENT
PREKID PROC FAR
ASSUME CS:PROCED
;cuvanje konteksta procesora
PUSHF
PUSH AX
PUSH DI
PUSH DX
MOV DX, 0FF00h ;bez testiranja na spremnost jer je RxRDY sigurno 1
IN AL, DX
MOV DI, BRULAZ
MOV RECV[DI], AL
INC BRULAZ ;uvecanje brojaca primljenih
;vracanje konteksta procesora
POP DX
POP DI
POP AX
POPF
IRET ;vracanje iz procedure
PREKID ENDP
PROCED ENDS

20
Glava 5

Drugi zadatak za 8259

Projektovati mikrora£unarski sistem za kasu na bazi mikroprocesora iAPX8086.


Sistem sadrºi 10 sedmosegmentnih dispela i tastaturu sa tasterima od 0 do
9, +, = i RESET taster. Pritiskom na RESET bri²e se trenutno stanje, dok
pritiskom na = generi²e prikaz zbira svih unetih iznosa. Napisati procedure
koje ¢e na displejima ispisivati ono ²to je otkucano na tastaturi, kao i uku-
pan iznos za pla¢anje. Komponenta 8259 je na adresi 0F000h, a redni broj
prekida najvi²eg prioriteta je 117. Za realizaciju displeja koristiti tehniku
osveºavanja.1
Adresna ²ema:
Komponenta A15  A12 A11  A8 A7  A4 A3  A0
1111 0000 0000 0000 F000h
8259
1111 0000 0000 0010 F002h
1111 0000 0000 1100 F00Ch PC
1111 0000 0000 1110 F00Eh CTRL
8255-1
1111 0000 0000 1000 F008h PA
1111 0000 0000 1010 F00Ah PB
1111 0000 0001 0100 F014h PC
1111 0000 0001 0110 F016h CTRL
8255-2
1111 0000 0001 0000 F010h PA
1111 0000 0001 0010 F012h PB
Kod (bez SCAN algoritma):
; glavni program
EXTRN Taster_proc:far, Osvez_proc:far
1 Ovaj zadatak ne dolazi ceo u obzir, ve¢ samo njegovi delovi

21
PUBLIC DISPLAY, ZBIR, ROTOR, DEFC, POZC

DATA segment
DEFC db 7eh, 30h, 6dh, 79h, 33h, 5bh, 5fh, 70h, 7fh, 7bh
DISPLAY db 10 dup (0)
ZBIR db 10 dup (0)
ROTOR dw 0
POZC dw 0
DATA ends

STACK segment
bos dw 256 dup (?)
tos label word
STACK ends

CODE segment
assume CS:CODE, DS:DATA, SS:STACK
start:
mov AX, DATA
mov DS, AX
mov ES, AX
mov AX, STACK
mov SS, AX
lea SP, tos

cli
; 8259 inic.
; ICW1
mov DX, 0F000h
mov AL, 13h
out DX, AL
; ICW2
mov DX, 0F002h
mov AL, 70h
out DX, AL
; ICW4
mov AL, 03h
out DX, AL
; OCW1
mov AL, 5Fh
out DX, AL

22
; 8255-1 inic.
mov DX, 0F00Eh
mov AL, 80h
out DX, AL
; 8255-2 inic.
mov DX, 0F016h
mov AL, 92h
out DX, AL

; Tabela prekida inic.


mov AX, 0
mov ES, AX
mov word ptr ES:[468], OFFSET Taster_proc
mov word ptr ES:[470], SEG Taster_proc
mov word ptr ES:[476], OFFSET Osvez_proc
mov word ptr ES:[478], SEG Osvez_proc

sti

main:
jmp main

mov AX, 4C02h


int 21h

CODE ends
end start

; prekidne i pomocne procedure


PUBLIC Osvez_proc, Taster_proc
EXTRN DISPLAY:byte, ZBIR:byte, ROTOR:byte, DEFC:byte, POZC:word

PCODE SEGMENT
assume CS: PCODE
Osvez_proc proc far

pushf
push AX
push CX
push DX

23
push SI

cli
mov AL, ROTOR
inc AL
cmp AL, 10
jl dalje1
mov AL, 0

dalje1:
mov ROTOR, AL
mov AH, 0
mov SI, AX
mov AL, DISPLAY[SI]
mov SI, AX
mov AL, DEFC[SI]

mov DX, 0F008h


out DX, AL
mov AX, 0200h
mov CL, ROTOR
shr AX, CL
mov DX, 0F00Ah
out DX, AL
mov DX, 0F00Ch
mov AL, AH
out DX, AL

sti
pop SI
pop DX
pop CX
pop AX
popf
iret
Osvez_proc endp

Taster_proc proc far


assume CS: PCODE
pushf
push AX

24
push DX
push BX

cli
mov DX, 0F010h
in AL, DX
cmp AL, 0
je portb
mov BX, 0

poredi:
cmp AL, 1
je nasao
shr AL, 1
inc BX
jmp poredi

nasao:
call Cifra_proc
jmp kraj

portb:
mov DX, 0F012h
in AL, DX
cmp AL, 1
je losam
cmp AL, 2
je ldevet
cmp AL, 4
je lreset
cmp AL, 8
je lplus
jmp ljednako

losam:
mov BX, 8
call Cifra_proc
jmp kraj
ldevet:
mov BX, 9
call Cifra_proc

25
jmp kraj
lplus:
call Plus_proc
jmp kraj
ljednako:
call Jednako_proc
jmp kraj
lreset:
call Reset_proc

kraj:
sti
pop BX
pop DX
pop AX
popf
iret
Taster_proc endp

Reset_proc proc near


pushf
push SI
push CX
xor SI, SI
mov CX, 10
petlja:
mov byte ptr DISPLAY[SI], 0
mov byte ptr ZBIR[SI], 0
inc SI
loop petlja

pop CX
pop SI
popf
ret
Reset_proc endp

Jednako_proc proc near


pushf
push SI
push AX

26
push CX
call Plus_proc

xor SI, SI
mov CX, 10
petlja:
mov AL, DS:[SI+ZBIR]
mov DS:[SI+DISPLAY], AL
inc SI
loop petlja
pop CX
pop AX
pop SI
popf
ret
Jednako_proc endp

Cifra_proc proc near


pushf
push BP
push AX

mov BP, POZC


cmp BP, 10
je kraj
petlja:
cmp BP, 0
je novacifra
dec BP
mov AL, DS:[BP+DISPLAY]
inc BP
mov DS:[BP+DISPLAY], AL
dec BP
jmp petlja

novacifra:
mov DS:[BP+DISPLAY], BL
inc POZC
kraj:
pop AX
pop BP

27
popf
ret
Cifra_proc endp

Plus_proc proc near


pushf
push AX
push SI
xor SI, SI
mov AH, 0
petlja:
mov AL, DISPLAY[SI]
add AL, ZBIR[SI]
add AL, AH
mov AH, 0
cmp AL, 10
jl v2
mov AH, 1
sub AL, 10
v2:
mov ZBIR[SI], AL
mov DISPLAY[SI], 0

inc SI
cmp SI, 9
jbe petlja
mov POZC, 0
pop SI
pop SI
pop AX
ret
Plus_proc endp

PCODE ends
END
Napomene:
a) Tehnika osveºavanja na primeru dva sedmosegmentna displeja
SLIKAAA
b) Izvori prekida mogu biti taster ili generator takta za osveºavanje di-

28
spleja koji generi²e prekid na tr sekundi.
c) Matri£na tastatura2 SLIKAAAAA
Obja²njenje: Koristimo 2 komponente 8255 (jedna za displej a druga za
tastaturu). Pinovi A3 do A5 se vode na dekoder. Promenljiva DEFC pred-
stavlja kodove cifara. Niz DISPLAY predstavlja niz cifara koji su prikazani,
pri £emu na poziciju najmanje teºine ide i cifra najmanje teºine. Glavni
program ne radi ni²ta (vrti beskona£nu petlju). ROTOR predstavlja broj
osveºavanja i njegova vrednost nam kazuje koji ¢e displej biti osveºen.
Kod (SCAN algoritam):
DATA SEGMENT
;inicijalizacija tabele koja pamti karaktere
;Ovi karakteri se salju na PA komponente 8255
;i na osnovu njih se proverava koji tester
;je pritisnut. EEh je vrednost gornjeg levog tastera.
TABLE DB 77h, 78h, 7Dh, 7Eh, 0B7h, 0BBh, 0BDh, 0BEh, 0D7h, 0DBh, 0DEh, 0E7h, 0EB
DATA ENDS

;procedura za skeniranje
KEYBRD PROC NEAR
PUSHF
PUSH BX
PUSH CX
PUSH DX
MOV AL, 0
MOV DX, 0FFF9h ;port A je smesten na 0FFF9h
OUT DX, AL ;saljemo sve nule na PA
MOV DX, 0FFFBh ;port B je smesten na 0FFFBh
;naredni deo koda ceka nulu sa tastature
;nula nam kazuje da je neki od tastera pritisnut
WAIT_OPEN:
IN AL, DX
AND AL, 0Fh
CMP AL, 0Fh
JNE WAIT_OPEN
;naredni deo koda ceka otpustanje dugmeta
WAIT_PRESS:
IN AL, DX
2 Problemi pri implementaciji matri£ne tastature je jedno od pitanja za usmeni

29
AND AL, 0Fh
CMP AL, 0Fh
JE WAIT_PRESS

;naredne dve instrukcije sluze za


;ponistavanje oscilacija signala
;Ovo se oznaca kao td i za procesor
;od 2MHz treba da bude 20ms
;(1s - 20000000 taktova => 20ms - 40000taktova)
;Vrednost CX se racuna kao
;(CX-1)*17+5 = 40000
;=> CX = 931h
;Loop traje 17 taktova ako se nije zavrsio
;odnosno 5 taktova ako je poslednja loop naredba

MOV CX, 0931h


DELAY:
LOOP DELAY
;provera da li je taster
;zaista pritisnut
IN AL, DX
AND AL, 0Fh
CMP AL, 0Fh
JE WAIT_PRESS ;ako neko i dalje drzi, jos cekamo

;Salje se po jedna nula na svaki red


;kako bi se ispitalo koji red je aktivan
MOV AL, 0FEh ;maska
MOV CL, AL ;kopija 1
MOV AH, AL ;kopija 2
NEXT_ROW:
MOV DX, 0FFF9h
OUT DX, AL ;aktivacija reda
MOV DX, 0FFFBh
IN AL, DX ;provera nula na kolonama
AND AL, 0Fh
CMP AL, 0Fh
;Ukoliko smo na izlazu iz kolone
;dobili sve jedinice, pritisnut taster
;nije u toj koloni
JNE ENCODE ;Skok ukoliko je bar jedna nula

30
;Pomeranje maske - odabir novog reda
ROL CL, 1
MOV AL, CL
MOV AH, AL
JMP NEXT_ROW
ENCODE:
MOV DX, 000Fh ;zbunjen sam - ako neka zna zasto ovo, neka javi
IN AL, DX ;broj kolone
SHL AH, 4 ;pomeramo masku u gornji deo AH
OR AL, AH ;spajamo AL i AH u AL
TRY_NEXT:
CMP AL, TABLE[BX] ;poredjenje sa kodom iz memorije
JZ DONE
DEC BX
JNS TRY_NEXT ;ako nije to taj kod, idemo dalje
MOV AH, 1 ;u AH je status
JMP EXIT
DONE:
MOV AL, BL
MOV AH, 0
EXIT:
POP DX
POP CX
POP BX
POPF
RET
KEYBRD ENDP

EXTRN RESET_PROC : FAR, PLUS_PROC : FAR, JEDNAKO_PROC : FAR, CIFRA_PROC : FAR

MAIN:
;Posto je ovo blokirajuca procedura
;ona ide u glavni program, a ne u prekidnu proceduru
XOR BX, BX
CALL KEYBRD
CMP AH, 0 ;provera statusa
JNE MAIN ;los status, pa je potrebno novo citanje
CMP AL, 10 ;provera cifre
JL CIFRA_L
;CMP AL, 10 - ovo smo utvrdili na casu da je visak

31
JE PLUS_L
CMP AL, 11
JE JEDNAKO_L
CMP AL, 11
JE RESET_L
JMP MAIN
CIFRA_L:
MOV BL, AL
CALL CIFRA_PROC
JMP MAIN
PLUS_L:
CALL PLUS_PROC
JMP MAIN
JEDNAKO_L:
CALL JEDNAKO_PROC
JMP MAIN
RESET_L:
CALL RESET_PROC
JMP MAIN

32

You might also like