Jak poprawnie wywoływać podprogramy w PIC16F877 z pamięcią 8k ? problem z adresem?

programowanie PIC-a





Poprzedni Następny
Wiadomość
Spis treści
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.



Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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