MIKROPROCESORSKI SISTEMI

DOMAĆI ZADATAK BROJ 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SISTEM ZA UPRAVLJANjE PROCESOM PAKOVANjA PROIZVODA SA POKRETNE TRAKE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                      Autori

                                                       

        Beograd,                                            Vujović Ivana       81 96

11.01.2001.                                        Kovačević Miloš   250 97

 

 

                                                         

 

0.      Uvodna razmatranja

 

          Maksimalna brzina pokretne trake je 0.5m/s = 50cm/s = 10cm/200ms = 30cm/600ms.  Komandni signali (za pokretanje trake, pakovanje proizvoda i menjanje kutije) mogu da traju do 300ms. U najgorem slučaju između nailaska dva proizvoda treba poslati dva signala (pakovanje i zamena) što može da traje do 600ms, a to pri maksimalnoj brzini trake daje minimalno rastojanje od 30cm između dva proizvoda, da bi sistem korektno funkcionisao. To ujedno znači da novi proizvod ne može da stigne do detektora pre nego što prethodni ne stigne do pakera (30cm od detektora).

          Dodatne pretpostavke:

-          U toku nailaska proizvoda od detektora do pakera traka se pomera približno konstantnom brzinom.

-          Minimalna brzina trake iznosi Vmin=30cm/60000ms = 5mm/s, sve ispod toga sistem tretira kao zaustavljanje trake.

-          Maksimalan kapacitet kutije za pakovanje proizvoda je 65535 (U slučaju da se preko tastature unese kapacitet 0 ili veći od 65535, unos se ponavlja)

 

Uputstvo za upotrebu sistema:

-          Po uključivanju sistema ukucati kapacitet kutije za pakovanje proizvoda (u slučaju pogrešno unetog broja otkucati pet nula pa korektan broj) i Unesi.

-          Ako signal za pokretanje trake iz sistema nije vezan za motor koji pokreće traku, pokrenuti traku ručno.

-          U slučaju zaustavljanja trake (na displeju će se pojaviti poruka reset) resetovati sistem, ručno zameniti kutiju ako nije prazna i ponoviti postupak od početka.

 

 

                                                                                     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.      Korišćene komponente

 

 

komponenta

komada

opis

8086

1

Procesor

8284

1

Generator takta za procesor i periferije

74HC373

3

Adresni lečevi

8254

1

Brojač

 Tajmer 0 generiše prekid na svaku 1ms (radi u modu 2)

 Tajmer 1 generiše prekid na svakih 20ms (radi u modu 2)

 Tajmer 2 meri vreme u [ms] potrebno da traka pređe 10cm

               (radi u modu 0)

8255

1

Paralelni port za slanje spoljašnjih izlaznih signala

8259

1

Kontroler prekida prima sledeće zahteve za prekid

 IRQ0 - proizvod detektovan (spoljašnji ulazni signal)

 IRQ1 - prošla 1ms (izlaz Tajmera 0)

 IRQ2 - prošlo 20ms (izlaz Tajmera 1)

 IRQ3 - traka pomerena za 10cm (spoljašnji ulazni signal)

 IRQ4 - traka se zaustavila (izlaz Tajmera 2)

8279

1

Kontroler za tastaturu i displej

5x4 tastatura

1

Mehanička tastatura sa 4 reda i 5 kolona tastera

5c displej

1

Displej za prikaz pet osmosegmentnih znakova

MS6264

8

8K8 RAM kapaciteta 8KB

27C256

2

32K8 EPROM kapaciteta 32KB

MB7117E

1

Memorijski adresni PROM 256x8 kapaciteta 256B

MB7134E

1

Ulazno/izlazni adresni PROM 4K4 kapaciteta 2KB

Rxx

X

Otpornici

Cxx

X

Kondenzatori

 

          Svakoj periferiji je dodeljeno po 8 uzastopnih adresa u ulazno/izlaznom adresnom prostoru, počev od adrese 00000h:

8254:  00000:00007h

8255:  00008:0000Fh

8259:  00010:00017h

8279:  00018:0001Fh

 

          Memorijski adresni prostor je raspoređen na sledeći način:

RAM1: 00000:03FFFh

RAM2: 04000:07FFFh

RAM3: 08000:0BFFFh

RAM4: 0C000:0FFFFh

ROM:   F0000: FFFFFh

 

IVT:    00000:003FFh

STEK:    SP   :          0FFFFh

 Prog:  F0000:   ?

 

 

 

 

 

 

 

 

 

 

 

 

          Sadržaj adresnih PROMova je sledeći:

 

 

MB7117E

RD cmpl

M/IO

A19

A18

A17

A16

A15

A14

CSRAM1

CSRAM2

CSRAM3

CSRAM4

CSROM cmpl

 

 

 

A7

A6

A5

A4

A3

A2

A1

Ao

O0

O1

O2

O3

O4

O5

O6

O7

 

X

1

0

0

0

0

0

0

1

0

0

0

1

X

X

X

 

X

1

0

0

0

0

0

1

0

1

0

0

1

X

X

X

 

X

1

0

0

0

0

1

0

0

0

1

0

1

X

X

X

 

X

1

0

0

0

0

1

1

0

0

0

1

1

X

X

X

 

0

1

1

1

1

1

X

X

0

0

0

0

0

X

X

X

 

SVE OSTALO

0

0

0

0

1

X

X

X

 

 

 

MB7134E

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

CS54 cmpl

CS55 cmpl

CS59 cmpl

CS79 cmpl

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

Ao

O0

O1

O2

O3

 

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

 

0

0

0

0

0

0

0

0

0

0

0

1

1

0

1

1

 

0

0

0

0

0

0

0

0

0

0

1

0

1

1

0

1

 

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

0

 

SVE OSTALO

1

1

1

1

 

 

 

 

 

 

 

 

spoljni izgled tastature

 

 

 

 

 

 

 

 

 

 

 

 

 

2.      Dijagram toka procesa pakovanja

 

 

 

 

 

 

 

 

 

 

 

 

 

 


                                               

       Proizvod nailazi ?                       NE

 

            DA

        Pređeno 30cm ?                        NE

 

                                                         DA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 Broj preostalih mesta = 0 ?                        NE

 

                                                                        DA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.      Program

 

Boot    SEGMENT AT FFFF0h

JMP     FAR PTR Start

Boot    ENDS

 

 

Podaci            SEGMENT AT 0

IVT               DW     2*256 DUP (?)          ; inicijalizacija IVT-a

IVTPdetekt   EQU    (20h)*4         ; ulaz u IVT za prekidnu rutinu detekcija

          cifre             DB      5 dup (0)       ; kapacitet kutije u BCD formatu

          kapacitet       DW     0                  ; kapacitet kutije

          vreme30cm    DW     60000           ; vreme potrebno da traka pređe 30cm [ms]

          merenjeBrz     DB      0                  ; da li je počelo merenje brzine trake

          nailazak         DB      0                  ; da li je proizvod između detektora i pakera

          KRENI            EQU    00000001b     ; signal "Pokreni Traku"

          PAKUJ           EQU    00000010b     ; signal ”Pakuj Proizvod"

          MENJAJ         EQU    00000100b     ; signal "Menjaj Kutiju"

          NOS              EQU    00h              ; nijedan signal

PortA            EQU    08h              ; adresa porta A

VrhSteka       EQU    10000h          ; inicijalizacija SP-a

dec2sseg       DB      00111111b     ; Tabela za konverziju decimalne cifre

                   DB      00000110b     ; u kod za ispis na sedmosegmntnom

                   DB      01011011b     ; displeju sa zajedničkom katodom

                   DB      01001111b     ; po formatu DPgfedcba2

                   DB      01100110b

                   DB      01101101b

                   DB      01111101b

                   DB      00100111b

                   DB      01111111b

                   DB      01101111b

Podaci ENDS                   

 

 

Kod     SEGMENT AT F0000h

ASSUME CS:Kod, DS:Podaci, ES:Podaci, SS:Podaci

 

; Inicijalizacija segmentnih registara i SP

Start:  xor      AX, AX                                       ; AX = 0

mov    DS, AX                             ; inicijalizacija DS

mov    ES, AX                                       ; inicijalizacija ES

mov    SS, AX                             ; inicijalizacija SS

mov    SP, VrhSteka                     ; inicijalizacija SP

 

; Inicijalizacija ulaza u IVT za sve prekidne rutine

cli                                             ; nedozvoljavamo prekide

          cld                                            ; autoinkrement

          mov    DI, IVTPdetekt

mov    AX,offset detekcija   

stosw

mov    AX,seg detekcija        

stosw

 

mov    AX,offset vreme1ms

stosw

mov    AX,seg vreme1ms

stosw

  

mov    AX,offset vreme20ms

stosw

mov    AX,seg vreme20ms

stosw

 

mov    AX,offset traka10cm

stosw

mov    AX,seg traka10cm

stosw

 

mov    AX,offset trakastop

stosw

mov    AX,seg trakastop

stosw

 

 

; Inicijalizacija periferija

 

call     Init8259

call     Init8254

call     Init8255

call     Init8279

call     Unos                                ; unos kapaciteta kutije

 

mov    AL, KRENI                          ; signal za pokretanje trake

out     PortA, AL

xor      BX, BX                              ; BX (vremex20 [ms]) = 0

mov    AL, 11111011b                   ; dozvoljen samo IRQ2 (vreme20ms)

out     R59ICW2, AL

sti                                             ; dozvoli prekide

cekaj1:cmp    BX, 7                               ; vreme (±40ms) - 140 ms

jb       cekaj1                              ; ako je manje čekaj još

mov    AL, NOS                            ; prekini sve signale na portu A

out     portA, AL

 

mov    AL, 11110110b                   ; dozvoljeni prekidi od trake i detektora

out     R59ICW2, AL

          mov    DX, kapacitet                    ; broj preostalih slobodnih mesta u kutiji

 

cekaj3:cmp    nailazak, 1                        ; čeka se nailazak sledećeg proizvoda

          jne      cekaj3

cekaj4:cmp    CX, vreme30cm                  ; da li je traka prešla 30cm ?

          jb       cekaj4                              ; nije

          mov    nailazak, 0                        ; proizvod je prošao zonu nailaska, čeka se sled.

          xor      BX, BX                              ; BX (vremex20 [ms]) = 0

          mov    AL, 11110010b                   ; dozvoli prekid za detekciju sledećeg proizvoda,

          out     R59ICW2, AL                     ;  vreme20ms i pomeraj traje za 10cm

          mov    AL, PAKUJ                         ; signal za pakovanje proizvoda

          out     PortA, AL

cekaj5:cmp    BX, 7                               ; vreme (±40ms) - 140 ms

jb       cekaj5                              ; ako je manje čekaj još

mov    AL, NOS                            ; prekini sve signale na portu A

out     PortA, AL

dec     DX                                   ; broj preostalih slobodnih mesta u kutiji --

jnz      dalje1                               ;

mov    AL, MENJAJ                       ; ako je kutija puna menjaj je

out     PortA, AL

xor      BX, BX                              ; BX (vremex20 [ms]) = 0

cekaj6:cmp    BX, 7                               ; vreme (±40ms) - 140 ms

jb       cekaj6                              ; ako je manje čekaj još

mov    AL, NOS                            ; prekini sve signale na portu A

out     PortA, AL

mov    DX, kapacitet                    ; reset broja preostalih slobodnih mesta u kutiji

dalje1:in        AL, R59ICW2                     ; učitaj Interrupt Mask Register

or       AL, 00000100b                   ; maskiraj prekid vreme20ms

out     R59ICW2, AL

          jmp     cekaj3                              ; čekaj sledeći proizvod

 

 

; Inicijalizacija 8259

 

R59ICW1       EQU 10h                  ; adresa za ICW1, OCW2, OCW3

R59ICW2       EQU 12h                  ; adresa za ICW2, ICW4, OCW1

 

ICW1            EQU 00010011b        ; ivično okidanje, samo jedan 8259, ICW4 slati

ICW2            EQU 20h                 ; tipovi prekida su u opsegu 20 - 27 h

ICW4            EQU 00000011b        ; Auto End Of Interrupt, 8086 sistem

 

;        Procedura za inicijalizaciju kontrolera prekida 8259

; koristi:        sve gore navedene konstante

; menja:        AL

Init8259 PROC NEAR

mov    AL,ICW1

out     R59ICW1,AL

mov    AL,ICW2

out     R59ICW2,AL

mov    AL,ICW4

out     R59ICW2,AL

ret

Init8259 ENDP

 

; Inicijalizacija 8254

 

R54Ctrl          EQU 06h                  ; adresa za kontrolni registar

          R54T0           EQU 00h                  ; adresa za Timer0

         R54T1           EQU 02h                  ; adresa za Timer1

          R54T2           EQU 04                   ; adresa za Timer2

 

Ctrl54T0        EQU 00110100b        ; Timer0, LSB i MSB, Mod 2, Binarno

Ctrl54T1        EQU 01110100b        ; Timer1, LSB i MSB, Mod 2, Binarno

Ctrl54T2        EQU 10110000b        ; Timer2, LSB i MSB, Mod 0, Binarno

 

T0LSB           EQU 0C4h                ; 2.5MHz/2500 = 1kHz = 1/1ms

T0MSB          EQU 009h                ; 250010=09C416

T1LSB           EQU 050h                ; 2.5MHz/50 000 = 50Hz = 1/20ms

T1MSB          EQU 0C3h                ; 50 00010=C35016

T2LSB           EQU 020h                ; 20 00010=4E2016

T2MSB          EQU 04Eh

 

;        Procedura za inicijalizaciju kauntera 8254

; koristi:        sve gore navedene konstante

; menja:        AL

Init8254 PROC NEAR

mov    AL, Ctrl54T0                      ; Inicijalizacija Tajmera 0

out     R54Ctrl, AL                       

mov    AL, T0LSB

out     R54T0, AL

mov    AL, T0MSB

out     R54T0, AL

mov    AL,Ctrl54T1                       ; Inicijalizacija Tajmera 1

out     R54Ctrl,AL                        

mov    AL, T1LSB

out     R54T1, AL

mov    AL, T1MSB

out     R54T1, AL                        

mov    AL, Ctrl54T2                      ; Inicijalizacija Tajmera 2

out     R54Ctrl,AL                         ; vrednost se šalje u prek.rutini traka10cm

ret

Init8254 ENDP

 

; Inicijalizacija 8255

 

R55Ctrl          EQU 0Eh                  ; adresa za kontrolni registar

Ctrl55           EQU 10000000b        ; Mod 0, Izlaz

 

;        Procedura za inicijalizaciju paralelnog porta 8255

; koristi:        sve gore navedene konstante

; menja:        AL

 

Init8255 PROC near

mov    AL,Ctrl55

out     R55Ctrl,AL

ret

Init8255 ENDP

 

; Inicijalizacija 8279                       

 

R79CtrlStat    EQU 1Ah                  ; adresa za kontrolni i statusni registar

R79Data        EQU 18h                  ; adresa za data registre (displeja i tastature)

 

Ctrl79a          EQU 00010000b        ; 8 8b right entry display, encoded scan

                                                ; 2 key lockout keyboard

Ctrl79b          EQU 00111001          ; 2.5MHz/110012 (2510) = 100kHz

Ctrl79RdFifo   EQU 01000000          ; čitanje je iz fifo bafera tastature

Ctrl79WrDisp  EQU 10010000          ; upis je u displej, autoinkrement, od 0. pozicije

 

;        Procedura za inicijalizaciju kontrolera tastature i displeja 8279

; koristi:        sve gore navedene konstante

; menja:        AL

Init8279 PROC near

mov    AL, Ctrl79a

out     R79CtrlStat, AL

mov    AL, Ctrl79b

out     R79CtrlStat, AL

mov    AL, Ctrl79RdFifo

out     R79CtrlStat, AL

mov    AL, Ctrl79WrDisp

out     R79CtrlStat, AL

ret

Init8279 ENDP

 

;        Procedura za unos podataka sa tastature i ispis na displej

; ulaz:           tabela za konverziju cifara u sedmosegmentni kod na adresi dec2sseg

; koristi:        definisane konstante za kontroler 8279

; menja:        AX, BX, CX, SI, DI

; izlaz:          Uneti kapacitet kutije na adresi kapacitet

Unos   PROC near                                         ; Unos kapaciteta kutije

 

start1: mov    BX, offset dec2sseg            ; adresa tabele za konverziju cifara u 7segmentni

cekaj: in       AL,R79CtrlStat                   ; kod.

          and     AL,00000111b          ; da li je pritisnuto neko dugme?

          jz       cekaj                               ; nije

          in       AL,R79Data                       ; jeste => učitaj ga

          cmp   14h                                  ; da li je ENTER

          je       izlaz                                 ; jeste => kraj unosa

          cmp    AL,00h                             ; da li je 1

          mov    AH,1                                ; jeste => upisi 1 u AH

          je       input                                ; ...

cmp    AL,01h

          mov    AH,2

          je       input

          cmp    AL,02h

          mov    AH,3

          je       input

          cmp    AL,03h

          mov    AH,4

          je       input

          cmp    AL,04h

          mov    AH,5

          je       input

          cmp    AL,08h

          mov    AH,6

          je       input

          cmp    AL,09h

          mov    AH,7

          je       input

          cmp    AL,0Ah

          mov    AH,8

          je       input

          cmp    AL,0Bh

          mov    AH,9

          je       input

          cmp    AL,0Ch

          jne      citaj                                 ; nedozvoljeno dugme => ignoriši ga

          mov    AH, 0

input: mov    SI, offset cifre + 1              ; cifra posle najviše

          mov    DI, offset cifre                   ; najviša cifra

          mov    CX, 4                              

          rep     movsb                              ; šiftuj cifre u levo za jedno mesto

          mov    AL, AH

          stosb                                         ; ubaci učitanu cifru na najniže mesto

          xlat                                           ; konvertuj cifru u 7segm. kod i

          out     R79Data, AL                      ; ispiši to na displej

          jmp     citaj                                 ; čitaj dalje

izlaz:   mov    SI, offset cifre                   ; konverzija cifara u broj

          mov    BX, 10                              ; množilac

          mov    CX, 4                               ; broj cifara za množenje sa 10

mnozi:lodsb                                          ; sledeća (niža) cifra

          xor      AH, AH                    ;          u AX

          add     AX, kapacitet                    ; + prethodno sabrane

          mul     BX                                   ; * 10

          jc       start1                              ; ako je doslo do prekoračenja čitaj ponovo

          mov    kapacitet, AX

          loop    mnozi                               ; dalje

          lodsb                                         ; najniža cifra

          xor      AH, AH

          add     kapacitet, AX                    ; se samo sabira bez množenja

          jz       start1                              ; ako je rezultat 0

          jc       start1                              ; ili veci od 65535 ponovi učitavanje

          ret

Unos   ENDP

 

;        Prekidna rutina za prekid pri pomeraju trake za 10cm

; koristi:        indikator merenjeBrz , definisane konstante za 8254

; izlaz:          vreme potrebno traci da pređe 30cm - vreme30cm, indikator merenjeBrz

traka10cm     PROC FAR                              ; prekidna rutina za pomeraj trake od 10cm

          push   AX

          push   BX

          cmp    merenjeBrz, 0           ; da li je ovo prvo merenje brzine

          je       initT2                               ; jeste => inicijalizuj tajmer 2

          mov    AL, 10000000b                   ; Counter Latch Command za tajmer 2

          out     R54Ctrl, AL

          in       AL, R54T2                         ; pročitaj LSB

          mov    BL, AL

          in       AL, R54T2                         ; pročitaj MSB

          mov    BH, AL

          mov    AX, 20000                         ; 20 000 - count =

          sub     AX, BX                             ; koliko je ms prošlo za pređenih 10cm

          mov    BX, 3

          mul     BX                                   ; vreme potrebno za prelazak 30cm

          mov    vreme30cm, AX

initT2: mov    AL, T2LSB                         ; resetuj brojač tajmera 2

          out     R54T2, AL

          mov    AL, T2MSB

          out     R54T2, AL

          mov    merenjeBrz, 1           ; označi da je merenje brzine počelo

          pop     BX

          pop     AX

iret

traka10cm     ENDP

 

;        Prekidna rutina za prekid pri detekciji novo proizvoda

; ulaz:           IMR

; izlaz:          CX=0, indikator nailazak=1, IMR

detekcija       PROC FAR

          push   AX

          xor      CX, CX                             ; vreme [ms] = 0

in       AL, R59ICW2                     ; učitaj Interrupt Mask Register

or       AL, 00000001b                   ; maskiraj prekid za detekciju proizvoda (sebe)

and     AL, 11111101                    ; demaskiraj prekid vreme1ms

          out     R59ICW2, AL

          mov    nailazak, 1

          pop     AX

          iret

detekcija       ENDP

 

;        Prekidna rutina za prekid posle svake protekle milisekunde

; izlaz:          inkrementiran brojač milisekundi <-> CX

vreme1ms     PROC FAR

          inc      CX                                   ; vreme [ms] ++

          iret

vreme1ms      ENDP

 

;        Prekidna rutina za prekid posle svakih 20 proteklih milisekundi

; izlaz:          inkrementiran brojač x20 milisekundi <-> BX

vreme20ms  PROC FAR

          inc      BX                                   ; vremex20 [ms] ++

          iret

vreme20ms    ENDP

 

;        Prekidna rutina za prekid zbog nedozvoljeno spore brzine trake

;menja:         AL

trakastop       PROC FAR                              ; traka se zaustavila =>

          mov    AL, 01010000b                   ; prvo se ispisuje poruka na displej

          out     R79Data, AL                      ; slovo r

          mov    AL, 01111011b                   ; slovo e

          out     R79Data, AL                      ;

          mov    AL, 01101101b                   ; slovo s

          out     R79Data, AL                      ;

          mov    AL, 01111011b                   ; slovo e

          out     R79Data, AL                      ;

          mov    AL, 01111000b                   ; slovo t

          out     R79Data, AL                      ;

          halt                                           ; blokiraj procesor

          iret

trakastop       ENDP

Kod ENDS

 

END Start

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


3.      Električna šema