Programiranje

Home
MC 6803
Predstavitev Čipa
Predstavitev Registrov
Diagram Poteka
Navodila Za Uporabo
Delovanje
Download
Programiranje

 

PROGRAMIRANJE

Za programiranje mora programer poznati naslednje stvari:

programski model CPE
programski model pomnilnika in V/I enot
ukaze zbirnega jezika, načine naslavljanja in reakcijo CPE na prekinitvene signale ter reset signal

PROGRAMSKI MODEL MC 6803

Programski model predstavljajo notranje programsko dostopni registri.  Med te registre spadajo: PC - Program Counter (sl. programski števec), registra A, B (op. A+B=D), X register (sl. indeksni register), SP - Stack Pointer (skladovni kazalec), CCR - Condition Code Register (register stanj).

registra A in B uporabljamo za shranjevanje operandov ter rezultatov predhodno izvedenih operacij. Združena skupaj pa predstavljata register D, ki je 16-bitni. Zgornjih 8 bitov pripada registru A, spodnjih 8 pa B
PC - Program Counter: je 16- bitni register, ki vedno kaže na lokacijo, iz katere bo CPE prevzela naslednji ukaz. Njegova vsebina se spreminja avtomatsko  (ukazi se prevzemajo avtomatsko) vendar jo lahko programer spremeni pri t.i. programskih skokih.
registra A,B: sta 8-bitna registra v katere se shranjujejo operandi ter rezultati operacij. Združena skupaj predstavljata 16-bitni register D (register A vsebuje zgornjih 8 bitov, register D pa spodnjih 8 bitov registra D)
SP-Stack Pointer: SP je 16 bitni register vsebuje naslov naslednje proste lokacije sklada.
CCR-Condition Code Register: je 8 bitni register, vendar pa je aktivnih le 6 od teh. CCR hrani podatke o rezultatu predhodno izvršenega ukaza.

PROGRAMSKI MODEL POMNILNIKA V/I ENOT

MC 6803 vsebuje 128 zlogov notranjega RAM-a, zaseda pomnilniške lokacije z naslovi $0080 do $00FF. Registri V/I enot pa zasedajo lokacije z naslovi $0000 do $001F

Za delovanje sistema pa je treba dodati vsaj še zunanji bralni pomnilnik (npr. EPROM), na katerem je shranjen program, po katerem mikrokontroler deluje.

 OBLIKE UKAZOV IN NAČINI NASLAVLJANJA

Vsak ukaz računalnika mora vsebovati poleg informacije o operaciji tudi informacijo o operand (oz. operandih). Pri MC 6803 imamo po dolžini različne ukaze: 1-zložne, 2-zložne, 3-zložne.

Informacijo o operandih lahko navedemo v več načinih, kar imenujemo različni načini naslavljanja. Pri 8 bitni operacijski kodi je največ možnih 256 različnih ukazov.

MC 6803 pozna:

6 načinov naslavljanja
82 različnih operacij
220 ukazov (možnih je 256 ukazov, vendar jih je od tega 34 nedefiniranih, 2 pa uporablja proizvajalec v testne                namene.

Načini naslavljanja 

Vsebovano naslavljanje (inherent addressing): operandi so shranjeni v notranjih registrih CPE ali na skladu; ukazi so enobesedni

Sprotno naslavljanje (immediate addressing): operacijski kodi sledi podatek ( npr.: LDAA #%00001111); ukazi so lahko dvo-besedni oz. tro-besedni (odvisno od registra, ki ga naslavljamo)

Neposredno razširjeno naslavljanje (Extended addressing): operacijski kodi sledi operand, ki je v tem primeru naslov ukaza (npr.: LDAA $3000) (naslov je 16 bitni); ukazi so tro-zložni

Neposredno direktno naslavljanje (Direct addressing): od razširjenega naslavljanja se razlikuje po tem, da lahko naslavlja samo lokacije od $00 do $FF; ukazi se hitreje izvajajo in v pomnilniku zavzemajo eno lokacijo manj)

Indeksno naslavljanje (Index addressing): je v tesni povezavi z indeksnim registrom; naslov operand mora CPE izračunati in to tako, da vsebini X registra prišteje vsebino lokacije, ki sledi operacijski kodi (npr.: LDAA 0,x); op. največji možni odmik je za 255 (bitov)

Relativno naslavljanje (Relative addressing): vsi ukazi, ki uporabljajo relativno naslavljanje spremenijo vsebino PC, kar pa pomeni programski skok; ukazi so vedno dvo-zložni; zlog, ki sledi operacijski kodi določa, za oliko se bo PC spremenil (npr.BCS 32)

Ukazi, ki jih MC 6803 pozna

MC 6803 pozna 220 ukazov (možnih je 256 ukazov, vendar jih je 34 nedefiniranih, 2 ukaza pa uporablja proizvajalec za testiranje), katere razvrstimo v 11 skupin.

Te skupine ukazov so: 

ukazi za prenos podatkov (npr.: LDAA , STAA, PSHA, TAB, TSX, TAP)
aritmetične operacije (npr.: ABA, ADCA, SBA, NEG, NOP, DAA, CLRA) 
logične operacije (npr.: ANDA, COMA, EORA, ORAA)
ukazi za pomike in rotacije (npr.:ASLA, ASRA, LSLA, LSRA, ROLA)
operacije primerjanja in testiranja (npr.: CBA; CMPA; TSTA; BITA)
ukazi za delo s skladom (npr.: LDS; STS; INS; DES; TSX; TXS; PSHA)
ukazi, ki vplivajo na indeksni register (npr.: CPX; DEX; LDX; ABX)
vejitveni ukazi (npr.: BRA; BRN; BCS; BLE; BPL; BGE; BRN)
skočni ukazi in ukazi za klice podprogramov (npr.: JMP; BSR; JSR)
ukazi, ki so povezani s prekinitvami (npr.: CLI; SEI; SWI; RTI; WAI)
ukazi, ki vplivajo na register CCR (npr.: CLC; CLI;CLV; SEC; SEI; SEV)

Oblike podatkov pri MC 6803:

Ukazi mikrokontrolerja MC uporabljajo 8- in 16- bitne podatke (operande). 16 bitni podatek zaseda dve zaporedni lokaciji. Zgornjih osem bitov je vedno na nižjem naslovu, spodnjih osem bitov pa na višjem naslovu.

 Zbirni jezik MC 6803

Zbirni jezik mikrokontrolerja je močno povezan z njegovo notranjo zgradbo.

Zapis v zbirnem jeziku je odvisen tudi od zbirnika, ki ga uporabljamo. Na tržišču obstaja veliko zbirnikov za Motorolino družino MC 6801, ki se med seboj delno razlikujejo. Do teh razlik pride pri vejitvenih psevdoukazih, makro ukazih, uporab oznak, ...

Zbirni jezik je sestavljen iz osnovnih enot - vrstic, se pravi, da je vrstično usmerjen. Vrstice delimo na 4 polja. Vsako polje ima točno določen pomen in so med seboj ločena z ločilnimi znaki.

Pri pisanju programov v zbirniku uporabljamo naslednje ukaze, ki imajo poseben pomen:

# - označuje takojšnji način naslavljanja
$ - označuje šestnajstiško vrednost
% - označuje binarno vrednost
* - označuje začetek opomb, komentarja

Delitev vrstic:

Polje 1 oz. polje oznake: oznaka (angl. label) je simbolično ime, sestavljeno iz črk in številk. Dolžina oznake je omejena na 6 znakov. Oznaka se mora obvezno začeti na prvem mestu v prvem stolpcu. Polje oznake je v večini primerov prazno, saj uporabljamo oznake samo, kadar je potrebno.
Polje 2 oz. polje operaterja: v tem polju se nahaja zapomnljivka (angl. mnemonik), ki določa operacijo. V tem polju se lahko nahajajo tudi posebni ukazi t.i. psevdo ukazi:      ORG (ta ukaz pove zbirniku naslov, na katerem bo v pomnilniku mikrokontrolerja naslednji prevedeni ukaz zbirnega programa), EQU ( priredi oznaki določeno vrednost, določi konstanto), FCB (ukaz FCB $nn  v prevedenem strojnem programu doda dva zloga z vsebino $nn), FDB (ukaz FDB $nnnn v prevedenem strojnem programu doda dva zoga z vsebino $nnnn), FCC (ta ukaz uporabljamo, ko želimo v program dodati nek tekst), END (stoji vedno na koncu zbirniškega ukaza), RBM (ukz RMB nn rezervira nn pomnilniških lokacij. Ta ukaz je smiselno uporabljati samo takrat, ko bo prevedeni strojni program naložen v RAM pomnilniku mikrokontrolerja in bo CPE lahko spremenila vsebino rezerviranih lokacij)
Polje 3 oz. polje operanda: v tem polju je naveden parameter posebnega ukaza ali pa določilo operanda, ki pa ga napiše programer glede na način naslavljanja)
Polje 4 oz. polje komentarja, opomb: to polje se začne s zvezdico (*) in je namenjeno pojasnilom, opombam. To polje ni obvezno in ga tudi ne uporabljamo v vsaki vrstici.

 

Prevajanje

Sestavljanje ukazov v celoto imenujemo programiranje. Ukazi, ki pa so dani v delujočo, smiselno celoto (zato, ker delovanje CPE temelji na ukazih, katere je vpisal programer) imenujemo program.

STROJNI JEZIK + šestnajstiški zapis

Zapis, na katerem temelji delovanje CPE imenujemo strojni koda ( strojni jezik je naveden v binarni obliki npr.: 10101000). CPE lahko direktno izvajaj ukaze, ki so podani v strojni kodi, zato pravimo, da je strojni jezik edini jezik, ki ga CPE razume in e množica ukazov dane CPE, zapisanih v binarni obliki. Za lažje programiranje pa programer piše v šestnajstiškem zapsi, saj je lažje razumljiv in bolj pregleden.

ZBIRNI JEZIK

Vsak ukaz je zakodiran s t.i. zapomnljivko im mnemonikom, katerega je definiral proizvajalec. Zaporedje ukazov, ki je zapisano v oblik mnemonkov imenujemo zbirniški program ali program zapisan v zbirnem jeziku.

Vsakemu mnemonik pripada točno določen binarni zapis, ki ga najdemo v prilogah proizvjalca. Prevajanje iz zbirnega jezika v strojni jezik izvede zbirnik ali asembler.

Poseben pomen imajo prečni zbirniki, ki prevedejo zbirni program nekega mikroprocesorja v njegovo strojno kodo, pri tem pa ne gre za mikroprocesor, ki je v tem računalniku uporabljen.

Opomba: prevajanje v razmerju 1:1.

VIŠJI PROGRAMSKI JEZIK

Zahtevnejše aplikacije (glede na matematične funkcije) lahko pišemo tudi v višjih programskih jezikih. Njegovo vsebino pa v strojno kodo prevede prečni kompilator (komnpilator), vendar tukaj ne gre več za prevajanje v razmerju 1:1.

To programiranje ima dobre in slabe lastnosti: težje programe lahko sicer zapišemo dosti lažje, vendar zaradi tega, ker prevajanje ni v razmrju 1:1 zavzame tak program (alikacija) tudi več pomnilniškega prostora in procesorjevega časa.

ORODJA ZA RAZVOJ PROGRAMSKE OPREME

Poznamo več načinov za razvijanje programske opreme, ki nam preprečijo, da bi uničevali pomnilniške enote vsakič, ko bi se zmotili. V ta namen imamo:

EPROM emulator

simulacijske programe

razvojne sisteme

Končni cil vseh teh naprav je, da bi uspešno simulirale pomnilnike in tudi celotne mikrokontrolerje (velja za ravojne sisteme).

 

PODPROGRAMI

Podprogram, je program, ki je shranjen v nekem programu in nam olajša delo, saj nam ni treba pisati vedno znova določen skupek operacij (program), ampak iz mesta v glavnem programu napišemo ukaz, ki začne izvajati želeni podprogram.

Do klica podprograma pri MC 6803 pride z ukazom JSR (Jump to SubRoutine) oz. BSR (Branch to SubRoutine) do vrnitve v glavni program pa pride z ukazom RTS (Return from Subroutine).

Drugi ukaz, ki kliče podproram uporablja relativno naslavljanje, kar pomeni, da lahko kliče podprogram, ki so v njegovi bližni (-125 do +129).

Ob klicu podprograma se vedno shrani vsebina PC na sklad, nato pa se v PC vpiše naslov prvega ukaza podprograma. PC shranimo na sklad zato, da lahko končanem podprogramu začnemo izvajati glavni program na mestu, kjer se je le-ta nehal izvajati. Podprogram se vedno konča z ukazom RTS, ki s sklada prebere naslov naslednjega ukaza, ki se mora izvajati in ga prepiše v PC.

Opomba: podprograme spoznamo le po končnici RTS !!!

 

 
Hosted by www.Geocities.ws

1