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!
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
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
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
Szia!
Köszönöm az észrevételt! Beírtam a címbe fordító típusát.
Üdv:
Gyula
0