Vissza a főoldalra    Vissza a PIC főoldalra

<< Előző oldal   Vissza a tartalomjegyzékhez   Következő oldal >>

 


11.4. Assembly programozás


Programozási alapfogások
Algoritmusok


      A mikrovezérlők a programmemóriájukban elhelyezett utasítássort hajtják végre. Az utasítások tulajdonképpen egy számjegyekből álló kódot és esetenként egy vagy két számot tartalmaznak, amelyek a mikrovezérlő működését vezérlik.
      A program tehát egy 14 bites számokból álló számsorozat. A programkészítés így egy meghatározott számsorozat összeállítását jelenti. A gépi kódú programozás során a programozó (személy) közvetlenül ezt a számsorozatot írja meg.
      A közepes teljesítményű PIC mikrovezérlők által felismert utasítások számkódjait és ezek működését a 9. fejezet mutatja be.
      A gépi kódú programozás jellemzői:
     ˇ a lehető legrövidebb program;
     ˇ gyors működés;
     ˇ a lehetőségek maximális kihasználhatósága;
     ˇ a programírás sok időt vesz igénybe;
     ˇ a programlista értelmezése lassú;
     ˇ a hibakeresés nehéz.
      A gépi kódú programozás hátrányai főképpen a kettes számrendszerbeli (bináris) 14 bites számok kevéssé szemléletes voltának következményei. A számok összehasonlítása és megjegyzése nehéz. A gépi kódú programokat ezért könnyebb a tizenhatos számrendszer (hexadecimális) számjegyeivel rögzíteni és így dolgozni velük.
      A gépi kódú programok írásakor a programozónak kell a programelágazások címeit az utasításokba beírni. A program módosításakor, bővítésekor ezek a címek megváltoznak, vagyis a programozónak az összes címet át kell írnia.
      A gépi kódú programok írása és szerkesztése méretük növekedésével aránytalanul nehezebbé válik.

      A gépi kódú programozás előnyeit megtartja, de legnagyobb hátrányait megszünteti az assembly programozás. Az assembly programozás esetén szükség van egy számítógépes (például IBM PC kompatibilis) fejlesztői környezetre, amelyben egy egyszerű szövegszerkesztő és egy, úgynevezett Assembler fordítóprogram segítségével hozható létre a már közvetlenül a mikrovezérlőbe programozható utasítássorozat.
      A mikrovezérlő utasításainak egy-egy rövid, de egyértelmű szöveges azonosító felel meg, ami a programírást és a programlista értelmezését nagyban megkönnyíti. A program- és adatmemória címek is szöveges azonosítókkal láthatók el, aminek alapján az Assembler program végzi el a címszámítást.

      A közepes teljesítményű PIC mikrovezérlők programfejlesztéséhez több, egymástól különböző Assembler fordítóprogram is beszerezhető. Ezekről nyújt rövid összefoglalást a 11.1. fejezet. Ezek a fordítóprogramok a fent leírt alapfeladatokon kívül általában számos többletszolgáltatást nyújtanak.
      A következő alfejezetekben az assembly programozási fogások bemutatásakor a PIC mikrovezérlők utasításkészlete a Microchip MPASM Assembler program azonosítóival van szemléltetve. A közepes teljesítményű PIC mikrovezérlők által felismert utasítások kinyomtatható összefoglaló táblázata a 9.2. fejezetben található meg.

      Az assembly nyelvű programírás megkezdése előtt tisztázni kell:
     ˇ a mikrovezérlő kivezetéseinek feladatait, vagyis meg kell szerkeszteni az alkalmazás kapcsolási rajzát;
     ˇ a mikrovezérlő regiszterkiosztását, hogy azonosíthatóak legyenek a program által felhasznált általános célú adatregiszterek;
     ˇ a programmemória méretét, ugyanis a programnak el kell férnie benne.

Vissza a lap tetejére

      Assembly programozási alapfogások:

ˇ Értékadás:
     ˇ a W munkaregiszter értékének beállítása;
     ˇ adatregiszter értékének beállítása;
     ˇ a W munkaregiszter nullázása;
     ˇ adatregiszter értékének nullázása.
ˇ Adatmozgatás:
     ˇ a W értékének átírása egy adatregiszterbe;
     ˇ adatregiszter értékének átírása W-be;
     ˇ adatregiszter értékének átírása egy másik adatregiszterbe;
     ˇ adatregiszter és W értékének cseréje;
     ˇ két adatregiszter értékének cseréje;
     ˇ adatregiszter alsó és felső 4 bitjének cseréje.
ˇ Konvertálás:
     ˇ kettes komplemens képzése;
     ˇ kettes komplemens visszaállítása.
ˇ Számtani műveletek:
     ˇ 8 bites összeadás;
     ˇ 8 bites kivonás;
     ˇ adatregiszter értékének növelése 1-gyel;
     ˇ adatregiszter értékének csökkentése 1-gyel;
     ˇ W értékének növelése 1-gyel;
     ˇ W értékének csökkentése 1-gyel.
ˇ Logikai műveletek:
     ˇ W bitenkénti negációja;
     ˇ W és konstans bitenkénti "ÉS" kapcsolata;
     ˇ W és konstans bitenkénti "VAGY" kapcsolata;
     ˇ W és konstans bitenkénti "Kizáró-VAGY" kapcsolata;
     ˇ adatregiszter bitenkénti negációja;
     ˇ adatregiszter és W bitenkénti "ÉS" kapcsolata;
     ˇ adatregiszter és W bitenkénti "VAGY" kapcsolata;
     ˇ adatregiszter és W bitenkénti "Kizáró-VAGY" kapcsolata.
ˇ Maszkolás:
     ˇ egyes bitek kiválasztása/"0"-ra állítása;
     ˇ egyes bitek "1"-re állítása;
     ˇ egyes bitek ellentétesre változtatása.
ˇ Bitműveletek:
     ˇ egy bit "0"-ra állítása;
     ˇ egy bit "1"-re állítása;
     ˇ egy bit ellentétesre változtatása;
     ˇ bit másolása;
     ˇ bit negáltjának másolása;
     ˇ két bit "ÉS" kapcsolata;
     ˇ két bit "VAGY" kapcsolata;
     ˇ két bit "Kizáró-VAGY" kapcsolata;
     ˇ bitvizsgálat.
ˇ Eltolás, forgatás:
     ˇ bájt forgatás balra C-n keresztül;
     ˇ bájt forgatás jobbra C-n keresztül;
     ˇ bájt forgatás balra;
     ˇ bájt forgatás jobbra;
     ˇ alsó és felső félbájt cseréje;
     ˇ eltolás balra;
     ˇ eltolás jobbra;
     ˇ bájt bitsorrend felcserélése;
     ˇ bitpárok felcserélése.
ˇ Összehasonlítás:
     ˇ adatregiszter és konstans egyezőségének vizsgálata;
     ˇ két adatregiszter egyezőségének vizsgálata;
     ˇ adatregiszter és konstans összehasonlítása;
     ˇ két adatregiszter összehasonlítása;
     ˇ adatregiszter tartományon belül esésének vizsgálata;
     ˇ két bit összehasonlítása.
ˇ Feltétel nélküli elágazás:
     ˇ ugrás közvetlen címzéssel;
     ˇ ugrás közvetett címzéssel;
     ˇ szubrutinhívás.
ˇ Feltételes elágazás:
     ˇ bit állapottól függő elágazás;
     ˇ léptetett regiszter állapotától függő elágazás;
     ˇ regiszter értékétől függő elágazás;
     ˇ értéktől függő többszörös elágazás;
     ˇ elágazás regiszter túlcsordulásra;
     ˇ elágazás félbájtos túlcsordulásra;
     ˇ elágazás regiszter nulla értékénél;
     ˇ megszakítások.
ˇ Szubrutinhívás
ˇ Ciklusok:
     ˇ hátultesztelő ciklus;
     ˇ elöltesztelő ciklus;
     ˇ előre számláló léptető ciklus;
     ˇ hátra számláló léptető ciklus.
ˇ Megszakítások
ˇ Késleltetések:
     ˇ rövid késleltetések NOP utasításokkal;
     ˇ 8 bites késleltető ciklus;
     ˇ 16 bites késleltető ciklus;
     ˇ 24 bites késleltető ciklus;
     ˇ 32 bites késleltető ciklus;
     ˇ n·8 bites késleltető ciklus;
     ˇ aktív késleltetés;
     ˇ késleltetés 8 bites hardver számlálóval;
     ˇ késleltetés 16 bites hardver számlálóval;
     ˇ késleltetés SLEEP módban.
ˇ Készenléti üzemmód
ˇ WDT (Watchdog Timer)

Vissza a lap tetejére

      Programozási algoritmusok:

BCD/bináris, bináris/BCD átalakítás
ˇ 8 bit bináris/2 jegyű BCD átalakítás
ˇ 8 bit bináris/3 jegyű BCD átalakítás
ˇ 16 bit bináris/5 jegyű BCD átalakítás
ˇ 24 bit bináris/7 jegyű BCD átalakítás
ˇ 32 bit bináris/10 jegyű BCD átalakítás
ˇ 2 jegyű BCD/8 bit bináris átalakítás
ˇ 3 jegyű BCD/8 bit bináris átalakítás
ˇ 3 jegyű BCD/16 bit bináris átalakítás
ˇ 4 jegyű BCD/16 bit bináris átalakítás
ˇ 5 jegyű BCD/16 bit bináris átalakítás
ˇ 5 jegyű BCD/24 bit bináris átalakítás
ˇ 7 jegyű BCD/24 bit bináris átalakítás
ˇ 10 jegyű BCD/32 bit bináris átalakítás

      Programozási algoritmus-gyűjtemények:

     ˇ AN526 - 8 bites szorzás, 16 bites eredmény; 16 bites szorzás, 32 bites eredmény; 32 bites fixpontos szám osztása 16 bites számmal; 16 bites fixpontos szám osztása 16 bites számmal; 16 bites fixpontos szám osztása 8 bites számmal; 16 bites összeadás; 16 bites kivonás; BCD/bináris átalakítás; Bináris/BCD átalakítás; kétjegyű BCD összeadás; kétjegyű BCD kivonás; 16 bites szám négyzetgyöke;
     ˇ AN575 - lebegőpontos rutinok: átalakítás egész számmá és vissza; összeadás, kivonás, szorzás, osztás;
     ˇ AN617 - fixpontos szorzás/osztás rutinok: 8x8, 16x8, 16x16, 24x16, 24x24, 32x16, 32x24, 32x32; 8/8, 16/8, 24/16, 24/24, 32/16, 32/24, 32/32;
     ˇ AN660 - lebegőpontos rutinok: négyzetgyök, ex, 10x, ln(x), lg(x), sin(x), cos(x), xy, összehasonlítás, véletlen egész;
     ˇ DD0070 - BCD/decimális átalakítás;
     ˇ DD4007 - BCD korrekció;
     ˇ TB028 - a hét napjának meghatározása.

  Tudomány és Technika (test@t-es-t.hu)


 

<< Előző oldal   Vissza a tartalomjegyzékhez   Vissza a lap tetejére   Következő oldal >>

Vissza a főoldalra    Vissza a PIC főoldalra