Error [= chyba], Warning [= varování]. Nad ní jsou věty ve tvaru:

Podobné dokumenty
David Urban Podpora předmětu APP. Blokové schéma

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Návod na práci s přípravkem a programy uscope a FLIP na cvičeních

Obsah: KR2 - Uživatelská příručka -1-

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

Rámcový manuál pro práci s programem TopoL pro Windows

Návod na použití prezentační techniky

Programování PICAXE18M2 v Assembleru

Programování. Debugging a testování. Martin Urza


POPIS PROSTŘEDÍ PROGRAMU GIMP 2. Barvy 2. Okno obrázku 4 ZÁKLADNÍ ÚPRAVA FOTOGRAFIÍ V GRAFICKÉM EDITORU 6. Změna velikosti fotografie 6

5 ÚVOD DO TESTOVÁNÍ SOFTWARE. 6 Testování software ve vývojovém prostředí MICROSOFT VISUAL STUDIO V hlavním menu volba Debug

Uživatelská příručka pro program

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

Manuál programu HPSim

Registrační teploměr

RC-300. U ivatelská pøíruèka. Instalaèní firma: Servisní telefon: Datum Počet stran Číslo dokumentu 11/ PU-RC-3-01-C

ŘÍZENÍ FYZIKÁLNÍHO PROCESU POČÍTAČEM

1.1 Schema zapojení pro MODBUS. 1.2 Zapojení desky DMS2 T3 a uživatelských vstupů. Binární vstup A1/N. Binární vstup A1/N. Binární vstup B1/P

Komunikace modulu s procesorem SPI protokol

Servisní návod [CZ] VMS 08. Øídící jednotka pro pøesné mìøení spotøeby nápojù. Verze: 1.4 Datum: Vypracoval: Vilímek

Zónový regulátor vytápění VPT

CE - Prohlášení Prohlašujeme, že TEAC MEDIA SYSTEMS IP-20 USB Telefon splňuje následující normy a dokumenty: EMC Directive 89/336 / EEC

Programovatelný domovní zesilovač Avant 7

Návod na obsluhu vektorového obvodového analyzátoru R&S ZVL

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ

Stav: červen TRACK-Guide

Laboratorní zdroj - 6. část

V 70. letech výzkumy četnosti výskytu instrukcí ukázaly, že programátoři a

Záznamník teploty ZT, ZT1ext Návod k použití

Kaskádní řadič kotlů KR2

web:

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Návod na obsluhu SendPíp1 verse V0.2 (PŘEDBĚŽNÝ NÁVOD).

Pace Maker ZJ18. Návod k použití. 1) Popis výrobku:

Děkujeme vám za důvěru, kterou dáváte naší firmě tím, že jste si zakoupili Digital Flowmaster. Připojení. Aktuální průtok v l/ min.

MenuLIB KNIHOVNA SIMPLE4 PRO TVORBU UŽIVATELSKÉHO ROZHRANÍ NA PLC MICROPEL

Vysoká škola chemicko-technologická v Praze Fakulta chemicko-inženýrská Ústav počítačové a řídicí techniky. Aplikace mikroprocesorů.

Uživatelský manuál na obsluhu mobilní aplikace CMOB

M ě r n á t e p e l n á k a p a c i t a p e v n ý c h l á t e k

ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA PEDAGOGICKÁ KATEDRA TECHNICKÉ VÝCHOVY

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

Word 2007 Word 2007 egon. Spuštění, vzhled, zobrazení dokumentu

Microchip. PICmicro Microcontrollers

Řídící jednotka AirBasic 2

Kapitola 1: Úvodní strana PARTICLER

LOGIC. Stavebnice PROMOS Line 2. Technický manuál

POKLADNÍ DISPLEJ LCD. hotline: strana 1

Měření kmitočtu a tvaru signálů pomocí osciloskopu

PROCESOR. Typy procesorů

Datalogger Teploty a Vlhkosti

Přehled verzí aplikace WinTechnol

Kurz Word 2000 Odrážky a číslování Kurz Word 2000 Odrážky a číslování Oddíly Záhlaví a zápatí

Kompaktní procesní stanice

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

UŽIVATELSKÁ PŘÍRUČKA KLÁVESNICE

Název projektu: Život s počítačem. Číslo projektu: OPVK.CZ.1.07/1.2.32/

Elektronický inteligentní regulátor vytápění

Uživatelský manuál. Návod k obsluze řídící jednotky TM3007. Mode: Running o. >Temperature 65.0 C O2 8.0% Setting

HypEd4 Uživatelská příručka 2004 HYPEL

Elektronická kapacitní dekáda - BASIC

Operační paměti počítačů PC

Pohotovostní režim: vstup do Audio přehrávače. V menu: pohyb nahoru. Pohotovostní režim: vstup do Zpráv. V menu: pohyb doprava.

MANUÁL K OBSLUZE REDAKČNÍHO SYSTÉMU / wordpress

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

Uživatelský manuál programu WZORKY. pro vyčítání historických databank. z regulátorů PROMOS line 2

zení Koncepce připojení V/V zařízení POT POT ... V/V zařízení jsou připojena na sběrnici pomocí řadičů. Řadiče Připojení periferních zařízení

Metody připojování periferií BI-MPP Přednáška 2

Elektronický indikátor topných nákladů E-ITN 10.4 Verze: 1.1 Datum: 3. října Charakteristika přístroje. 2. Popis. 2.1.

Digitální osciloskop S2X100 OSCILOSKOPY.COM

SIGMA Optimization Pro. Návod k použití programu a dokovací stanice

MPASM a IDE pro vývoj aplikací MCU (Microchip)

PK Design. MB-ATmega16/32 v2.0. Uživatelský manuál. Základová deska modulárního vývojového systému MVS. Verze dokumentu 1.0 (21.12.

Popis instrukční sady - procesory PIC Aritmetické a logické operace

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Popis prostředí MOSAIC Programové prostředí MOSAIC nastavení prostředí. Po spuštění Mosaiku se objeví okno Výběr skupiny projektů

Úvod do mobilní robotiky AIL028

Příloha č. I: Schéma zapojení vývojové desky PVK-PRO

Ovládací PTZ klávesnice SC-3100 Uživatelský a instalační manuál

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ

Jestliže vše proběhlo tak, jak mělo, měl by výsledný materiál vypadat nějak takto:

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

MIDAM UC 301 modbus regulátor topeni, otočné tlačítko, RTC, 2xDO, 1x DI, externí odporové čidlo PT1000, RS485

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ FAKULTA INFORMAČNÍCH TECHNOLOGIÍ. Uživatelská příručka k programu FloodFilling Art

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

POKOJOVÁ JEDNOTKA S MODULAČNÍM PROGRAMOVATELNÝM REGULÁTOREM

Programovací stanice itnc 530

Robot Lego Mindstorms NXT doplněný o kamerku a software v jazyce C#

Manuál k užívání aplikace Monitoringrejstriku.cz

MIDAM MW 240 modbus 2 x DI, 2 x DO

Alfanumerické displeje

Voděodolný tloušťkoměr MG-401 Obsah:

Připojení systému A3600 k aplikaci DDS2000

8. Laboratoř: Aritmetika a řídicí struktury programu

PicoBlaze lekce 1: assembler, C překladač a simulační prostředí Jiří Svozil, Leoš Kafka, Jiří Kadlec svozil@utia.cas.cz

Návod na obsluhu Pípáku3 verse V3.15 (PŘEDBĚŽNÝ NÁVOD).

MR51P. Systémy Měřicí, Analytické a Regulační Techniky POPIS A NÁVOD K OBSLUZE PROGRAMOVATELNÝ MĚŘIČ PRŮTOKU A PROTEKLÉHO MNOŽSTVÍ. verze 1.

INDUKČNÍ PRŮTOKOMĚR F3 INSTALAČNÍ PŘÍRUČKA

Návod k použití. Elektronický inteligentní regulátor vytápění

Transkript:

Cvičení 2 Simulace v ST7 Visual Develop Reva kit Příklad B Simulace v ST7 Visual Develop Jak již bylo zmíněno, vývojové prostředí umožňuje simulovat funkci MCU aniž by bylo připojeno. Tato možnost se jmenuje Simulation [= simulace] a lze ji nastavit v menu Debug instrument > Target settings (= nastavení cíle). Screenshot 1: Nastavení Simulátoru V tomto okně vybereme Simulator a je nastaveno. Bude nutné nejprve otevřít projekt (například náš nový prázdný) a přidat do něj nějaký zdrojový kód. My použijeme Příklad A. Klikneme pravým tlačítkem na Source Files a zvolíme Add Files to Folder. Najdeme priklada.asm a potvrdíme. Když dvakrát poklepáme na priklada.asm v okne Workspace, otevře se nám v hlavním okně vývojového prostředí. Ještě předtím, než budeme ladit program pomocí Simulátoru je nutné ho zkompilovat do strojového kódu. Nejjednodušší cestou je menu Build > Rebuild all (= znovupostavit vše). Je-li vše v pořádku, zobrazí se dole v okně Output [= výstup] věta: nazev_projektu.s19-0 error(s), 0 warning(s) Error [= chyba], Warning [= varování]. Nad ní jsou věty ve tvaru: asm -sym jméno souboru.asm -I="adresa souboru" -li=debug\cíl.lst -fi=debug\název projektu.map STMicroelectronics assembler v4.49 No errors on assembly of 'adresa a jméno souboru.asm' Při provádění Rebuild all se totiž kompilují všechny soubory v projektu, včetně konfiguračních. A zprávy o průběhu těchto převodů najdeme právě v okně Output. V případě, že jsou v kódu chyby, bude výstup vypadat takhle: Assembling priklada.asm...

asm priklada.asm -I="C:\Program Files\STMicroelectronics\st7toolset\asm\include" -obj=debug\priklada.obj STMicroelectronics assembler v4.49 1 error on assembly of 'C:\Pokus\priklada.asm' C:\Pokus\priklada.asm(26): as2 : Error 46: Illegal undefined label 'apnuto' The command: "asm priklada.asm -I="C:\Program Files\STMicroelectronics\st7toolset\asm\include" -obj=debug\priklada.obj" has failed, the returned value is: 2 exit code=2. nazev_projektu.s19-2 error(s), 0 warning(s) Skončí-li Rebuild all bez problémů, můžeme přistoupit k vlastnímu ladění. V menu Debug zvolíme Start debugging. Objeví-li se nabídka Target selection (= zvolte cíl) potvrdíme OK. A dostaneme se do režimu ladění. Obrazovka bude vypadat zhruba takto: Screenshot 2: Základní vzhled okna ladění (debug) V hlavním okně vidíme náš zdrojový kód s označeným místem, kde se program zastavil. Dole známé okno output a vpravo okno Disassembly [= rozebrání], kde je zobrazen kód assembleru, kde jsou proměnné adresované přímo v paměti. To se hodí pro kontrolu, hlavně když se používá jako programovací jazyk C, který je potom překládán do assembleru. Rozeberme nyní podrobněji ovládací tlačítka režimu ladění. Zleva: Debug tlačítko pro spouštění režimu ladění (nyní šedé, protože je režim aktivní);

Stop debugging ukončí režim ladění; Go to PC (= jdi na pozici Program Counteru) skočí v hlavním okně na pozici, ve které se právě program nachází; Run [= běž] spustí program (v Simulátoru k ničemu, je-li ovšem připojený kit s MCU, pak se spustí program i v MCU a můžeme ho pozorovat); Chip [= čip] reset zresetuje MCU; Restart Application restartuje program; Continue [= pokračovat] spustí program od místa, kde byl zastaven; Stop Program zastaví program; Tlačítka pro krokové řízení: Step into (= vkročit dovnitř) nepřeskakuje podprogramy; Step over (= překročit) přeskakuje podprogramy. Užitečné ladíme-li program, který mí čekací podprogram a nechceme překlikávat stovky cyklů čekání; Step into ASM stejné jako Step into, ale řídí se kódem Assembleru (třeba když se programuje v C; Step over ASM analogicky; Step out (= vykročit pryč) vrátí se z podprogramu; Run to Cursor (= běž ke kurzoru) spustí program a zastaví ho na pozici kurzoru; Set PC nastaví pozici Program Counteru. V režimu simulátoru je důležité mít možnost sledovat interní registry (A, X, Y, flags,..) a registry periferií. Toho docílíme, když z nabídky View vybereme Core registers (= registry jádra) a peripheral registers (= registry periferií). Tento stav vidíme na dalším obrázku: Screenshot 3: Okno ladění s zobrazením registrů Všimněme si, že horní z registrů Portu A (což je PADR datový registr) má hodnotu 00000000 1. Je to proto, že jsme na pozici v programu (žlutá šipka v hlavním okně), kdy ještě nebyla do PADR 1 Standardní nastavení zobrazování je hexadecimální. Změnit na binární (například abychom viděli jaké vývodu portu A jsou aktivní) lze kliknutím pavým tlačítkem na myši v okně peripheral registers, zvolit display all a binary.

vložena hodnota proměnné vypnuto. REva kit Popis přípravku Pro výuku a testování programů pro ST7 se používají speciální zařízení od francouzské firmy Raisonance, která vyrábí příslušenství (simulátory, compilery,..) pro MCU. Jejich hlavní výhodou je, že umožňují ladění programu po krocích v reálném procesoru s vizuální kontrolou funkce výstupních portů (PA). Zařízení se v našem případě skládá z programátoru, tedy obvodů kontrolujících programování MCU, ladění programu po krocích, komunikaci po USB a další. Tato část je označena jako Rlink. Obrázek 1: REva kit Druhá (na obrázku 2 část desky vlevo) je vlastní testovací část s MCU připojeným ve sběrnici. Deska REva je do značné míry univerzální, umožňuje tedy výměnu MCU na desce s jeho příslušenstvím (např. externí hodiny). Deska je osazena příslušenstvím, které využijí vnitřní periferie MCU (jako třeba AD převodník). Náš typ je osazen čidlem pro snímání teploty, potenciometrem, sériovou linkou, tlačítky, SPI komunikací. Celý přípravek je napájen u USB portu. Pro nás budou důležité hlavně LED diody umístěné na portu A. Rozmístění vybraných prvků ukazuje Obrázek 2: Obrázek 2: Prvky na přípravku Práce s REva kitem Pro ladění složitějších aplikací je Simulátor nevhodný, protože v něm není možné měnit vnější parametry (stisky tlačítek, potenciometr) v reálném čase a sledovat reakce programu. Je možné měnit přímo hodnoty registrů, na které potom může program reagovat. Nejde ovšem o příliš efektivní přístup.

Pro trénink a ladění programu tak můžeme použít REva kit, který je osazen různými periferiemi, je možné do jisté míry kontrolovat jeho vlastnosti a má vestavěnou podporu pro ladění po krocích. A díky obousměrné komunikaci se chová v okně ST7VD jako kdyby byl spuštěný Simulátor vidíme registry, paměť, vše na co jsme zvyklí a ještě k tomu se program provádí v MCU. Chceme-li začít REvu používat je třeba změnit v debug instrument > target settings debug instrument na Icd Rlink a potvrdit. Skladba programu Screenshot 4: Nastavení Rlinku jako nástroje pro ladění Jako každý program, má i zápis v assembleru svá pravidla a svou strukturu. Budeme ji demonstrovat na Příkladu A. Celý zápis vypadá totiž takto 2 : st7/.nolist #INCLUDE "ST7FLITE39.inc" ; vkládá soubor st7flite39.inc, který obsahuje ; definice systémových proměnných (PADR, ; PAOR,..).LIST ;-------------- definice --------------------------------- PADDR_1 equ %10011111 ; část s definicemi konstant vypnuto equ %11111111 zapnuto equ %00000000 ;-------------- blok paměti RAM -------------------------- BYTES ; část s definicemi proměnných segment 'ram0' pr_cekej1 DS.B ; například zde jsou proměnné pro podprogram ; čekání pr_cekej2 DS.B ;-------------- vlastni program -------------------------- WORDS ; vlastní program segment 'rom'.main LD A,#PADDR_1 LD PADDR,A.zacatek LD A,#zapnuto LD PADR,A LD A,#vypnuto 2 V programu nejsou komentovány jednotlivé příkazy ty slouží jen pro ilustraci struktury reálného programu. Program byl kompletně vysvětlen v Příkladu A.

LD PADR,A JP zacatek ;-------------- podprogram cekani ------------------------.wait LD A,#200 LD pr_cekej2,a wait2 LD A,#250 LD pr_cekej1,a wait1 DEC pr_cekej1 JRNE wait1 DEC pr_cekej2 JRNE wait2 RET ;------------- obsluha preruseni ---------------------------.dummy iret ; prázdný podprogram, všechny vektory přerušení 3 jsou ; nadefinovány na spuštění prázdného programu. ;------------- vektory preruseni --------------------------- segment 'vectit' DC.W dummy ;13 FFE0-FFE1h AT TIMER DC.W dummy ;12 FFE2-FFE3h SPI DC.W dummy ;11 FFE4-FFE5h LITE TIMER DC.W dummy ;10 FFE6-FFE7h LITE TIMER DC.W dummy ; 9 FFE8-FFE9h AT TIMER DC.W dummy ; 8 FFEA-FFEBh AT TIMER DC.W dummy ; 7 FFEC-FFEDh SI DC.W dummy ; 6 FFEE-FFEFh LINSCI DC.W dummy ; 5 FFF0-FFF1h LITE TIMER DC.W dummy ; 4 FFF2-FFF3h EI3 DC.W dummy ; 3 FFF4-FFF5h EI2 DC.W dummy ; 2 FFF6-FFF7h EI1 DC.W dummy ; 1 FFF8-FFF9h EI0 DC.W dummy ; 0 FFFA-FFFBh AWU DC.W dummy ; T FFFC-FFFDh TRAP.reset DC.W main ; R FFFE-FFFFh RESET END ; konec programu Šedé části programu nebudeme, až na výjimky, uvádět, protože se nebudou měnit. Příklad B Zadání Napište program, který vytvoří na LED diodách hada, tedy bude postupně rozsvěcovat a zhasínat LED diody tak, že se rozsvítí vždy dioda vedle té, která zhasla. Varianty: 1. jednosměrný zacyklený had - posuv probíhá jen jedním směrem, když dojde na konec, pokračuje znovu od začátku 2. obousměrný navazující had - posunuje se oběma směry 3 Je zřejmé, že v reálné situaci je třeba, aby MCU umělo reagovat na vnější vstupy. Toho se dociluje použitím takzvaných přerušení (interrupt [= přerušení]), které po zadaném impulsu přeruší právě probíhající program a zavolají definovaný podprogram, který ovládá dané přerušení. Po skončení se automaticky vrátí zpět do hlavního programu a pokračuje. Více o přerušení v Příkladu C.

Rozbor Se znalostmi, které již máme si jistě dokážeme představit takové řešení, které nadefinuje postupně hodnotu PADR. To by problém vyřešilo, ale jde o poměrně neelegantní řešení. Lepší bude použít příkaz assembleru pro rotaci RLC [= rotate left through carry = rotuj doleva přes carry], nebo RRC [= rotate right through carry = rotuj doprava přes carry]. Vestavěná reference ( Help > Help on instruction ) ST7VD nám o instrukci RLC říká: Shifts all bits in the destination byte one place to the left. Bit 0 is loaded from the carry flag (C bit) in the CC register. Bit 7 of destination byte is moved into the carry flag. Angličtina použitá v referenci je poměrně jednoduchá, překlad tohoto by zněl: Posune všechny bity v cílovém byte o jedno místo doleva. Bit 0 je načten z carry (C bit) v CC (code condition) registru. Bit 7 z cílového byte je přesunut do carry. Tedy máme příkaz, který nám byte ve tvaru %00000001 bude měnit postupně na %00000010, %00000100,.. To by nám mohlo stačit. Pojďme to tedy zkusit: Verze 1 ;-------------- definice -------------------------- konstanty PADDR_1 equ %10011111 ; pro ladění, zachovaná komunikace s Rlinkem jednicka equ %11111110 ; základní konstatnta do PADR rozsvítí jen jednu LEDku ;-------------- blok paměti RAM -------------------------- ; proměnné pro podprogram wait BYTES segment 'ram0' pr_cekej1 DS.B pr_cekej2 DS.B ;-------------- vlastni program -------------------------- WORDS segment 'rom'.main LD A,#PADDR_1 ; konfigurujeme PA jako výstup LD PADDR,A LD X,#jednicka ; vkládáme konstantu jednicka do registru X SCF ; SCF [= set carry flag = nastav carry] ; nastavujeme 1 do carry, protože až přes něj ; budeme rotovat, tak potřebujeme, aby na bit 0 ; vložilo 1 (zhasnuto) a ne 0. A protože nevíme, ; co tam je, tak do raději nadefinujeme..znova LD PADR,X ; vložíme X do PADR, rozsvítíme bit 0 RLC X ; rotujeme X ; voláme čekání (kdyby to tam nebylo, tak ; bychom ani nepostřehli, že se něco mění ; procesor pracuje na 16MHz a celý program má ; jen několik desítek cyklů JP znova ; voláme znova pro opakování Asi je vidět, že jsme sice splnili variantu 1, ale poněkud nešikovně. Vzhledem k tomu, že rotujeme přes celý registr, tak probíháme i přes výstupy 5 a 6, na kterých je připojen Rlink kvůli ladění. Zkusme to tedy vyřešit tak, aby se rotovalo jen mezi 0-4. Verze 2 Nejjednodušší cestou se zdá být dekrementace nějaké proměnné a testování kdy dosáhne nuly. Budeme potřebovat podmínkový příkaz, kterým je JRNE. Reference nám o něm říká, že provede skok na definovaný podprogram pokud Z=0, nerovná-li se Z (vzpomeňme jde o jeden byt v Code

Condition registru, který se rovná 1, když předchozí operace vyšla nula) nule, pokračuje program dál. Následují konkrétní řešení tučně jsou změny oproti Verzi 1. ;-------------- definice -------------------------- PADDR_1 equ %10011111 PBDDR_1 equ %11011111 jednicka equ %11111110 ;-------------- blok paměti RAM -------------------------- BYTES segment 'ram0' pr_cekej1 DS.B pr_cekej2 DS.B test DS.B ; definujeme si novou proměnnou test ;-------------- vlastni program -------------------------- WORDS segment 'rom'.main LD A,#PADDR_1.zacatek.znova LD PADDR,A LD X,#jednicka SCF LD A,#5 ; do A vložíme číslo 5 LD test,a ; do proměnné test vkládáme obsah A, děláme ; to takhle z důvodu, že procesor neumí provést LD test, ; #4 (když se podíváme do reference, zjistíme, že každá ; operace má přesně definované, s jakým umístěním ; může pracovat LD PADR,X RLC X Verze 3 Příklad B DEC test ; DEC je příkaz pro dekrementaci, odečte od test číslo 1 JRNE znova ; pokud předchozí operace (DEC) skončila na nule, což ; by znamenalo, že jsme už došli od diody 0 do 4 a je ; třeba začít od začátku, tak by nic neuděl a pustil ; program dál. Neskončil-li na nule, opakuje se znova. JP zacatek ; skočí zpět na začátek, kde se znovu nastaví proměnná ; test, hodnota carry a následně přejde do cyklu znova Nyní se zaměříme na splnění varianty 2, tedy hada, který se bude i vracet. Je to poměrně jednoduché, prostě jen za první cyklus s JRNE kontrolou na konci zařadíme další, kde bude použit opačný směr rotace RRC a stejná JRNE kontrola. Kód bude vypadat takhle (tučně opět novinky): ;-------------- definice -------------------------- PADDR_1 equ %10011111 PBDDR_1 equ %11011111 jednicka equ %11111110 ;-------------- blok paměti RAM -------------------------- BYTES segment 'ram0' pr_cekej1 DS.B pr_cekej2 DS.B test DS.B ;-------------- vlastni program -------------------------- WORDS segment 'rom'.main LD A,#PADDR_1

LD PADDR,A.zacatek LD X,#jednicka SCF LD A,#5 LD test,a.znova LD PADR,X RLC X DEC test JRNE znova LD A,#5 ; znovu vložíme 5 do test, aby byl připraven LD test,a ; pro cestu zpět.znovazpet RRC X ; rotujeme X doprava LD PADR,X DEC test JRNE znovazpet JP zacatek ; abychom znovu zinicializovali MCU a nedocházelo ; nám k nějakým problémům (nastavení carry apod.), ; vrátíme se na začátek. Je třeba se nad kódem zamyslet například když bychom vkládali 5 to proměnné test až na začátku podprogramu znovuzpet, tak by nám to moc nefungovalo. Také umístění příkazů RRC a RLC před a za příkaz LD PADR, X má své důvody.