Vissza a főoldalra    Vissza a PIC főoldalra

<< 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:

:SSCCCCTTAA ... AAEE

      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:

:0C000000053001300230033004300128CC

      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

Vissza a lap tetejére


 

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:

:SSCCCCTTAA ... AAEE

      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:

:0C000000053001300230033004300128CC

      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 >>

Vissza a főoldalra    Vissza a PIC főoldalra