Fakulteta za elektrotehniko
Univerza v Ljubljani
MIKROPROCESORJI V ELEKTRONIKI


   
by
Robert Bezjak
Robert Kern
 Jernej Andrejaš








Semaforizirano križišče

V okviru seminarske naloge je bilo potrebno načrtovati rešitev za upravljanje semaforiziranega križišča. Križišče samo je simulirano z modelom, ki ga preko paralelnega vmesnika krmili mikroprocesor Motorola 6803. Poleg LED diodic, ki simulirajo semaforje, model vsebuje tudi piezo piskač, s katerimi lahko simuliramo zvočne signale za slepe. Križišče deluje avtomatsko, za kar skrbi program v mikroprocesorju. Zagon in spremembo režima delovanja (utripajoče rumene luči), upravljamo z računalniške tipkovnice preko serijskega vmesnika. Model semaforiziranega križišča, mikroprocesorski sistem s procesorjem 6803, in vse povezave so že na voljo, zato je potrebno napisati le še ustrezen program, ki bo vse to krmilil. Program sestoji iz treh delov, kateri vsak deluje kot posebna rutina znotraj mini operacijskega sistema, ki skrbi za delovanje celotnega mikroprocesorskega sistema.Le ti deli oz. rutine so:

 


1.Upravljanje semaforiziranega križišča z računalniške tipkovnice

Križišče običajno deluje avtomatsko. Preko računalniške tipkovnice lahko križišče zgolj vkljapljamo in mu spreminjamo režim delovanja. Zato so na tipkovnici uporabljene le tri tipke s,z in k. Križišče tudi ne krmilimo neposredno s tipkovnice, saj bi na ta način lahko prišlo do napak v delovanju programa, ki skrbi za avtomatično delovanje križišča. Z ukazi, ki jih pošljemo s tipkovnice krmilimo posebno spremenljivko, ki jo uporabljata drugi dve rutini, ki skrbita za samo delovanje križišča. Sama komunikacija med računalnikom in mikroprocesorskim sistemom poteka preko serijskega komunikacijskega vmesnika (SCI).

 

1.1.Serijski komunikacijski vmesnik (SCI)

Mikroprocesorski sistem RT68-02 ,ki ga uporabljamo za krmiljenje križišča že vsebuje asinhroni serijski komunikacijski vmesnik, ki je pravzaprav že del mikrokrmilnika. Za komunikacijo se uporablja kom. standard RS232. Računalnik je z mikroprocesorskim sistemom povezan preko serijskih vrat. Da bi povezava delovala, je bistveno da obe strani uporabljata isti način in hitrost delovanja ( frekvenca, pariteta, št.bitov, stop bit,..). Na sistemu so te vrednosti že nastavljene. Iste vrednosti moramo nastaviti še na računalniku, kar lahko vpišemo kar v autoexec.bat. Ko zatem zaženemo terminalski program KERMIT, se bodo vrednosti ki jih vtipkamo na rač. tipkovnici avtomatično prenesle tudi v mikroprocesorski sistem. Povezava deluje tudi v drugi smeri , vendar je mi ne potrebujemo. Vrednosti, ki pridejo z računalniške strani se shranijo v sprejemni register _RDR, od koder jih moramo redno brati. Dokler je v registru neprebrana vrednost, se nove vrednosti, ki prihajajo z računalnika ne shranjujejo, kar pomeni, da če ne želimo da bi kakšen ukaz izpustili, moramo brati iz registra dovolj pogosto. Da bi shranili vse vrednosti uporabimo še vmesni medpomnilnik RECB-RECE, kamor jih shranjujemo.Glede na to, da beremo s tipkovnice, ki je relativno počasna je medpomnilnik za osem vrednost več kot dovolj. Krmilni register preko katerega ugotavljamo ali je že prišel nov podatek in ali je pravilen se imenuje _TRCSR. Ta je osembitni, pri čemer spodnjih pet bitov krmili prekinitve in delovanje ser. komunikacije, zgornji trije pa podajajo informacijo o podatku. Bit z najvišjo prioriteto RDRF, pove ali je sprejemni register poln. Resetira se z branjem vrednosti v sprejemnem registru. Naslednji bit ORFE pove ali je prišlo do napake in podatek ni pravilen. Prav tako ga resetiramo z branjem podatka ne glede na to ali je podatek pravilen ali ne.Tretji bit pove ali je oddajni register prazen vendar ga mi za našo nalogo ne potrebujemo.

 

1.2.Program

Rutina, ki skrbi za serijsko komunikacijo je uvrščena kot eno opravilo v urnik in se na ta način izvede 64 krat v sekundi, kar je dovolj, da prestreže vse podatke s tipkovnice. Rutina najprej preveri ali je prišel nov podatek in ga prebere. Nato preveri ali podatek pravilen. Če podatka ni ali ni pravilen naslednje vrstice preskoči, sicer nadaljuje z vpisom. Predhodno se podatki še filtrirajo tako da se v medpomnilnik zapišejo le regularni znaki.

;prvi del komunicira s SCI preko TRCSR in RDR registoma,in izloči nedovoljene znake
     ldaa  _TRCSR   ;nalozi SCI kontrolni register
     bpl   BERI     ;preveri ali je prisel svez podatek,ce ga ni, konca
     ldab  _RDR     ;sicer naloži podatek iz sprejemnega podatkovnega registra
     rola
     bmi   BERI     ;preveri ali je podatek pravilen, sicer konca
     cmpb  #$6B     ;ali je znak k (ASCII 107)
     beq   VPIS
     cmpb  #$73     ;ali je podatek s (ASCII 115)
     beq   VPIS
     cmpb  #$7A     ;ali je podatek z (ASCII 122) 
     beq   VPIS
     jmp   BERI 

 

Podatek se zatem zapiše v medpomnilnik. Hkrati je potrebno preveriti ali je medpomnilnik poln, ter pravilno nastaviti kazalce. Kazalec RECE kaže na začetek praznega dela medpomnilnika, RECB pa na začetek polnega dela.

;rutina VPIS vpisuje v medpomnilnik ( 8 znakov )

VPIS   ldx   RECE     ;naloži kazalec na začetek praznega dela medpomnilnika
       stab  0,X      ;shrani v akumulator b
       inx 
       cpx   #RECE    ;primerja s fizičnim koncem medpomnilnika
       bne   REC1     ;če nista enaka preskoči vrstico
       ldx   #RECB+2  ;sicer začne zopet na fizičnem začetku medpomnilnika 
REC1   cpx   RECB     ;primerja oba kazalca
       beq   BERI     ;ce sta enaka je medpomnilnik poln in konca
       stx   RECE     ;sicer shrani novo vrednost kazalca

 

Vsakič, ne glede na to ali je prišel nov podatek ali ne,se preveri ali je v medpomnilniku že kakšen podatek. Glede na podatek se nastavi spremenljivka KRIZ, ki krmili krizišče.

BERI   ldx   RECB     ;nalozi kazalec na zacetek polnega dela medpomnilnika
       cpx   RECE     ;primerja s kazalcem na zacetek praznega dela medpomn.
       beq   KONC     ;ce sta enaka je medpomnilnik poln in konca
       ldaa  0,x      ;sicer nalozi podatek
       inx            ;poveca vrednost kazalca
       cpx   #RECE    ;primerja s fizicnim koncem medpomnilnika
       bne   NAST     ;če nista enaka preskoci vrstico
       ldx   #RECB+2  ;sicer začne zopet na fizičnem začetku medpmnilnika 
NAST   stx   RECB     ;shrani novo vrednost kazalca
       cmpa  #$73     ;ali je podatek s (ASCII 115)
       beq   START
       cmpa  #$7A     ;ali je podatek z (ASCII 122) 
       beq   YEL
       cmpa  #$6B     ;ali je znak k (ASCII 107)
       beq   ENDYEL 

 

Znak s pomeni začetek delovanja križišča.Bit z najnižjo prioriteto določa ali križišče deluje ali ne.

START  ldaa  #$01     ;v spremenljivko KRIZ shrani vrednost 1
       staa  KRIZ
       jmp   KONC

 

Znak z pomeni začetek režima utripajočih rumenih luči. Režim določa drugi bit z najnižjo prioriteto. Znak k pomeni konec režima utripajočih rumenih luči.

YEL    ldaa  KRIZ     ;drugi bit v spremenljivki KRIZ setira
       oraa  #%00000010
       staa  KRIZ
       jmp   KONC
ENDYEL ldaa  KRIZ     ;drugi bit v spremenljivki KRIZ resetira
       anda  #%00000001
       staa  KRIZ
KONC   rts

 

Nazaj

     


 

Robert Bezjak
robert.bezjak@kiss.uni-lj.si
12.2.1998