|
|
Obsah této stránky je zde pro ty z Vás, kteří se sem vracejí, nebo již něco znají. Protože vše souvisí se vším, a nelze začít od prostředka, začátečníkům vřele doporučuji obsah přeskočit a začít kupodivu od první řádky. Pokud vydržíte číst do půlky stránky, programovat se nejspíš naučíte. Pokud ne, vzdejte to raději hned a věnujte se něčemu jinému. |
| vezměte pánev = jedna instrukce |
| vezměte z lednice vejce = další instrukce |
| zapněte sporák = další instrukce |
| a tak dále. |
Procesor pracuje ve strojovém kódu. Strojový kód je v podstatě hromada čísel, ve kterých se vyzná procesor (tedy pokud je program správně napsaný) ale člověk ne. Pro příklad kousek strojového kódu (pro šťouraly - formát INTELHEX):
:10000000D290B2907BA77AAB7910D9FEDAFADBF600 :0200100080F07E :00000001FFNo uznejte, že to je nečitelné. Aby bylo programování pro člověka možné (a snadné) byl vytvořen jazyk symbolických adres (JSA) - vžilo se označení assembler. Assembler je nejnižší programovací jazyk. Je to soubor instrukcí toho kterého procesoru, které se postupně zapisují do zdrojového souboru. Tyto instrukce mnemotechnicky vyjadřují jednotlivé povely pro procesor, jsou to zkratky anglických pojmů (např. instrukce DJNZ - decrement and jump is zero - dekrementuj a skoč, pokud je nula).
| rozklepni vejce |
| ukliď skořápku |
| zvedni ruku a uchop do ní vejce |
| klepni s ním o hrnek |
| šup s obsahem do hrnku |
| otevři koš |
| zahoď skořápku |
| zavři koš |
Aby bylo možné program v mikroprocesoru vykonávat, musí být někde uložen (analogie: recept je zapsán v knize) - k tomu slouží paměť programu. Procesor také musí mít možnost ukládání mezivýsledků operací ap. (analogie: paměť kuchaře -> pamatuji si, už jsem to osolil). Tyto paměti (programu a dat) se rozdělují hlavně podle technologie výroby a funkce.
Jsou různé způsoby psaní software (teď nemyslím vymýšlení, ale fyzického psaní). Například pro PIC existuje MP Lab, kde si program napíšete, přeložíte a odladíte, pro 8051 já osobně preferuji obyčejný textový editor, který k textu
nepřidává žádné formátovací znaky.
Lze tedy použít např. Poznámkový blok z Windows 95/98/Me/NT/2000/XP, textový editor integrovaný v Norton Commanderu, Total Commanderu atd. Můžeme použít i další programy jako WordPad nebo MS Word všech verzí, výsledný dokument ale musíme uložit jako "čistý text", tj. v případě WordPadu zvolit při ukládání typ souboru textový dokument - formát MS-DOS, v případě MS Wordu zvolit typ souboru MS-DOS text nebo něco podobného.
Takže abych tuto část uzavřel, tento parametr se zapíše jako $MOD51 pokud chcete překládat pro 8051 nebo $MOD52 pokud použijete 8052.| Důležité: Cokoli ve zdrojovém kódu začíná středníkem, je bráno do konce řádku jako komentář. Pokud je před číslem znak # znamená to zápis čísla. Pokud tento znak nezapíšete, pracujete s paměťovou buňkou. Každý zdrojový kód musí být ukončen direktivou END. U překladače pro 8051 nezáleží na velikosti písmen (velká, malá), ale doporučuji si udělat nějaký systém, jak programy zapisovat, pokud pak přejdete na programování procesorů PIC, tam již na stylu zápisu záleží a to tak, že dost. |
Měl bych upozornit na nový pojem v této části, a tím je "příznak" (praporek, angl. flag). Tímto pojmem většinou označujeme bit, který buď hardware procesoru, nebo i uživatel může nastavit nebo nulovat při nějaké činnosti, výpočtu a podobně (například při přetečení po sčítání, atd.) - podle "kuchařkové analogie": jestliže mi došel cukr, nastavím příznak cukr na 0. Když budu v obchodě, otestuji příznak cukr. Pokud je v nule, koupím cukr. Pokud je v jedničce, cukr nekoupím, protože to znamená, že doma ještě je. Samozřejmě nesmím trpět sklerózou.
![]() |
|
| Schéma zkušebního zapojení | Náhled na zapojení |
Zvykneme si již od začátku vytvářet programy tak, jak by se to správně mělo. To, co vidíte vlevo je tak zvaný vývojový diagram. Jednotlivé tvary mají přiřazený význam (obdélník = přiřazení, kosočtverec = rozhodování), více se zde tímto nebudu zabývat, pokud máte zájem, hledejte na internetu. Vývojový diagram popisuje chování systému v reálném čase. Slouží k vytvoření algoritmu úlohy.
Algoritmus je postupné vykonávání kroků, vedoucích k určenému cíli. Rozdíl mezi algoritmem a programem je v tom, že algoritmus je obecný zápis postupných kroků, kdežto program je zápis algoritmu již v daném jazyku pro ten který stroj (kuchařková analogie:
recept na guláš je pořád stejný (algoritmus), ale napsaný česky nebo anglicky, to je již program pro český nebo anglický procesor -pardon kuchaře
$MOD52 $TITLE(BYTE SIGNED MULTIPLY) $PAGEWIDTH(132) $DEBUG $OBJECT $NOPAGING org 0 LED equ P1.2 ;vystup LED ;------------------------------ setb LED zacatek:cpl LED mov R3,#167 cas_1: mov R2,#171 cas_2: mov R1,#16 cas_3: djnz R1,cas_3 djnz R2,cas_2 djnz R3,cas_1 sjmp zacatek end |
![]() |
$MOD52
$TITLE(BYTE SIGNED MULTIPLY)
$PAGEWIDTH(132)
$DEBUG
$OBJECT
$NOPAGING
org 0
LED equ P1.2 ;vystup LED
setb LED
zacatek:cpl LED
mov R1,#164
opak: djnz R1,opak
sjmp zacatek
end
|
To je sice všechno hezké, ale co s tím výpisem, jak to udělat, aby to .... Takže si to zapojte podle schémátka. Nyní si zde stáhněte vlastní překladač, rozbalte archiv a uložte soubory do nějakého adresáře. Dále si stáhněte zdrojový soubor prvního příkladu a uložte jej do stejného adresáře. Můžete si tento ASM soubor otevřít, abyste viděli, jak tedy vlastně zdrojový soubor vypadá. Nyní přikročíme k překladu souboru do strojového (respektive IntelHex) kódu. Spustíme tedy v příkazové řádce (popisuji pro např. Windows Commander) soubor Asm51.exe s parametrem, kterým je jméno našeho zdrojového souboru (obrázek vlevo).
![]() | ![]() |
| Spuštění překladu | Ukončení překladu bez chyby |
![]() | ![]() |
| Výsledek překladu | Listing překladu |
![]() | ![]() |
| Chyba v překladu | Listing chybného překladu |
![]() | Tuto chybu jsem způsobil záměrně vynecháním písmena e v přiřazení equ. Tím vznikla první chyba - kdy překladači není jasné slovo qu. A protože touto chybou nemáme nikam přiřazeno uživatelské jméno LED, následují chyby, kdy se na toto jméno odkazujeme. (kuchařková analogie: pokud například v kuchařce nebude vysvětleno, že GOUDA je sýr, pak těžko pochopíme recept - vezměte 15dkg GOUDY.) | |
| Listing chybného překladu - spodní část souboru |
|
| Oba příklady - ASM i HEX soubory |
|
© DH servis 2002 - |