Technika mikroprocesorowa
Wprawdzie struktura programu jest nieprzekraczalna, ale nie wszystkie wymienione elementy musza wystąpić w każdym programie. Poniżej przedstawiono przykład prostego programu:
— Wczytanie biblioteki mikrokontrolera .include "8515def.inc"
— Dyrektywa kompilatora wskazująca, ze poniższy fragment programu zawiera kod źródłowy
cseg
— Adres w pamięci Flash rozpoczęcia programu .org $0000
— Skok bezwarunkowy do etykiety reset rjmp reset
— Przed etykieta reset można umiescic adresy obsługi przerwań lub dane, które zostana zapisane w kodzie programu
reset:
— Zestaw rozkazów inicjalizujący stos na adresie $025F Idi rló, high(ramend)
out sph, rló
ldi rló, lcw(ramend)
out spl, rló
—- W tym miejscu przeważnie umieszcza sie pętla zerującą zawartość pamięci RAM (chwilowo pomijamy)
— Dalsze rozkazy programu (wśród których można umiescic wywołanie podprogramu rcall podprogram 1
— Zakończenie programu głównego np. skokiem w miejscu (na etykiete koniec) Koniec:
rjmp koniec
— Poniżej programu głównego umieszczamy podprogramy (powrót rozkazem ret) podprogram 1:
— 4 instrukcje puste nop
nop
nop
nop
ret
Niezbędnym elementem każdego programu jest zespól rozkazów (umieszczanych na początku kou źródłowego) inicjujących stos.
Stos jest obszarem wydzielanym w pamięci danych SRAM, teoretycznie jego wielkość jest ograniczona jedynie przez rozmiar tej pamięci. Po resecie mikrokontrolera stos jest inicjowany na początku pamięci RAM i pozostawienie go w tym miejscu związane jest z dużym ryzykiem nadpisania, dlatego niezbedne jest przeniesienie stosu w inny obszar RAMu (typowo na koniec) pierwszym zespołem rozkazów po resecie mikrokontrolera.
Wskaźnik stosu powinien zostać ustawiany na najwyższym adresie wewnętrznej pamięci SRAM znanym procesorowi pod zdefiniowana nazwa ramendczyli „end of RAM” (mikrokontrolerze AT90S8515 jest to adres $025F). Stos jest budowany od końca RAM-u wstecz. Po programowym zlozeniu na stosie jednego bajtu (rozkazem push) wskaźnik stosu
10