You are here

PIC 16F1939 program memória-lap váltás MPLink 4.35 fordítóval (MEGOLDVA)

5 posts / 0 new
Last post
cape-t
cape-t picture

Sziasztok!

Autodidakta módon tanulgatom a PIC progamozást, ezért lehet, hogy banális a kérdés:
A fenti kontrollert és fejlesztőkörnyezetet használom, és betelt az első 2k memória. Azt kiderítettem, hogy CALL illetve GOTO utasítások előtt a PCLATH regiszter 3. 4. (és mivel ennek a típusnak 16k memóriája van, gondolom az 5.) bitjeit kell állítgatnom, ha a hivatkozott hely másik lapon van.

Kb. az alábbiak szerint szeretném szervezni a programomat.

PAGE 0
       főprogram
            ...
            ...

PAGE 1
      szubrutinok
             ...
             ...
end

A kérdés, konkrétan hogyan tudom definiálni a (PAGE 0 ill. PAGE 1) lapokat az MPLAB-ban úgy, hogy az MPLink 4.35 fordító megértse?

Előre is köszönök minden segítséget!

Üdv:
Gyula

szerk:
Az "org 0x800" direktívát beírva működik a dolog!
 

Comments
Jaca
Jaca picture
*****

Szia!

Valamikor küzdöttem ilyennel. Ha a szubrutinok elé beírod, hogy org 0x200, akkor az attól a memóriaterülettől fog kezdődni. Ez látszani fog, ha megnézed a hex filet-t. 
Viszont ha jól rémlik, akkor a GOTO és CALL utasításoknál ez nem okoz gondot a fordítónak, én csak akkor szívtam vele, mikor táblát akartam olvasni, és az lógott át egyik bankból a másikba.
Egy picdisassemblerrel készült programrészlet (a hex file-ból csinált asm fájlt), és jól látszik, hogy a goto és call utasítások is 13 bitesek legalább:
LADR_0x004E
    BSF PORTC,3          ; $ PORTC - TRISC
    MOVLW 0xFF           ;   b'11111111'  d'255'
    CALL LADR_0x0160
    BCF PORTC,3          ; $ PORTC - TRISC
    MOVLW 0xFF           ;   b'11111111'  d'255'
    CALL LADR_0x0160
    DECFSZ LRAM_0x2F,F
    GOTO LADR_0x004E

Egy kicsit belemásztam, hogy is van ez a címzés. 2k felett még nem nagyon jártam. 
A szubrutinokat érdemes ilyenkor felrakni a memória felsőbb részébe. Ehhez az org parancs kell, pl:
org 0x800 
Delay_routin
        movlw 0x1f
.
.
Ez a szubrutin már a második bankban lesz, az biztos, hiszen az első sora a 0x800-as memóriacímre fog kerülni a PIC-ben. Hogy ne kelljen minden egyes hívásnál PCLATH-et írogatni, még a 0-s bank elejére csinálj egy ugrótáblát, ahol fel van sorolva az összes szubrutin:
Delay_routin_jump
      BSF PCLATH,3
      CALL  Delay_routin
      return

Egy kis irodalom is hozzá:
http://www.t-es-t.hu/elokep/pic/felhkk/kk/sz1001.htm

http://www.t-es-t.hu/elokep/pic/felhkk/kk/tartal.htm

0

cape-t
cape-t picture

Szia Jaca!

Köszi Neked is! Holnap kipróbálom és referálok.

Ezt az oldalt én is megtaláltam. Még tanulmányozom...

szerk:
Az "org 0x800" a megoldás! Működik a dolog. Köszönöm!

Üdv:
Gyula

0

ty
ty picture

Sajnos a válaszban nem tudok segíteni.
A kérdésed MPLab Assembler-re vonatkozik, a címet érdemes lenne ennek megfelelően javítani.
Az MPLab egy keretrendszer, ami alatt többféle fordító is működik, pl. C fordítók is.

 

0

cape-t
cape-t picture

Szia!

Köszönöm az észrevételt! Beírtam a címbe fordító típusát.

Üdv:
Gyula

0