Stránka 1 z 1

PIC16f877A pamäť

Napsal: 06 úno 2007, 23:25
od mikollar
Zdravim, napisal som dost dlhy program (cca 4000 riadkov - prikazov) ale neviem ci som uz prekrocil pamat procesora alebo co sa deje. Do urciteho miesta programu vsetko funguje ako ma, ale ak sa splni podmienka program vykoná skok prikazom GOTO skoro na koniec programu, to by mal teorteciky spravit, ale on to nespravi, vlastne nespravi nic a zasekne sa, program je na 100% dobry (mozno treba nieco nastavit aby sa dalo skocit), ak som zmazal zaciatok programu a skratil ho tak tento skok na koniec programu prebehol v poriadku, ako zistim, ze som prekrocil pamat procesora, ze uz do neho nic nevopcham? Pri programovani a overovani nahrateho programu v uP mi vypise ze je vsetko OK, podla tohto by este pamäť mala stacit. Tak ja tomu nechapem ze co s tym je. Treba nieco nastavit alebo je uz naozaj procesor plny a nic viac don nevlezie?

P.S. ak som pri programovani 16f84 prekrocil pamät, tak s tym istym programatorom mi to vyhodilo chybu pri overovani nahrateho programu do uP

Dakujem za rady

Napsal: 07 úno 2007, 08:51
od ViPali
Predpokladám, že asembler, pretože prekladač by ťa upozornil na preplnenie pamäti.
Ak asembler, tak potom 877 má kapacitu 8000 príkazov, tzn, že si niekde v polovici.
CALL a GOTO je v tvare 10 0kkk kkkk kkkk a 10 1kkk kkkk kkkk, kdek je konkretne číslo určujúce adresu kam skočiť. Je to len 11bitov, preto je možné priamo skočiť len v stránke 0. t.j. 0 - 2048 byt.
Keď chceš skočiť do 1. 2. alebo 3. stránky musíš pred inštrukciou CALL a GOTO pripraviť 12. a 13. bit (je to 3. 4. bit PCLATH).

Pozri Datašit kap. 2.3 je tam aj príklad skok do 1. stránky.

Napsal: 07 úno 2007, 11:36
od jezevec
Na stránce www.copsu.cz/mikrop/?default=czmanualy
najdeš datasheet v češtině.

Napsal: 07 úno 2007, 14:47
od mikollar
dakujem dakujem zachranili ste ma, keby to neslo tak uz by som to nestihol prerobit, veeeeeelmi dakujem.
:pray: