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