BI-SAP.21 Struktura a architektura počítačů
Jdi na navigaci předmětu

Práce s displejem

Pro práci s displejem přípravku je potřeba importovat soubor s podprogramy, které práci zjednodušují (printlib.inc).

Stáhněte si .inc soubor a nakopírujte do adresáře projektu (není potřeba nijak dál importovat do projektu). Blok kódu zobrazený níže zkopírujte do hlavního zdrojového souboru projektu.

Varování:

Simulátor displeje nepodporuje Reset simulace - může dojít k tomu, že se přestanou vypisovat jakékoli znaky. V takovém případě simulaci ukončete a znovu spusťte.

Varování:

Simulátor displeje je připraven pouze pro zobrazování znaků z běžné ASCII sady na pozicích prvního a druhého řádku displeje. Zápis znaku mimo rozsah displeje (zejména záporné pozice) a/nebo mimo běžnou ASCII sadu (znaky 0x80 a výše) mohou způsobit rozdílné chování simulátoru a displeje na vývojovém kitu (na vývojovém kitu se vypíše znak na pozici, na které ho neočekáváte) a/nebo pád simulátoru (zaseknutí simulace uprostřed podprogramu show_char a vypsání výjimky do karty OutputSimulator).

Rozdílné chování je také se znaky 0-15, na simulátoru se nezobrazí nic, ale na vývojovém kitu se zobrazí znaky, které jsou nahrány přímo v paměti displeje.

; podprogramy pro praci s displejem
.org 0x1000 ; 1
.include "printlib.inc"

; Zacatek programu - po resetu
.org 0 ; 2
    jmp start

; Zacatek programu - hlavni program
.org 0x100 ; 3
start:
    ; Inicializace displeje 4
    call init_disp

    ; *** ZDE muzeme psat nase instrukce 5
    ldi r16, '0'    ; znak 6
    ldi r17, 0      ; pozice (0x00-0x0f - prvni radek; 0x40-0x4f - druhy radek)
    call show_char  ; zobraz znak z r16 na pozici z r17

end: jmp end        ; Zastavime program - nekonecna smycka 7
  1. .org cislo je tzv. direktiva pro překladač. Je to pokyn, aby následující kód ukládal do paměti od adresy cislo. Podprogramy pro práci se tak uloží tak daleko do paměti, abychom na ně při běžné práci nenarazili.
  2. Zpracování kódu po resetu zařízení začíná vždy na adrese 0, za kterou ale následuje oblast paměti, kde mohou být návratové adresy přerušení (v této ukázce přerušení nepoužíváme, ale jedná o jednu ze základních programovacích technik a proto je dobré na něj pamatovat již od začátku). Z tohoto důvodu se prvních 256 bajtů paměti přeskakuje.
  3. Tady je teprve faktický začátek kódu.
  4. Zavolá se inicializace displeje (důležité – jinak se na přípravku displej neaktivuje).
  5. Tady si můžeme napsat vlastní kód. V kódu je ukázka, jak se zapisuje znak na displej. Princip je podobný následujícímu volání z C show_char(r16, r17). V r16 je vždy znak v ASCII, v r17 pozice (vývojový kit má displej se dvěma řádky s pozicemi 0-15 (0x00-0x0f) pro první řádek a 64-79 (0x40-0x4f) pro druhý). V show_char se vytvoří kopie hodnot – nemusíte se tedy bát r16 a r17 přepsat. show_char bere jako parametry pouze tyto dva registry, nelze mu poslat parametry z jiných.
  6. Displej je schopen zobrazit malá, velká písmena, čísla a některé speciální znaky. Kompletní tabulka podporovaných znaků je k dispozici zde (zdroj). Nejjednodušší zadání znaku je přímo pomocí znaku v apostrofech, ale lze jej zadat i číselně.
  7. Konec programu (také důležité – jinak program běží dál a během chvíle potká kód importovaný z printlib.inc u poznámky <1>).