UNIVERZITET "Sv. Kiril i Metodij"

Prirodno matemati~ki Fakultet - Skopje

Institut za Informatika

 

 

 

SISTEMSKI DATUM I VREME NA SIGNALNA KUTIJA

 

 

Seminarska rabota po predmetot

Mikroprocesori i mikrokompjuteri

 

 

 

Izrabotil: Maja Videnovi}

Mentor: d-r Marjan Gu{ev

 

 

 

Skopje, fevruari 1998

 

REZIME

Ovaa seminarska rabota vr{i prika`uvawe na sistemskiot datum i sistemskoto vreme na signalna kutija. Kako displej se koristat portite 1A, 1V, 2A i 2V od signalnata kutija povrzana na 8255 programibilnata vlezno/izlezna karti~ka. Kontrolata na toj prikaz e ostvarena preku portata 1S. Portata 2S ne se koristi. Programata koja go vr{i ova prika`uvawe e napi{ana vo asembler koj najmnogu odgovara za taa cel.

 

ABSTRACT

This seminar project presents system date and system time on the signal box. Ports 1A, 1B, 2A and 2B from the signal box connected with a 8255 programmable input/output card are used as a display. Port 1C controls the other ports. The program is written in assembler as best choice for this purpose.

 

SODR@INA

1 SIGNALNA KUTIJA

2 RE[ENIE NA PROBLEMOT

2.1 OPIS NA PROBLEMOT

2.2 PROGRAMSKO RE[ENIE

ZAKLU^OK

DODATOK: vm4308.asm

1. SIGNALNA KUTIJA

 

8255A e PPI (Programmable peripheral interface) ured dizajniran za upotreba so RS kompatibilni sistemi. Negovata funkcija e realizirawe na vlezno/izlezni operacii pome|u periferni edinici i kompjuterski sistem. Funkcionalnata konfiguracija na 8255A mo`e da se programira so pomo{ na sistemski softver, pa ne e potrebna dodatna nadvore{na kontrolna logika.

Svojstva na 8255 vlezno izlezna karta se:

-programibilni vlezno izlezni kontrolni funkcii,

-vlezno izlezni linii,

-maksimum 2MHz frekvencija na odbrojuvawe,

-tri nezavisni 16 bitni broja~i,

-poddr`uva nekolku programibilni operacioni re`imi,

-LED indikatori za vreme na v/i operacii,

-selektivni adresi na portite.

8255A sodr`i tri 8-bitni porti A, V i S.

Portata A mo`e da raboti kako 8-bitna v/i vo re`im 0, 1 i 2.

Portata V mo`e da raboti kako 8-bitna v/i vo re`im 0 i 1.

Portata S mo`e da raboti kako 8-bitna v/i vo re`im 0 i 1.

Signalnata kutija za 8255 se sostoi od signalni sijalici, sedum segmenten displej i prekinuva~i povrzani so soodvetnite porti od 8255A ~ipovite.

 

2.RE[ENIE NA PROBLEMOT

Vo ovaa glava }e bide opi{an problemot, algoritmot za negovo re{avawe i programskoto re{enie.

 

2.1 OPIS NA PROBLEMOT

Problemot se sostoi vo prika`uvawe na sistemskata data (den, mesec, den vo nedela i tekovna godina) i sistemskoto vreme (~as, minuti i sekundi). Prika`uvaweto se realizira na portite 1A, 1V, 2A i 2V, a kontrolata nad seto toa se vr{i so pomo{ na portata 2S. Ovde portata 2S ima uloga na prekinuva~. Koga e postaven R2S0 t.e. koga toj e postaven nagore se prika`uva sistemskiot datum, a koga e postaven prekinuva~ot R2S1 toga{ se prika`uva sistemskoto vreme. Postepenoto prika`uvawe na datumot i vremeto se ovozmo`uva so pritiskawe na ENTER posle sekoj poedine~en prikaz. Prvo se prika`uva sistemskiot datum, a koga }e se zavr{i so toa se preminuva na prika`uvawe na sistemskoto vreme. Programata prekinuva koga }e zavr{i prikazot na sistemskoto vreme.

 

2.2 PROGRAMSKO RE[ENIE

 

Sleduva podetalno objasnuvawe na programata mv4308.asm . Vo programata se koristat slednite makroa:

 

@Readkey MACRO char

MOV AH,7H

INT 21H

MOV char,AL

ENDM

Slika 1. Makro za ~itawe vrednost od tastatura.

Makroto Readkey pretstaveno na slika br.1 povikuva MS-DOS funkcija 07N za softverski prekin 21N koja slu`i za ~itawe na karakter od tastaturata. Kodot na pro~itaniot karakter se smestuva vo AL.

 

@Display MACRO text

MOV AH, 09H

MOV DX, OFFSET text

INT 21H

ENDM

Slika 2. Makro za prika`uvawe na tekst na ekran.

Makroto Display povikuva soodvetna 9-ta funkcija za softverski prekin 21N od MS-DOS operativniot sistem za pe~atewe na poraka na ekranot. Pri toa vrednosta 9 {to se postavuva vo registerot AN go nosi redniot broj na sistemskata funkcija, a registerot DX e poka`uva~ na porakata {to treba da se otpe~ati, kako {to e poka`ano na slika br.2.

 

@Send MACRO ?port,?value

MOV DX,?port

MOV AL,?value

OUT DX, AL

ENDM

Slika 3. Makro za prenesuvawe na vrednost vo porta.

So makroto pretstaveno na slika br.3 se vr{i ispra}awe na vrednost na porta so pomo{ na instrukcijata OUT. Vrednosta koja {to se ispra}a se smestuva vo registerot AL.

 

@Receive MACRO ?port

MOV DX,?port

IN AL, DX

ENDM

Slika 4. Makro za prezemawe na vrednost od portata.

 

Makroto od sl.4 e napraveno za prezemawe na vrednosta od specificiranata porta i nejzino smestuvawe vo registerot AL so pomo{ na instrukcijata IN.

 

 

@Brisi MACRO

MOV CX, 0

MOV DX,2479H

MOV BH,7

MOV AX,600H

INT 10H

ENDM

Slika 5. Makro za bri{ewe na ekranot.

 

Makroto Brisi pretstaveno na slika br.5 vr{i bri{ewe na ekranot so skrolirawe na cel ekran nadolu.

 

@Prati MACRO od

MOV BL,0AH

MOV AL,od

MOV AH,00H

DIV BL

XOR BL,BL

MOV BL,AL

MOV AL,AH

MOV AH,00H

MOV BP,AX

@Send port2B,niza[BP]

MOV AL,BL

MOV AH,00H

XOR BP,BP

MOV BP,AX

@Send port2A,niza[BP]

ENDM

Slika 6. Makro za ispra}awe vrednost na portite.

Na slika br.6 e pretstaveno makro za ispra}awe na vrednosti na portite 2A i 2V, t.e. ispra}awe na dvocifreni broevi na displejot. Vrednosta koja {to treba da se isprati e smestena vo registerot od i potoa se oddeluvaat cifrite na brojot i soodvetno cifrite se ispra}aat na portite.

 

@Smeni MACRO

DIV BL

MOV prvo,AL

MOV AL,AH

MOV AH,00H

MOV BP,AX

ENDM

Slika 7. Makro za oddeluvawe na cifrite na daden broj.

 

So makroto od slika br.7 se vr{i oddeluvawe na cifrite na vrednosta smestena vo registerot AH. Na krajot vo AH ostanuva poslednata cifra a vo prvo se smestuvaat prvite cifri. Ova makro podocna se koristi vo programata za ispra}awe na godinata na displej.

 

@Stavi MACRO od

MOV BL,0AH

MOV AL,od

MOV AH,00H

DIV BL

XOR BL,BL

MOV BL,AL

MOV AL,AH

MOV AH,00H

MOV BP,AX

@Send port1B,niza[BP]

MOV AL,BL

MOV AH,00H

XOR BP,BP

MOV BP,AX

@Send port1A,niza[BP]

ENDM

Slika 8. Makro za ispra}awe na vrednost na portite.

 

So ova makro se vr{i ispra}awe na vrednost od registerot od na portite 1A i 1V. Raboti isto kako makroto Prati pretstaveno na slika br.6. Se koristi za prika`uvawe na sistemskoto vreme vo oblik ~as-minuti i minuti-sekundi.

Slednite programski segmenti se koristat za proverka na sostojbata na prekinuva~ite. Na prviot segment pretstaven na slika br.9 se proveruva R2S0 za prika`uvawe na sistemskiot datum, a na vtoriot prika`an na slika br.10 se proveruva R2S1 t.e. se koristi za kontrola na prika`uvaweto na sistemskoto vreme.

 

@Receive port2C

MOV BL,01H

CMP AL,BL

JE Datum

MOV AH,4CH

INT 21H

Slika 9. Programski segment za kontrola na R2S0.

 

 

@Receive port2C

MOV BL,02H

CMP AL,BL

JE Vreme

MOV AH,4CH

INT 21H

Slika 10. Programski segment za kontrola na R2S1.

 

Dobivaweto na datumot i vremeto se vr{i so pomo{ na DOS funkcii pretstaveni na slika br.11.

 

MOV AH,2AH

INT 21H

Slika 11. Segment za ~itawe na sistemski datum.

 

So pomo{ na segmentot od slika 11 se ~ita datumot pri {to se smestuva denot vo DL, mesecot vo DH, denot vo nedelata vo AL a tekovnata godina vo CX. Pri prika`uvawe na godinata se koristi makroto Stavi.

 

MOV AH,2CH

INT 21H

Slika 12.Segment za ~itawe na sistemsko vreme.

So pomo{ na segmentot pretstaven na slika 12 se ~ita sistemsko vreme pri {to ~asot se nao|a vo SN, minutite vo CL, a sekundite vo DH. Se koristat naizmeni~no makroata Prati i Stavi.

 

MOV AH,4CH

INT 21H

Slika 13. Programski segment za kraj na programa.

Programskiot segment pretstaven na slika br.13 povikuva sistemska funkcija za softverskiot prekin 21N so reden broj 4SN od operativniot sistem MS-DOS za oznaka na funkcija so koja {to regularno se zavr{uvaat programite.

ZAKLU^OK

Ovaa seminarska rabota go re{ava problemot za prika`uvawe na sistemskiot datum i sistemskoto vreme na displej. Prika`uvaweto odi vo redosled datum, mesec, den vo nedela, godina, ~as-minuti i minuti-sekundi. Preminot od prikaz na edna vrednost kon prikaz na druga odi so pritiskawe na ENTER. Kako dodatok na seto ova na krajot e prilo`en i kodot na programata.

 

DODATOK: mv4308.asm

TITLE DOMASNA

 

@Readkey MACRO char ;Makro za citanje znak od tastaturata

MOV AH,7H ;i negovo smestuvanje vo char

INT 21H

MOV char,AL

ENDM

 

@Display MACRO text ;Makro za prikaz na text na ekran

MOV AH, 09H

MOV DX, OFFSET text

INT 21H

ENDM

 

@Send MACRO ?port,?value ;Makro za prenesuvanje na vrednosta value

MOV DX,?port ;od AL vo portata port

MOV AL,?value

OUT DX, AL

ENDM

 

@Receive MACRO ?port ;Makro za kopiranje na sodrzinata na portata port

MOV DX,?port ;vo AL

IN AL, DX

ENDM

 

@Prati MACRO od ;Makro za prakanje na vrednosta na od na

MOV BL,0AH ;portite 2A i 2B

MOV AL,od

MOV AH,00H

DIV BL

XOR BL,BL

MOV BL,AL

MOV AL,AH

MOV AH,00H

MOV BP,AX

@Send port2B,niza[BP]

MOV AL,BL

MOV AH,00H

XOR BP,BP

MOV BP,AX

@Send port2A,niza[BP]

ENDM

 

@Stavi MACRO od ;Makro za prakanje na vrednosta na od na

MOV BL,0AH ;portite 1A i 1B

MOV AL,od

MOV AH,00H

DIV BL

XOR BL,BL

MOV BL,AL

MOV AL,AH

MOV AH,00H

MOV BP,AX

@Send port1B,niza[BP]

MOV AL,BL

MOV AH,00H

XOR BP,BP

MOV BP,AX

@Send port1A,niza[BP]

ENDM

 

 

 

@Smeni MACRO ;Makro za oddeluvanje na cifrite na brojot

DIV BL ;smesten vo registarot AX

MOV prvo,AL

MOV AL,AH

MOV AH,00H

MOV BP,AX

ENDM

 

@Brisi MACRO ;Makro za brisenje na ekranot

MOV CX, 0

MOV DX,2479H

MOV BH,7

MOV AX,600H

INT 10H

ENDM

 

stack SEGMENT STACK

DB 64 DUP('?')

stack ENDS

 

data SEGMENT

novred DB 10,13,'$'

char DB ?

tekst1 DB ' Domasna rabota po predmetot Mikroprocesori i mikrokompjuteri $'

tekst2 DB ' Izraboti:Videnovic Maja $'

tekst3 DB ' Programata prikazuva sistemsko vreme i sistemski datum $'

tekst4 DB ' P2C0 prekinuvac: gore-prikazuva datum $'

tekst5 DB ' Prikazuvanjeto odi po redosledot: den,mesec,den vo nedela $'

tekst6 DB ' i godina so pritiskanje na ENTER $'

tekst7 DB ' P2C1 prekinuvac: gore-prikazuva vreme $'

tekst8 DB ' Prikazuvanjeto e :cas,minuti i sekundi povtorno so pritiskanje na ENTER $'

tekst9 DB ' Drugite prekinuvaci na portata C nemaat funkcija $'

od DB ?

den DB ?

mes DB ?

ned DB ?

cas DB ?

min DB ?

sec DB ?

val DB ?

prvo DB ?

reg DW ?

 

niza DB 63,6,91,79,102,109,125,7,127,111

port1A DW 1B0H

port1B DW 1B1H

port1C DW 1B2H

control1 DW 1B3H

port2A DW 1B4H

port2B DW 1B5H

port2C DW 1B6H

control2 DW 1B7H

data ENDS

 

code SEGMENT

ASSUME CS:code, DS:data

 

start:

MOV AX, data

MOV DS, AX

@Brisi

@Display novred

@Display novred

@Display novred

@Display tekst1

@Display novred

@Display tekst2

@Display novred

@Display tekst3

@Display novred

@Display tekst4

@Display novred

@Display tekst5

@Display novred

@Display tekst6

@Display novred

@Display tekst7

@Display novred

@Display tekst8

@Display novred

@Display tekst9

@Readkey char

 

@Send port1A,00H ;Pocetna inicijalizacija na portite

@Send port2A,00H

@Send port1B,00H

@Send port2B,00H

@Send port1C,00H

@Send control1,80H

@Send control2,89H

@Receive port2C ;Proverka na kontrolata na prekinuvacot 2C

MOV BL,01H

CMP AL,BL

JE Datum

MOV AH,4CH

INT 21H

 

Datum: MOV AH,2AH ;Citanje na sistemskiot datum

INT 21H

MOV den,DL

MOV mes,DH

MOV ned,AL

@Prati den ;Prikazuvanje na datumot,mesecot i

@Readkey char ;denot vo nedelata

@Prati mes

@Readkey char

@Prati ned

@Readkey char

MOV BL,0AH ;Prikazuvanje na tekovnata godina

MOV AX,CX

@Smeni

@Send port2B,niza[BP]

MOV AL,prvo

MOV AH,00H

@Smeni

@Send port2A,niza[BP]

MOV AL,prvo

MOV AH,00H

@Smeni

@Send port1B,niza[BP]

MOV AL,prvo

MOV AH,00H

@Smeni

@Send port1A,niza[BP]

@Readkey char

 

Vtoro: XOR AX,AX

XOR BX,BX

XOR CX,CX

XOR DX,DX

@Send port1A,00H

@Send port1B,00H

@Send port2A,00H

@Send port2B,00H

@Readkey char

@Receive port2C

MOV BL,02H

CMP AL,BL

JNE Kraj

Vreme: @Readkey char ;Citanje na sistemskoto vreme

MOV AH,2CH

INT 21H

MOV cas,CH

MOV min,CL

MOV sec,DH

@Stavi cas ;Prikazuvanje na casot,minutite i sekundite

@Prati min

@Readkey char

@Stavi min

@Prati sec

 

Kraj: MOV AH,4CH ;DOS funkcija za prekin

INT 21H

 

code ENDS

END start