Avr studio príklady programov v assembleri. Praktické programovanie mikrokontrolérov Atmel AVR v assembleri

ÚVOD Mikrokontroléry, ich výskyt a použitie
História mikrokontrolérov
Elektronika v gréckom štýle
Prečo AVR?
Čo bude ďalej?

ČASŤ I. VŠEOBECNÉ ZÁSADY NÁVRHU A FUNGOVANIA ATMEL AVR

Kapitola 1 Prehľad mikrokontrolérov Atmel AVR

rodiny AVR
Zvláštnosti praktické využitie MK AVR

Kapitola 2. Všeobecné usporiadanie, organizácia pamäte, taktovanie, reset

Pamäť programu
Dátová pamäť (RAM, SRAM)
Energeticky nezávislá dátová pamäť (EEPROM)
Metódy taktovania
Resetovať
Funkcie pripojenia ďalšej externej dátovej pamäte

Kapitola 3. Úvod do periférnych zariadení

I/O porty
Časovače-počítadlá
Analógovo-digitálny prevodník
Sériové porty
UART
Rozhranie SPI
Rozhranie TWI (12C)
Univerzálny sériové rozhranie USI

Kapitola 4 Prerušenia a režimy úspory energie

Prerušenia
Typy prerušení
Režimy úspory energie
Spotreba MK AVR
Režimy spotreby a úspory energie MK AYR

ČASŤ II. PROGRAMOVANIE MIKROKONTROLÉROV ATMEL AVR

Kapitola 5. Všeobecné princípy programovania MK rodiny AVR

Assembler alebo C?
Spôsoby a prostriedky programovania AVR
Editor kódu
O AVR Studio
Usporiadanie zostavovateľa
programátorov
O hex súboroch
Príkazy, inštrukcie a zápis zostavy AVR
Čísla a výrazy
Smernice a funkcie
Všeobecná štruktúra programu AVR
Manipulácia s prerušením
RESETOVAŤ
Najjednoduchší program
Oneskorenie
Pultový program
Používanie prerušení
Oneskorenie časovača
Program prerušenia počítadla
O konfiguračných bitoch

Kapitola 6 Príkazový systém AVR

Riadenie príkazov prenosu a registra SREG
Príkazy check-pass
Logické príkazy
Pokyny na posun a bitové operácie
Príkazy pre aritmetické operácie
Príkazy na prenos údajov
Príkazy na ovládanie systému
Vykonávanie typických procedúr v assembleri
O zásobníku, lokálnych a globálnych premenných

Kapitola 7 Aritmetické operácie

Štandardné aritmetické operácie
Násobenie viacciferných čísel
Viacmiestne delenie
Operácie so zlomkovými číslami
Generátor náhodných čísel
Operácie s číslami vo formáte BCD
Záporné čísla v MK

Kapitola 8 Programovanie časovačov

8 a 16 bitové časovače
Tvorenie nastavená hodnota frekvencie
Odpočítavanie
Presná korekcia času
Merač frekvencie a merač periódy
Merač frekvencie
Periodometer
Dynamické ovládanie indikácie
LED indikátory a ich zapojenie
Programovanie dynamická indikácia
Časovače v režime PWM

Kapitola 9 Používanie EEPROM

Ešte raz o bezpečnosti údajov v EEPROM
Zápis a čítanie EEPROM
Ukladanie konštánt do EEPROM

Kapitola 10 Analógový komparátor a ADC

Analógovo-digitálne operácie a ich chyby
Práca s analógovým komparátorom
Integrácia ADC na komparátore
Princíp činnosti a výpočtové vzorce
Integrácia programu ADC
Vstavaný ADC
Príklad ADC
Program

Kapitola 11 Programovanie SPI

Základné operácie cez SPI
Možnosť hardvéru
Možnosť softvéru
O odrodách energeticky nezávislej pamäte
Zápis a čítanie flash pamäte cez SPI
Program na výmenu pamäte 45DB011B cez SPI
Písanie a čítanie flash kariet
Pripojenie MMS kariet
Vydávanie príkazov a inicializácia MMC
Písanie a čítanie MMS

Kapitola 12. Rozhranie TWI (12C) a jeho praktické použitie

Základný protokol 12C
Softvérová emulácia protokolu 12C
Zápis údajov do externej energeticky nezávislej pamäte
Výmenné režimy s pamäťou AT24
Program
Hodiny s rozhraním 12C
Záznam údajov
Čítanie údajov

Kapitola 13 Programovanie UART/USART

Inicializácia UART
Odosielanie a prijímanie údajov
Príklad nastavenia hodín DS1307 pomocou UART
Techniky ochrany pred zlyhaním komunikácie
Rovnomerná parita
Ako zorganizovať správnu výmenu
Pridané vlastnosti USART
Implementácia rozhraní RS-232 a RS-485
Prevodníky úrovne pre RS-232
RS-485

Kapitola 14 Režimy nízkej spotreby a časovač Watchdog

Programovanie úspory energie
Príklad prístroja na batérie
Spresnenie programu
Používanie časovača strážneho psa

APPS

Príloha 1. Hlavné parametre mikrokontrolérov Atmel AVR

Dodatok 2 Príkazy Atmel AVR
Aritmetické a logické inštrukcie
Príkazy pre bitové operácie
Porovnávacie príkazy
Ovládanie príkazov prenosu
Pokyny na bezpodmienečné skoky a podprogramy
Preskočte pokyny na kontrolu a podmienené pobočky
Príkazy na prenos údajov
Príkazy na ovládanie systému

Dodatok 3 Programové texty
Ukážkový program komunikácie s flash pamäťou 45DB011B cez rozhranie SPI
Postupy výmeny na rozhraní 12C

Dodatok 4 Komunikácia s osobný počítač a ladenie programov cez UART
Práca s COM portom v Delphi
COM port a Windows API
Práca s COM cez hotové komponenty
Inštalácia linky RTS v DOS a Windows
program COM2000
Ladenie programov pomocou terminálového programu

Dodatok 5 Slovník bežných skratiek a pojmov
Korešpondencia termínov v ruštine s ich prekladom do angličtiny
Korešpondencia termínov v angličtine s ich prekladom do ruštiny

Literatúra
Predmetový index


Dúfam teda, že svedomitý čitateľ už zostavil programátor, experimentálnu dosku a tiež nainštaloval a nakonfiguroval požadovaný softvér.

Teraz, keď som napísal prvý článok v sérii, chápem, že som sa trochu vzrušil a urobil som rovnakú chybu ako moji predchodcovia, keď som uviedol frázu „pre začiatočníkov“. Správnejšie by bolo sformulovať tému „Pre začiatočníkov programovať v assembleri“, to znamená, predpokladám, že čitateľ už má aspoň povrchnú predstavu o tom, čo je mikrokontrolér, inak nám to zaberie veľa času na zoznámenie sa s touto témou. Pre tých, ktorí ich úplne nepoznajú, môžem odporučiť sériu článkov od S. Ryumika "AVR Microcontrollers", ktorá je podľa mňa úplne úžasná, uverejnená v časopise Radioamator (č. 1-11 za rok 2005). V tomto cykle je ATmega8 vybraný ako základný ovládač, ale všeobecný funkčné jednotky vyššie uvedený ovládač a ATtiny13 sú prakticky rovnaké.

Na zoznámenie sa priamo s mikrokontrolérom ATtiny13 odporúčam knihu od A.V. Evstifeeva "Mikrokontroléry AVR z malej rodiny. Používateľská príručka" (Moskva: Vydavateľstvo Dodeka-XXI, 2007. - 432 s.). Obsahuje preložené a systematizované dátové listy pre celý rad malých ovládačov a podľa môjho názoru by mal byť desktopom pre tých, ktorí sa zaoberajú programovaním mikrokontrolérov.

Avšak, ako bude príbeh postupovať, poskytnem nejaké informácie o tých uzloch a moduloch radiča, ktoré budú použité v napísaných programoch.

Ale to všetko je lyrická odbočka. Vráťme sa rovno k príbehu.

Ovládač ATtiny13 má napriek svojim malým rozmerom veľmi dobré funkčné charakteristiky. A malý počet záverov je viac než kompenzovaný počtom funkcií, ktoré každý z nich vykonáva. Pinout a popis kolíkov je uvedený nižšie:

Tabuľka je prevzatá z vyššie uvedenej knihy A.V. Evstifeev.

Ako vidíte, každý výstup môže vykonávať najmenej tri funkcie a ešte oveľa viac. Najprv nebudeme uvažovať o alternatívnych funkciách, ale len o tej základnej – digitálnom vstupe/výstupe.

Ako je zrejmé z obrázku a tabuľky, všetky svorky, s výnimkou silových svoriek, majú názov PB, za ktorým nasleduje sériové číslo. Čo to znamená? Všetky výstupy regulátora sú pre pohodlnú prácu skombinované po 8 kusoch a pre každú skupinu 8 výstupov sú pridelené tri špeciálne vstupno-výstupné registre. Vo všeobecnosti je koncept registrov kľúčový pri práci v radičoch, najmä v assembleri. Pozrime sa bližšie na každý z troch vyššie uvedených registrov. Všetko sú to jednobajtové bunky v pamäti ovládača. Každý z nich zodpovedá jednému z výstupov ovládača a číslo bitu v registri sa zhoduje s číslom výstupu (napríklad 0. bit je zodpovedný za výstup PB0, 1. - za PB1 atď.). Všetky registre majú svoj názov, ktorým sa na ne odkazuje pri písaní programov. Aké sú tieto mená?

1. Register DDRB je zodpovedný za smer prenosu informácií každého výstupu regulátora. Ak je niektorý bit tohto registra "0", potom zodpovedajúci výstup bude vstup a ak "1" - potom výstup. Okrem toho je každý výstup nakonfigurovaný individuálne a kdekoľvek v programe. To znamená, že za rôznych podmienok alebo v rôznych časoch môže byť rovnaký kolík nakonfigurovaný ako vstup alebo ako výstup a nezávisle od ostatných kolíkov.

2. Register PINB obsahuje Aktuálny stav všetky výstupy: ak je na výstup privedené napätie, potom sa do príslušného bitu zapíše logická "1", ak nie je napätie, zapíše sa logická "0". Tento register sa používa hlavne na čítanie stavu pinu, ktorý je v režime vstupu.

3. Register PORTB vykonáva dvojitú funkciu v závislosti od smeru prenosu informácií. Ak kolík funguje ako digitálny výstup, potom zápis „1“ do ktoréhokoľvek bitu registra PORTB spôsobí, že sa na príslušnom kolíku objaví napätie a zápis „0“ spôsobí, že napätie zmizne. Vo výstupnom režime je to teda tento register, ktorý určuje stav každého výstupu. V režime digitálny vstup zapísanie logickej „1“ do ľubovoľného bitu spôsobí pripojenie vstavaného pull-up odporu na príslušný kolík a zápis „0“ pre jeho vypnutie. Čo je to za "pull-up odpor" a na čo slúži? Ak kolík funguje ako digitálny vstup, potom je odpor vstupnej vyrovnávacej pamäte dostatočne vysoký a vstupný prúd je veľmi nízky. Preto akékoľvek elektrické rušenie môže viesť k samovoľnému prepnutiu výstupu do ľubovoľného stavu. Aby sa tak nestalo, je medzi vstup a zdroj zapojený rezistor s odporom niekoľkých desiatok kiloohmov, ktorý „vytiahne“ vstupný potenciál na napájacie napätie (odtiaľ názov). Prúd pretekajúci cez tento odpor je dostatočne malý, aby nezasahoval do zvyšku obvodu, ale dostatočne veľký na to, aby zabránil náhodnému prepnutiu pinov. Pri práci s tlačidlami budeme často využívať pull-up rezistory, pretože keď nie sú stlačené, piny, na ktoré sú pripojené, vlastne „visia“ vo vzduchu a podliehajú hukotu.

Treba spomenúť, že pri zapnutí sa všetky registre nastavia na 0 a každý pin funguje ako digitálny vstup bez pull-up rezistora.

Teraz, keď už máme nejakú predstavu o tom, ČO je potrebné na prácu so vstupmi ovládača, je čas naučiť sa, AKO s nimi pracovať.

Napíšeme naše prvé pracovný program v assembleri. Najprv uvediem úplný algoritmus na vytvorenie nového projektu, ale v budúcnosti ho vynechám a budem sa venovať iba samotnému textu programu.

1. Prejdite do priečinka asm, vytvorte v ňom nový priečinok. Premenujte na názov, ktorý nám vyhovuje. Pre istotu ich budem volať číslom nášho kroku. V tomto prípade „krok 2“.

2. Kliknite pravým tlačidlom myši kliknite na súbor build.bat a zmeňte cestu zdrojového súboru na novovytvorený priečinok (krok 2). Potom môj obsah vyzerá takto:

"F:\Prog\AVR\asm\avrasm32 -fI %F:\Prog\AVR\asm\step2\main.asm
pauza"

Môže sa líšiť v závislosti od toho, kde ste archív rozbalili.

3. Prejdite do priečinka Asmedit a spustite program ASM_Ed.exe

4. V okne, ktoré sa otvorí, napíšte text programu. Tomuto bodu sa budem venovať podrobnejšie, pretože je to hlavný v našej dnešnej lekcii, ako aj v nasledujúcich.

Aký je text montážneho programu? Môže obsahovať niekoľko prvkov napísaných podľa určitých pravidiel:

Montážne inštrukcie s operandmi alebo bez nich, v závislosti od syntaxe inštrukcie. Medzi názvom príkazu a prvým operandom musí byť buď medzera, tabulátor alebo ľubovoľné číslo oboch. Operandy sú oddelené čiarkou, pred a za ktorou môže byť tiež ľubovoľný počet medzier alebo tabulátorov;

Direktívy, z ktorých každá začína znakom ".";

Štítky, čo sú miesta v programe ľubovoľne pomenované používateľom, na ktoré môže byť potrebné prejsť. Každý štítok končí znakom ":";

Komentáre začínajúce na „;“. Všetok text od začiatku komentára po koniec riadku sa pri vytváraní hex súboru ignoruje a môže byť úplne ľubovoľný;

Prázdne riadky pre lepšiu štruktúru a čitateľnosť programu.

Na jeden riadok môže byť najviac jeden príkaz. Súčasná prítomnosť označenia v riadku s následným príkazom a komentárom je však povolená.

Pomocou týchto pravidiel napíšeme program, ktorý rozsvieti LED2, kým je tlačidlo SB1 stlačené, a vypne, ak sa tlačidlo uvoľní. Text programu je uvedený nižšie:

.include "F:\Prog\AVR\asm\Appnotes\tn13def.inc"
sbi DDRB, 4 ;РВ4 - výstup (LED2)
sbi PORTB, 2; Zapnite pull-up rezistor na PB2 (tlačidlo SB1)
sbic PINB, 2 ;Ak PB2=0 (tlačidlo stlačené), preskočte ďalej. reťazec
sbi PORTB, 4 ;PB4 nastavený na 1 (LED nesvieti)
sbis PINB, 2 ;Ak PB2=1 (tlačidlo uvoľnené), preskočte ďalej. reťazec
cbi PORTB, 4 ;Nastavte PB4 na 0 (LED svieti)

Poďme si to analyzovať podrobnejšie. Prvý riadok obsahuje smernicu „include“, napísanú podľa vyššie uvedených pravidiel s bodkou na začiatku. Jeho účelom je zahrnúť do textu programu za ním uvedený súbor. Ako som povedal v prvom kroku, potrebujeme súbor „tn13def.inc“. V tomto riadku budete musieť zmeniť cestu k umiestneniu priečinka Appnotes vo vašom počítači. Prečo musíme zahrnúť tento súbor? Zvedavý čitateľ do nej môže nahliadnuť a prečítať si jej obsah, no s najväčšou pravdepodobnosťou tomu bude spočiatku rozumieť len málo. Medzitým poviem, že obsahuje korešpondenciu mien registrov, ktoré assembler štandardne nepozná, s ich fyzickými adresami v radiči.

Nasledujúce riadky sú príkazy assembleru. Pozorný čitateľ si všimne, že sú štyri rôzne príkazy. Pozrime sa na účel každého z nich.

Inštrukcia sbi má dva operandy: prvý je názov registra, druhý je číslo bitu. V dôsledku jeho vykonania sa špecifikovaný bit v zadanom registri nastaví na "1".

Príkaz cbi je syntaxou podobný vyššie uvedenému a vykonáva presne opačnú funkciu – resetuje zadaný bit v zadanom registri na „0“.

Syntax príkazu sbis je tiež podobná vyššie uvedenej. Na rozdiel od nich však nevykonáva žiadne operácie s registrami, ale iba kontroluje stav zadaného bitu v zadanom registri a ak je rovný „1“, preskočí riadok za príkazom. V opačnom prípade sa vykoná riadok, ktorý nasleduje za ním, ako aj všetky ostatné po ňom.

Príkaz sbis je opakom príkazu sbis. Preskočí nasledujúci riadok, ak je špecifikovaný bit registra "0".

Teraz, keď zhrnieme všetko vyššie, pokúsme sa pochopiť algoritmus programu. Na začiatok to urobím doslova rad za radom.

1 riadok. Direktíva include obsahuje súbor tn13def.inc obsahujúci definície registrov.

2 riadok. Príkaz sbi nastaví "1" v bite 4 registra DDRB, čím prepne kolík PB4 na výstup. Ak sa pozriete na schému dosky (obr. 1 predchádzajúceho kroku), môžete vidieť, že LED2 je pripojená k tomuto kolíku. Po príkaze a znaku ";" je napísaný komentár, ktorý stručne vysvetľuje význam akcií vykonaných v riadku.

3 riadok. Rovnaký príkaz sbi nastaví "1" v bite 2 registra PORTB, pričom interný pull-up odpor pripojíme na pin PB2, na ktorý je pripojené tlačidlo SB1. Keďže sme nezmenili stav bitu 2 registra DDRB, tento pin zostane vstupom, čo je presne to, čo potrebujeme.

4 riadok. Príkaz sbic kontroluje prítomnosť logickej "0" na vstupe PB2 pomocou registra PINB. Ak sa pozriete pozorne na diagram, môžete vidieť, že tlačidlá po stlačení zatvoria príslušný výstup spoločným drôtom. Ide o štandardnú techniku, pretože po uvoľnení tlačidla je na výstupe logická „1“ vďaka pull-up odporu a po stlačení tlačidla sa objaví logická „0“ vďaka zapojeniu výstup na spoločný vodič. Ak je teda na výstupe PB2 logická „0“, teda stlačí sa tlačidlo, preskočíme ďalší riadok a ak sa tlačidlo uvoľní, vykonáme ho.

5 riadok. V ňom príkaz sbi nastaví logickú "1" v bite 4 registra PORTB, čím vypne LED2. Korozívny čitateľ sa môže čudovať, prečo LED zhasne, ak na výstup privedieme napätie. Odpoveď je v diagrame. Anóda LED je pripojená k napájaciemu vodiču a katóda k výstupu regulátora. Preto, ak je na výstup privedené napätie, potom sa potenciály anódy a katódy vyrovnajú a LED zhasne. Ak je výstupu pridelená logická "0", potom sa na LED privedie napätie a rozsvieti sa. Dvojica riadkov 4 a 5 teda po uvoľnení tlačidla zhasne LED2 LED.

6 riadok. Vo význame opak 4. Príkaz sbis kontroluje prítomnosť logickej „1“ na vstupe PB2, to znamená, že kontroluje, či je tlačidlo uvoľnené. Ak tlačidlo uvoľníte, nasledujúci riadok sa preskočí a preskočí sa naň. Ale keďže 7. riadok je posledný, preskočí na 2. riadok. Ak sa stlačí tlačidlo, vykoná sa riadok 7.

7 riadok. Oproti 5. Pomocou príkazu cbi sa bit 4 registra PORTB nastaví na "0", čím sa rozsvieti LED2. Dvojica riadkov 6 a 7 teda rozsvieti LED2 LED po stlačení tlačidla SB1.

Ako vidíte, nerobili sme nič mimoriadne náročné. S využitím znalosti iba 3 registrov a 4 inštrukcií sme napísali náš prvý program. Čo s ňou ďalej robiť. Ak ste nezabudli, pokračujeme v písaní algoritmu na vytvorenie programu.

5. Po napísaní textu programu v okne editora vyberte položku ponuky „Súbor“ av zozname, ktorý sa otvorí, kliknite na „Uložiť ako ...“. V okne uloženia súboru vyberte priečinok step2, ktorý sme vytvorili, a zadajte názov súboru „main“, pretože tento názov sme zadali v súbore „build.bat“

Po uložení by okno programu malo vyzerať takto:

6. Vytvorte hex súbor. Ak to chcete urobiť, stlačte tlačidlo "II" na paneli nástrojov. Malo by sa zobraziť nasledujúce okno:

Upozorní nás, že montáž prebehla bez chýb a bol vytvorený súbor firmvéru „main.hex“ s objemom 6 slov, teda 12 bajtov. Podotýkam, že podobný program v C by mal minimálne 5x väčší objem.

7. Po vstupe do priečinka step2 v ňom nájdeme prírastok v podobe novovytvoreného súboru main.hex, ktorý teraz môže do ovládača všiť každý programátor, čo je potrebné urobiť, aby bolo možné vidieť výsledky program, ktorý sme napísali. Po bliknutí ovládača, ak je obvod správne zostavený, všetko by malo fungovať podľa algoritmu, ktorý sme vyvinuli: keď sú tlačidlá uvoľnené, LED2 LED by mala zhasnúť a keď je tlačidlo SB1 stlačené, malo by byť zapnuté.

Pred ďalším krokom navrhujem vykonať nasledujúce úlohy:

1. Pridajte do programu spracovanie stlačenia tlačidla SB2 s opačným algoritmom: po uvoľnení tlačidla SB2 by mala LED1 svietiť a po stlačení by mala zhasnúť.

2. Napíšte program na ovládanie LED2 oboma tlačidlami. Po stlačení tlačidla SB1 by sa LED dióda mala rozsvietiť a zostať svietiť, kým sa nestlačí tlačidlo SB2, čím sa vypne, kým sa nestlačí ďalší SB1.

Všetci dobrý večer! Vysielam z útulného sveta, ktorý sa volá „assembler“. Dovoľte mi vysvetliť, o čom je téma. mikrokontroléry AVR- a ešte neviem, či tento príspevok bude užitočný pre tých, ktorí chcú assembler použiť na akúkoľvek inú úlohu. Faktom je, že len pred pár dňami som sa začal učiť assembler od nuly - musíte si vyrobiť jedno zariadenie - a rozhodol som sa, že všetko v ňom urobím sám. Tak som si to jedného dňa uvedomil učiť sa assembler je absolútne zbytočné! Assembler sa dá len pochopiť! To znamená, že pre všetkých, ktorí chcú programovať v assembleri, dôrazne odporúčam, aby ste podrobne pochopili, ako mikrokontrolér FYZICKY funguje, a potom si preštudovali zložitosť príkazov.
Takže pravdepodobne začnem malú sériu článkov, v ktorých poviem od samého začiatku ako presne Pochopil som určité veci v programovaní v assembleri – myslím, že pre tých, ktorí vôbec nerozumejú, čo je ASM, budem len taký „prekladateľ“ z jazyka tých, ktorí sa v tejto veci veľmi dobre tápajú.

Hneď musím povedať, že som sa k tejto téme viac-menej dostal na podnet DIHALT-u - preto budú tieto články akýmsi prekladom z jazyka super-duper-assembly-microcontroller do jazyka zrozumiteľného pre väčšinu ľudí. Dúfam, že ma guruovia v priebehu hry opravia, a ak zrazu niečo nesprávne vysvetlím, opravia ma.
Takže prvé závery o assembleri, ktoré som urobil pred pár dňami ma šokovali až do špiku kostí - a to som sedel pri článkoch DI HALT od 23:00 do 5:00 - potom som išiel spať spokojný a šťastný. Pochopil som podstatu programovanie v assembleri pre mikrokontroléry.
Ako sa to dá ešte jednoduchšie vysvetliť? Myslím si, že musíme začať od jadra.
***
Spočiatku nebudeme zachádzať do technických detailov (povieme si o nich v ďalšom článku) - len predstavte si, že sú tam 3 postavy:
1. Mikrokontrolér - to je Angličan Steve, ktorý prišiel k Rusovi. Vie dokonale anglický jazyk, ale v ruštine nerozumie vôbec - ani jedno slovo. Len anglicky. Prehral argument a bezvýhradne sa zaviazal urobiť všetko, o čo ho Rus žiadal.
2. Zostavovač - toto je prekladateľ Vasya, ktorého matka je Angličanka a otec Rus. Vie perfektne anglicky aj rusky.
3.My - toto je Rus, ktorého navštívil Angličan. Teda, to sme my =) Zároveň dokonale ovládame ruský jazyk a (!!!) trochu anglicky - len trochu, so slovníkom.
***
Predstavte si túto situáciu – vo vašej izbe na stoličke sedí Angličan. A vy sedíte pri počítači a čítate tento príspevok, keď sa zrazu otvorilo vaše okno! To je smola! Vietor fúka, opona sa zmenila na plachtu... Bolo by pekné ju zavrieť! Ale veď aký lenivý vstať zo stoličky, vyzuť nohy zo systémovej jednotky, napchať ich do papúč, odložiť hrnček kávy (piva) a ísť bojovať so živlami. A potom si zrazu uvedomíte, že máme v izbe stávkovaného Angličana, ktorého je čas povoziť! A ty mu tak pekne hovoríš: „Priateľ môj! Zatvorte okno, prosím, a potom si môžete opäť sadnúť na stoličku!“ a on sedí, hľadí na teba zmätene a nič nerobí! Môžete samozrejme trafiť kapustnicu - ale potom vám stále nebude rozumieť! Potom zavoláte svojmu priateľovi-prekladateľovi Vasilijovi - príde a sadne si k Angličanovi na stoličku. A ty povieš - Translate: "Steve, choď zavrieť okno a potom si sadni späť na stoličku!" Prekladateľ prekladá do angličtiny – Angličan rozumie a ide zavrieť okno a potom príde a sadne si na stoličku.
V tomto bode musíte len pochopiť úlohu assemblera v tomto reťazci „We-Assembler-Controller“
To znamená, ako by každý pochopil, čo je assembler? Potom čítame ďalej.
***

Preto uvádzame takúto situáciu. Poviete Vasyovi - "Počúvaj, no, skrátka niečo také - zabudol som si doma kalkulačku, vydeľ 56983 2 a povedz Stevovi, aby toľkokrát robil kliky na päste" a Vasja počíta s kalkulačkou a hovorí Stevovi po anglicky „Zatlačte na päste 28491 krát“ Hovorí sa tomu "SMERNICA"- inými slovami, direktíva je úloha pre Vasyu, ktorej výsledkom je Stevov čin.

Existuje aj iná situácia – poviete Vasyovi „Povedz Stevovi, aby urobil 28491 klikov“ a Vasya jednoducho preloží vaše slová do angličtiny. To sa nazýva OPERÁTOR

Všetko je jednoduché - existuje smernica a existuje operátor. Operátor je vašou priamou inštrukciou, čo máte urobiť Stevovi - tu Vasya iba preloží vašu požiadavku do angličtiny. A Smernica je úlohou pre samotného Vasyu - a Vasya najprv urobí, čo ste mu povedali, a potom, v závislosti od výsledku, niečo povie Stevovi.

Teraz budeme Angličana pravidelne mučiť! Najprv však musíte lepšie spoznať nášho prekladateľa Vasyu. Musíte vedieť nasledovné - Vasya vás vždy bezvýhradne poslúcha - čo mu bolo povedané, to robí. Vasyova kalkulačka nemá desatinné miesta - ak sa pozriete na príklad s klikami, potom 56983 \ 2 = 28491,5 - ale Vasya odreže všetko za desatinnou čiarkou - a vidí len celé číslo - a nezáleží na tom, či bude to 28491,000001 alebo bude 28491,9999999 - pre Vasyu je to jeden obrázok, v oboch prípadoch bude 28491. Nič nie je zaoblené. Ešte dôležitá informácia o Vasyi. Vasya je krutý - je mu jedno, že Steve sa unavuje robiť kliky dvadsaťosemtisíckrát. Bolo mu povedané - Vasya preložil. A nielen preložené - ale aj nútené urobiť to, o čo ste žiadali. Takže ak Steve zomrie na 23 tisíc päťsto trinástom push-up, potom to bude úplne vaša chyba.

Vlastne, to je zatiaľ všetko. V ďalšom príspevku budeme kopať hlbšie - zatiaľ to stačí pochopiť. Len si predstavte túto situáciu a pochopte, čo je čo, kto hrá akú úlohu a ako sa smernica líši od operátora.
A potom skúsime všetko nazvať pravým menom a zhruba prídeme na to, ako pracuje assembler s mikrokontrolérom dospeláckym spôsobom.

Klon slávneho Tetrisu napísaný v assembleri. Úplne sa zmestí do 512 bajtov zavádzacieho sektora (potrebuje iba 446 bajtov priestoru, čo je len maximálna veľkosť zavádzača v MBR).

MBR - sekcia obsahujúca kód a údaje potrebné na následné spustenie operačného systému a nachádza sa v prvých fyzických sektoroch. Prvých 446 bajtov disku je pridelených kódu zavádzača. Práve na tomto mieste je zaznamenaný TetrOS.

Prirodzene, kvôli takýmto vlastnostiam je zaťažený pred akýmikoľvek operačný systém- nevyžaduje žiadny OS, funguje sám. Áno, počuli ste dobre, TetrOS je vlastný bootloader.

Takto to vyzerá na obrazovke:

A zdroj v boot sektore vyzerá takto:

A áno je celá zdroj. Pamätáte si, že váži len 446 bajtov?

Tento „zázračný operačný systém“ môžete spustiť pod qemu alebo ho dokonca nainštalovať skutočne na zavádzaciu oblasť disku alebo flash disku.

spustiť

Stačí nainštalovať qemu:

sudo apt-get install qemu

a spustiť:

Stiahnite si na flash disk

Skopírujte obrázok na flash disk. Povedzme, že ak je flash disk pripojený ako /dev/sde , musíte spustiť nasledujúci príkaz, aby ste zapísali TetrOS do jeho zavádzacieho sektora:

sudo dd if=tetros.img of=/dev/sde

Popis hry

Nie najnudnejší dizajn sa vývojárovi podarilo vtesnať len do 512 bajtov pamäte. Každá tehla v hre má svoju farbu, ovládanie sa vykonáva tlačidlami, v prípade porážky hra končí, tehly sa generujú náhodne... BolgenOS nebol ani zďaleka!

Žiaľ, kvôli veľkosti sa muselo od niektorých funkcií upustiť. V hre nie je žiadne bodovanie, reštartovanie hry bez opätovného načítania a zobrazenie ďalšej kocky.

Názov: Praktické programovanie mikrokontrolérov Atmel AVR v assembleri 2 edition

Vydavateľ:"BHV-Petersburg"

Rok vydania: 2011

Stránky: 354

Jazyk: ruský

Formát: DjVu

Veľkosť: 12,2 MB

Princípy fungovania, vlastnosti architektúry a programovacie techniky mikrokontrolérov Atmel AVR sú superponované.

Uvádzajú sa hotové recepty na programovanie hlavných funkcií moderných mikroelektronických zariadení: od reakcie na stlačenie tlačidla alebo vybudovanie dynamickej indikácie až po zložité protokoly na zapisovanie údajov do externej pamäte či vlastnosti pripojenia hodín reálneho času. Osobitná pozornosť sa venuje výmene údajov mikroelektronických zariadení s osobným počítačom, sú uvedené príklady programov. Kniha obsahuje moderné modely AVR a súvisiace čipy z posledných rokov vydania.
Aplikácia obsahuje hlavné parametre mikrokontrolérov AVR, zoznam príkazov a textov Aplikácie obsahujú hlavné parametre mikrokontrolérov AVR, zoznam príkazov a programových textov k nim, ako aj zoznam používaných pojmov a skratiek.
Pre študentov, inžinierov a rádioamatérov

7. Mikrokontroléry, ich výskyt a použitie
8. Pravek mikrokontrolérov
10. Elektronika v gréckom štýle
12. Prečo AVR?
14. Čo ďalej?
17. ČASŤ L VŠEOBECNÉ ZÁSADY NÁVRHU A FUNGOVANIA ATMEL AVR
19. Kapitola 1. Prehľad mikrokontrolérov Atmel AVR
21. Rodiny AVR
23. Vlastnosti praktického využitia MK AVR
23. Spotreba
25. Niektoré vlastnosti použitia AVR v obvodoch
27. Kapitola 2. Všeobecné usporiadanie, organizácia pamäte, taktovanie, reset
27. Pamäť programu
29. Dátová pamäť (RAM, SRAM)
31. Energeticky nezávislá dátová pamäť (EEPROM)
32. Metódy časovania
34. Resetovať
37. Kapitola 3. Úvod do periférnych zariadení
38. I/O porty
39. Časovače-počítadlá
41. Analógovo-digitálny prevodník
42. Sériové porty
43. UART
46. ​​Rozhranie SPI
50. Rozhranie TWI (I2C)
50. Univerzálne sériové rozhranie USI
53. Kapitola 4. Prerušenia a režimy úspory energie
53. Prerušuje
57. Odrody prerušení
58. Režimy úspory energie
61. ČASŤ II. PROGRAMOVANIE MIKROKONTROLÉROV ATMELAVR
63. Kapitola 5. Všeobecné princípy programovania MK rodina AVR
63. Assembler alebo C?
67. Spôsoby a prostriedky programovania AVR
67. Editor kódu
68. O AVR Studio
70. Usporiadanie zostavovateľa
71. Programátori
75. O hex súboroch
78. Príkazy, inštrukcie a zápis assembleru AVR
79. Čísla a výrazy
80. Smernice a funkcie
84. Všeobecná štruktúra programu AVR
85. Obsluha prerušení
89. RESET
90. Najjednoduchší program
92. Oneskorenie
94. Pultový program
96. Používanie prerušení
97. Časovač oneskorenia
98. Čítací program využívajúci prerušenia
101. O konfiguračných bitoch
105. Kapitola 6, Systém príkazov AVR
105. Ovládajte prenosové príkazy a registrujte SREG
111. Príkazy check-pass
113. Príkazy logických operácií
114. Pokyny na posun a bitové operácie
116. Príkazy aritmetických operácií
118. Príkazy na prenos údajov
122. Príkazy na ovládanie systému
123. Vykonávanie typických procedúr v assembleri
125. O zásobníku, lokálnych a globálnych premenných
127. Kapitola 7. Aritmetické operácie
128. Štandardné aritmetické operácie
129. Násobenie viacciferných čísel
131. Delenie viacciferných čísel
134. Operácie so zlomkovými číslami
136. Generátor náhodných čísel
138. Operácie s číslami vo formáte BCD
143. Záporné čísla v MK
147. Kapitola 8. Programovanie časovačov
147. 8 a 16 bitové časovače
149. Vytvorenie nastavenej hodnoty frekvencie
153. Odpočítavanie
158. Presná korekcia času
160. Počítadlo frekvencie a merač periódy
160. Merač frekvencie
164. Periodometer
167. Dynamické riadenie indikácie
168. LED indikátory a ich zapojenie
171. Programovanie dynamickej indikácie
174. Časovače v režime PWM
179. Kapitola 9. Používanie EEPROM
179. Ešte raz o bezpečnosti údajov v EEPROM
181. Zápis a čítanie EEPROM
183. Ukladanie konštánt do EEPROM
187. Kapitola 10. Analógový komparátor a ADC
187. Analógovo-digitálne operácie a ich chyby
190. Práca s analógovým komparátorom
193. Integrácia ADC na komparátore
194. Princíp činnosti a kalkulačné vzorce
198. Integračný program ADC
201. Vstavaný ADC
204. Príklad použitia ADC
206. Program
215. Kapitola 11 Programovanie SPI
215. Základné operácie cez SPI
216. Hardvérový variant
218. Možnosť programu
219. O odrodách neprchavej pamäte
221. Zápis a čítanie flash pamäte cez SP!
224. Program na výmenu s pamäťou 45DB011B cez SPI
225. Písanie a čítanie flash kariet
225. Pripojenie kariet MMS
228. Vydávanie príkazov a inicializácia MMC
232. Písanie a čítanie MMC
237. Kapitola 12. Rozhranie TW1 (I2C) a jeho praktické využitie
237. Základný protokol 1 2 C
240. Softvérová emulácia protokolu I 2 C
241. Zápis údajov do externej energeticky nezávislej pamäte
241. Spôsoby výmeny s pamäťou AT24
243. Program
247. Hodiny s rozhraním I 2 C
255. Záznam údajov
259. Čítanie údajov
261. Kapitola 13. Programovanie UART/USART
262. Inicializácia UART
263. Odosielanie a prijímanie dát
266. Príklad nastavenia hodín DS1307 pomocou UART
271. Techniky ochrany pred zlyhaním komunikácie
271. Kontrola parity
273. Ako zorganizovať správnu burzu
274. Ďalšie funkcie USART
276. Implementácia rozhraní RS-232 a RS-485
280. Prevodníky úrovní pre RS-232
283.RS-485
285. Kapitola 14. Režimy úspory energie a časovač Watchdog
286. Programovanie úsporného režimu
287. Príklad prístroja na batérie
289. Spresnenie programu
293. Používanie strážneho časovača
299. PRÍLOHY
301. Príloha 1. Hlavné parametre mikrokontrolérov Atmel AVR
309 Príloha 2 Príkazy Atmel AVR
310. Aritmetické a logické príkazy
311. Príkazy bitovej operácie
312. Príkazy na porovnávanie
313. Príkazy na prenos riadenia
313. Pokyny pre bezpodmienečný skok a volanie podprogramov
314. Príkazy check-skip a príkazy podmieneného skoku
315. Príkazy na prenos údajov
316. Príkazy na ovládanie systému
317. Príloha 3. Texty programov
317. Ukážkový program na výmenu dát s flash pamäťou 45DB011B cez SPI rozhranie
321. Procedúry výmeny cez rozhranie I2C
329. Príloha 4. Komunikácia s osobným počítačom a ladenie programov cez UART
329. Práca s COM portom v Delphi
335. Inštalácia linky RTS v DOS a Windows
337. Program COM2000
339. Ladenie programov pomocou emulátora terminálu
341. Príloha 5. Slovník bežných skratiek a termínov
347. Literatúra
349. Predmetový register