Jak poprawnie wywoływać podprogramy w PIC16F877 z pamięcią 8k ? problem z adresem?
programowanie PIC-a
From: "Andrzej Wudarczyk" <psm_zze_at_nospam_obr-skarzysko.com.pl>
Subject: programowanie PIC-a
Date: Wed, 11 Apr 2001 12:39:08 +0200
czasem podczas wywolania podprogramu laduje pod zupelnie innym adresem niz
wywolany;
pracuje z procesorem PIC16F877 z pamiecia 8k zorganizowana w cztery strony
moj program jest krociutki, nie przekracza adresu 4ACh wiec miesci sie w
obrebie
1 strony (7FF)
0011 Tab_ASCII_cyfra
addwf PCL,F
retlw xxh
retlw xxh
...
...
026F call Tab_ASCII_cyfra
probowalem umieszczac tablice na koncu programu(przy krotkim programie nie
ma problemu), potem na poczatku przestrzeni adresowej (tak jak przyklad
powyzej), potem jeszcze w srodku programu.
Obecnie call powoduje skok w inny obszar np. 0040, a wczesniej zdarzal sie
tez niewlasciwy
powrot po retlw.
prosze o pomoc w tym temacie?
czy to zasieg call, czy wlasciwosc PCL, czy cos innego.
jak konstruowac program aby skoki odbywaly sie wlasciwie?
Andrzej.
From: antispam_verox_at_nospam_a4.pl (Verox)
Subject: Re: programowanie PIC-a
Date: 11 Apr 2001 11:00:25 GMT
On Wed, 11 Apr 2001 12:39:08 +0200, Andrzej Wudarczyk napisał:
[...]
ma problemu), potem na poczatku przestrzeni adresowej (tak jak przyklad
powyzej), potem jeszcze w srodku programu.
Obecnie call powoduje skok w inny obszar np. 0040, a wczesniej zdarzal sie
tez niewlasciwy
powrot po retlw.
prosze o pomoc w tym temacie?
czy to zasieg call, czy wlasciwosc PCL, czy cos innego.
jak konstruowac program aby skoki odbywaly sie wlasciwie?
moja rada, ustaw tablice od jakiegoś ,,równego'' adresu - np 0x200
i teraz tak - trzeba pamiętać o tym że pcl ma tylko 8 bitów - starsze bity
licznika rozkazów trzymane są w PCLATH.
teraz robisz tak:
movlw 0x02
movwf PCLATH
movlw offset_w_tablicy
call tablica
tablica:
addwf pcl,f
org 0x200
retlw costam...
Pozdrawiam,
--
[verox <at> a4 <dot> pl] vy 73! de SP9UOB
Proud to be 100 percent microsoft free. op. Tomek
From: "JMD" <jmd_at_nospam_box43.gnet.pl>
Subject: Re: programowanie PIC-a
Date: Wed, 11 Apr 2001 20:03:37 +0200
Użytkownik "Andrzej Wudarczyk" <psm_zze_at_nospam_obr-skarzysko.com.pl> napisał w
wiadomości news:9b1c6k$p3a$1_at_nospam_news.tpi.pl...
czasem podczas wywolania podprogramu laduje pod zupelnie innym adresem niz
wywolany;
pracuje z procesorem PIC16F877 z pamiecia 8k zorganizowana w cztery strony
moj program jest krociutki, nie przekracza adresu 4ACh wiec miesci sie w
obrebie
[..]
Obecnie call powoduje skok w inny obszar np. 0040, a wczesniej zdarzal sie
tez niewlasciwy
powrot po retlw.
prosze o pomoc w tym temacie?
czy to zasieg call, czy wlasciwosc PCL, czy cos innego.
jak konstruowac program aby skoki odbywaly sie wlasciwie?
Andrzej.
Zajrzyj do noty aplikacyjnej Microchip'a:
AN556 - Implementing a Table Read
Tam jest wszystko wyjaśnione.
Ogólnie tablica RETLW X powinna leżeć w obrębie
256B strony pamięci programu (nie myl z bankiem
2KB) - jeżeli nie to należy użyć metod opisanych
w AN556. Błędne skoki są spowodowane
specyficznym wyznaczaniem adresu przez
instrukcje które jako rejestru przeznaczenia używają
PCL
JMD