Hallooo,
Diegene die al met een PIC controller gewerkt hebben, kennen waarschijnlijk onderstaand stukje code:
...........
MOVF MSGPTR, W ; put the offset in 'W'
CALL MSGTXT ; returns ASCII haracter in 'W'
..........
MSGTXT ADDWF PCL, f ; offset added to PCL
RETLW $48 ; 'H'
RETLW $65 ; 'e'
RETLW $6C ; 'l'
RETLW $6C ; 'l'
RETLW $6F ; 'o'
RETLW *00 .; indicates end Dus met "call" wordt msgtxt opgeroepen, bij de program counter wordt een offset bijgevoegd. Dan wordt de juiste letter in W gezet. Geen probleem tot nu toe.
Ik gebruik dit bij de PIC16F84A, en het werkt, MAAR:
Wat nu mijn probleem is: Wat als msgtxt wat verder weg staat in het programma geheugen? De Program counter telt 13 bits, maar alleen register "PCL" is bereikbaar. PCL zijn de 8 least significant bits, bit(7:0), van de program counter.
Stel nu dat de CALL wordt gedaan op geheugenplaats 0x038 en "MSGTXT" zelf staat op geheugenplaats "0x122". Stel dat de offset die bij PCL wordt bijgeteld '2' is, dan zou de program counter moeten springen naar "0x124" in de tabel!! Echter, dat doet ie NIET!! 
De programcounter springt naar "0x024" in zijn programma geheugen. Dus helemaal naar het begin, ipv in de tabel... Hoe is dit te verhelpen??? Door die offset bij te voegen wordt er blijkbaar geen rekening meer gehouden met de 5 most significant bits van de Program Counter???
(bit(12:8) van de Program counter,deze worden blijkbaar op '0' gezet)
Ik zou geen idee hebben aan wat dit zou kunnen liggen? (En geloof me, het is geen bug in de simulatie...)
Er is ook wel een register "PCLATH" wat de bit(12:8) van de program counter bevat, maar daar valt weinig met uit te voeren blijkbaar:
"The upper byte of the program counter (PCLATH) is not directly accessible. The contens of PCLATH can be transferred to the upper byte of the program counter, but the contents of PC(12:8) is never transferred to PCLATH"
Weet iemand waarover ik het heb?? Weet iemand een oplossing, of een andere manier ??
Veel dankbaarheid bij nuttige hulp!!
Zwabber
k.p.meinesz
Een schizofreen is nooit alleen!
Had dit niet te maken met de geheugen organisatie?
je moet dan naar een ander gebied springen
volgens mij staat hier jouwn probleem+oplossing
ahaaaa, MERCIEKES!!!!!
Da is inderdaad de oplossing
'k Vond da maar nie....
Bedankt eh!! Kan ik weer lustig verder programmeren 
Zwabber
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Op 13 januari 2003 16:20:35 schreef Zwabber:
Weet iemand waarover ik het heb?? Weet iemand een oplossing, of een andere manier ??
Veel dankbaarheid bij nuttige hulp!!
Ik weet precies waar je het over hebt. Ik heb trouwens met veel bewondering je verhaal gelezen want je weet wel waar je het over hebt. Ik heb dit probleem lange tijd geleden ook gehad en je moet best veel kennis hebben van dit soort zaken wil je kunnen ontdekken dat het dit is. Het ontdekken van zo'n fout is al klote.
Een oplossing die je kunt toepassen is zorgen dat de tabel in het lage gedeelte van je ROM zich bevind. Dus onder de 0x100. En dan zet je gewoon op je reset vector (dat is op adres 0x000) 0x100 neer en zet je je normale programma op adres 0x000.
Zo heb je dus onderin het geheugen de tabel en bovenin het geheugen je normale main programma staan. Er is nog een oplossing maar daarvoor moet ik ff diep in me geheugen en de datasheet duiken. Dus misschien dat dat later vanavond nog langskomt maar met deze truc kun je het iig verhelpen. (tenzij je tabel groter is dan 0x100 regels natuurlijk)
[Bericht gewijzigd door Bastiaan op ]
Op 13 januari 2003 19:13:33 schreef Bastiaan:
Ik heb trouwens met veel bewondering je verhaal gelezen...
Dank je 
Een oplossing die je kunt toepassen is zorgen dat de tabel in het lage gedeelte van je ROM zich bevind. Dus onder de 0x100. (tenzij je tabel groter is dan 0x100 regels natuurlijk)
Het probleem was eigenlijk dat een tabel voorbij regel 0x100 begon. Ik had eerst een grote tabel van meer als 0x100 regels, maar heb ze kunnen vervangen door paar kleinere tabellen. Maarja, dan komen die laatste tabellen lager in het geheugen terecht natuurlijk.
Met de app. note die k.p. Meinesz vond, kom ik al een heel eind op weg. Dus nu moet het lukken
Als er nog problemen zijn laat ik het weten.
Bedankt voor de reacties hiere,
Zwabber
k.p.meinesz
Een schizofreen is nooit alleen!
staat ook nog een stuk over op PICLIST.com
staat ook nuttige info in
volgens mij simpeler dan die application note
[Bericht gewijzigd door k.p.meinesz op ]