;*******************************************************************************;*Dekodovani;*******************************************************************************;Algorytmus pro dekodovaci proces. Vstupni parametr je Pismeno a tabulka sloupecku.;Kazdé písmeno je kodovavano jako 3 dvojce sloupeèkù. Ka¾dá dvojce je kodovana 4 bitami.;První a druhá dvojce je je ulo¾ena v jednom bajtu, posunutém od 00h o hodnotu písmene;poslední dvojce je ulo¾ená v bajtu zaèínajícím od 20h, sudá písmena v dolních itech, lichá v horních;;*******************************************************************************; dodelat: adresy písmen nemohou být od 00h;*******************************************************************************;*Deklarace HW promìnných;************************f0 equ 0x00 ;registr neprimeho adresovanipcl equ 0x02status equ 0x03fsr equ 0x04 ;registr adresy neprimeho adresovaniw equ 0 ; Výsledek ince jde do rW, registr f nezmìnìn.f equ 1 ; Výsledek ince jde do registru f, rW nezmìnìn.;*Deklarace systémových promìnných;*********************************RamZ equ 30h ;Zacatek pro pgmove promenneRamK equ 4Fh ;Zacatek pro systemove promenne (roste nahoru);Pamì» pro stavový vektorpismeno equ RamZ ;aktualni pismeno k nactenibuffer equ RamZ+1 ;zacatek vykreslovaciho bufferusloupek1 equ RamK-1 ;jeden sloupecek z navratusloupek2 equ RamK-1 ;druhy sloupecek z navratuuBuffer equ RamK-4 ;ukazatel na pozici v bufferudekbajt equ RamK-5 ;bajt, který je práve dekodovanzalohaFsr equ RamK-6 ;zaloha fsr v podprogramech;*******************************************************************************;*MAKRA;*******************************************************************************MBank0 macrobcf status,5 ; makro pro bank0endmMBank1 macrobsf status,5 ; makro pro bank1endm;*******************************************************************************;*KONFIGURACE A PREKLAD;*******************************************************************************list p = 16F84__config 0x3FF1 ;nastaveni konfigurace;*******************************************************************************;ZACATEK PROGRAMU;*******************************************************************************org 0x0000 ;adresa zacatku programugoto ZInit ;skoci na zacatek hlavniho programu;*******************************************************************************;*INICIALIZACE;*******************************************************************************ZInit nop;*******************************************************************************;*ZAKLADNI CYKL - OBSLUHY PROCESù;*******************************************************************************Main: nopmovlw B'00000001'call pDekodujStuj: nopgoto StujpDekoduj:clrf uBuffer ;vynulovani ukazatele bufferumovf pismeno, w ;ziskani adresy pismenemovwf fsrmovf f0,wmovwf dekbajt ;ulozeni prave dekodovaneho bajtu do promennecall pPriprav ; vymaskuje bity a vynasobi 4macall tTabulka1; ; dekoduje první 2 sloupkycall pUloz ;ulozi vystup z tabulky na prislusna mista v bufferuswapf f0,wmovwf dekbajt ;ulozeni horni casti dekodovaneho bajtu do promenecall pPriprav ; vymaskuje bity a vynasobi 4macall tTabulka2; ; dekoduje druhé 2 sloupkycall pUlozrlw fsr,f ;sloupecky 5+6 jsou ulozeny na bajtech o 20h posunutých, a na jendom bajtu jsou v¾dy 2 kodymovlw 0x20addwf fsr,fmovf f0,wmovwf dekbajt ;ulozeni prave dekodovaneho bajtu do promennebtfsc pismeno,0 ; licha pismena jsou ulozena v horních 4 bitechswapf dekbajtcall pPriprav ; vymaskuje bity a vynasobi 4macall tTabulka3; ; dekoduje poslední 2 sloupkycall pUlozreturnpUloz: movwf sloupek2 ;ulozime druhy sloupek z W do promennemovf fsr,w ;uschovame FSRmovwf zalohaFsrmovlw buffer ;nastaveni fsr na pozici v bufferuaddwf uBuffer, wmovwf fsrmovf sloupek1,w ;ulozeni prvnoho sloupeckumovwf f0incf fsr, f ;posun ukazatelemovf sloupek2,w ;ulozeni druheho sloupeckumovwf f0incf fsr,w ;ulozeni ukazatele, tak aby ukazaoval na dasli polozkumovwf uBuffermovf zalohaFsr,w ;obnovicme stare fsrmovwf fsrreturnpPriprav: movlw B'00001111' ;zajimaji nas jenom prvni 4 bityandwf dekbajt,frlw dekbajt,f ;vynásobíme zádost 4, takze skok bude po 4 instrukcíhrlw dekbajt,wreturntTabulka1: addwf pcl,f ;pricte W k citaci instrukcimovlw B'00000000' ;prvni kombinacemovwf sloupek1 ;ulozi prvni sloupecek do promeneretlw B'11000000' ; ulozi druhy sloupecek do Wnopmovlw B'00000000' ;pruha kombinacemovwf sloupek1 ;ulozi prvni sloupecek do promeneretlw B'11000000' ; ulozi druhy sloupecek do Wnopmovlw B'00000000' ;treti kombinace...movwf sloupek1 ;ulozi prvni sloupecek do promeneretlw B'11000000' ; ulozi druhy sloupecek do WtTabulka2: addwf pcl,f ;pricte W k citaci instrukcimovlw B'00000000' ;prvni kombinacemovwf sloupek1 ;ulozi prvni sloupecek do promeneretlw B'11000000' ; ulozi druhy sloupecek do Wnopmovlw B'00000000' ;pruha kombinacemovwf sloupek1 ;ulozi prvni sloupecek do promeneretlw B'11000000' ; ulozi druhy sloupecek do Wnopmovlw B'00000000' ;treti kombinace...movwf sloupek1 ;ulozi prvni sloupecek do promeneretlw B'11000000' ; ulozi druhy sloupecek do WtTabulka3: addwf pcl,f ;pricte W k citaci instrukcimovlw B'00000000' ;prvni kombinacemovwf sloupek1 ;ulozi prvni sloupecek do promeneretlw B'11000000' ; ulozi druhy sloupecek do Wnopmovlw B'00000000' ;pruha kombinacemovwf sloupek1 ;ulozi prvni sloupecek do promeneretlw B'11000000' ; ulozi druhy sloupecek do Wnopmovlw B'00000000' ;treti kombinace...movwf sloupek1 ;ulozi prvni sloupecek do promeneretlw B'11000000' ; ulozi druhy sloupecek do W