







 | |
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
!!!
|