<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
11.3. Szabványos programfájl-formátumok
A közepes teljesítményű PIC mikrovezérlők IBM PC kompatibilis személyi számítógépről vezérelhető programozó készülékei általában az Intel 8, vagy 32 bites hexadecimális formátumait használják. A Microchip dokumentációkban ezekre az INHX8M, illetve INHX32 azonosítókkal hivatkoznak. A fájlok kiterjesztése: *.HEX.
INHX8M adatfájl
A szöveges adatfájl sorai a következő felépítésűek:
Minden sor egy kettőspont karakterrel kezdődik.
Az SS karakterek adják meg a sorban található (kétjegyű) adatbájtok számát. A magasabb helyiértékű számjegy van elöl. Ez a hexadecimális szám korlátozza az egy sorban elhelyezhető adatbájtok számát 255-re, vagyis az elhelyezhető 14 bites mikrovezérlő utasítások számát 127-re.
A CCCC karakterek adják meg a sor első adatbájtjának az adatfájlon belüli címét. A magasabb helyiértékű számjegy van elöl. A legelső adatbájt címe: 0000. A maximális cím: FFFF, ami egy fájlon belül 65536 (kétjegyű) adatbájt, vagyis 32768 mikrovezérlő utasítás elhelyezését teszi lehetővé.
A TT karakterek adják meg az adatsor típusát. Ebből kétféle fordulhat elő: a 00 érték adatsort, a 01 érték befejező sort jelöl. A 01 típusú zárósorban nincs adatmező. (A többi értéknek ennél a formátumnál nincs szerepe, de más, kiterjesztett címtartományú formátumoknál egyéb típusok is felhasználásra kerülnek.)
Az AA karakterek a kétjegyű adatbájtok. A magasabb helyiértékű számjegy van elöl. Egy 14 bites mikrovezérlő utasítás tárolásához két adatbájtra, vagyis négy hexadecimális karakterre van szükség.
Az EE ellenőrző összeg karakterek a sor előző (kétjegyű) elemeinek összege utolsó 8 bitjének kettes komplemensét jelenítik meg hexadecimális számokkal.
Egy egyszerű példaprogram:
list | p=16f84a | |
movlw | 5 | |
start | movlw | 1 |
movlw | 2 | |
movlw | 3 | |
movlw | 4 | |
goto | start | |
end |
Az MPASM assembler programmal történt fordítás eredménye:
:0C000000053001300230033004300128CC :00000001FF |
A *.HEX fájl első sora tartalmazza a 6db programutasítást 12 (0C) bájton. A második sor a fájl végét jelző zárósor.
Az utasítások elhelyezkedése a soron belül:
Az első utasítás az adatsorban a 0530 hexadecimális számjegyekkel szerepel, de a tényleges utasítás ebből az adatbájtok felcserélésével jön létre: 3005, binárisan: 11 0000 0000 0101, ami a MOVLW 5 utasításnak felel meg.
Az első adatsor ellenőrző összegének kiszámítása:
0C+00+00+00+05+30+01+30+02+30+03+30+04+30+01+28 |
= 134 |
= 1 0011 0100 |
az alsó bájt: 0011 0100 |
negálva 1100 1011 |
+ 1 |
= 1100 1100 |
= CC |
Egy hosszabb adatfájl:
:10000000053001300230033004300530063007304F :10001000083009300A300B300C300D300E300F3004 :10002000000000000030AA300301FF300301EE3071 :0E0030000301DD300301CC300301BB30012899 :00000001FF |
INHX32 adatfájl
A fájl felépítése az INHX8M adatformátumhoz hasonló, de annál sokkal nagyobb adatmennyiség tárolására képes.
A szöveges adatfájl sorai a következő felépítésűek:
Minden sor egy kettőspont karakterrel kezdődik.
Az SS karakterek adják meg a sorban található (kétjegyű) adatbájtok számát. A magasabb helyiértékű számjegy van elöl. Ez a hexadecimális szám korlátozza az egy sorban elhelyezhető adatbájtok számát 255-re, vagyis az elhelyezhető 14 bites mikrovezérlő utasítások számát 127-re.
A CCCC karakterek adják meg a sor első adatbájtjának a lineáris és szegmens cím által kijelölt adatrészen belüli címét. A magasabb helyiértékű számjegy van elöl. A legelső adatbájt címe: 0000. A maximális cím: FFFF, ami egy szegmensen belül 65536 (kétjegyű) adatbájt, vagyis 32768 mikrovezérlő utasítás elhelyezését teszi lehetővé.
A TT karakterek adják meg az adatsor típusát:
ˇ
a 00 érték adatsort jelöl;
ˇ
a 01 érték adatmező nélküli befejező sort jelöl;
ˇ
a 02 érték kiterjesztett szegmens címet jelöl, amelyet 4 bittel balra tolva kell hozzáadni a CCCC szegmensen belüli címhez, hogy kiadódjon egy adatsor első adatának tényleges címe (ha a lineáris cím 0000h);
ˇ
a 04 érték kiterjesztett lineáris címet jelöl, amelyet 16 bittel balra tolva kell hozzáadni a szegmens címhez és a CCCC szegmensen belüli címhez, hogy kiadódjon egy adatsor első adatának tényleges címe;.
Az AA karakterek a kétjegyű adatbájtok. A magasabb helyiértékű számjegy van elöl. Egy 14 bites mikrovezérlő utasítás tárolásához két adatbájtra, vagyis négy hexadecimális karakterre van szükség.
Az EE ellenőrző összeg karakterek a sor előző (kétjegyű) elemeinek összege utolsó 8 bitjének kettes komplemensét jelenítik meg hexadecimális számokkal.
Egy adatfájlrészlet a címszámítás bemutatására:
:020000040018E2 :0200000212FFEB :040100000530013095 :00000001FF |
Amiből kiolvasható:
ˇ
a kiterjesztett lineáris cím: 0018 0000h;
ˇ
a kiterjesztett szegmens cím: 0001 2FF0h;
ˇ
és az adatsor első elemének szegmensen belüli címe: 0100h.
Ezeket összeadva a 05 értékű első adatbájt 32 bites címe: 0019 30F0h.
A 30 értékű másodiké: 0019 30F1h.
A 01 értékű harmadiké: 0019 30F2h.
A 30 értékű negyediké: 0019 30F3h.
A 32 bites címeket kettővel osztva kiadódik:
hogy a 3005 kétbájtos kódolt utasítás a 825 464. decimális programmemória címre kerül;
a 3001 utasítás pedig a 825 465. programmemóriacímre.
(Ez a címszámítási példa csak szemléltetésül szolgál, mivel a közepes teljesítményű PIC mikrovezérlők programmemóriája a 13 bites programszámláló miatt csak maximálisan 8192 memóriahelyet tartalmazhat.)
A fent már felhasznált egyszerű példaprogram:
list | p=16f84a | |
movlw | 5 | |
start | movlw | 1 |
movlw | 2 | |
movlw | 3 | |
movlw | 4 | |
goto | start | |
end |
Az MPASM assembler programmal történt fordítás eredménye:
:020000040000FA :0C000000053001300230033004300128CC :00000001FF |
Az első sor a 0000 kezdőcímet adja meg. A második sor tartalmazza a 6db programutasítást 12 (0C) bájton. A harmadik sor a fájl végét jelző zárósor.
Az utasítások elhelyezkedése a soron belül:
Az első utasítás az adatsorban a 0530 hexadecimális számjegyekkel szerepel, de a tényleges utasítás ebből az adatbájtok felcserélésével jön létre: 3005, binárisan: 11 0000 0000 0101, ami a MOVLW 5 utasításnak felel meg.
A második sor ellenőrző összegének kiszámítása:
0C+00+00+00+05+30+01+30+02+30+03+30+04+30+01+28 |
= 134 |
= 1 0011 0100 |
az alsó bájt: 0011 0100 |
negálva 1100 1011 |
+ 1 |
= 1100 1100 |
= CC |
Egy hosszabb adatfájl:
:020000040000FA :10000000053001300230033004300530063007304F :10001000083009300A300B300C300D300E300F3004 :10002000000000000030AA300301FF300301EE3071 :0E0030000301DD300301CC300301BB30012899 :00000001FF |
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>