Newsgroup: it.hobby.elettronica.digitale
Titolo: File HEX pic, dubbio su indirizzi

Ciao, vorrei provare a scrivere un bootloader seriale per il pic 16F877. 
Il dubbio che mi e' venuto riguarda gli indirizzi di memoria presenti 
nel file HEX rispetto a quelli presenti nel listing dell'assemblaggio. 
Questi secondi(come pure gli ORG e gli indirizzi di salto di CALL e GOTO 
del programma) si riferiscono a word di programma, mentre gli indirizzi 
nel file HEX riguardano i singoli bytes e pertanto risultano essere 
esattamente il doppio.
Ora, quando devo andare a impostare gli indirizzi nei registri 
EEADRH:EEADR non sono piu' sicuro se devo ragionare in termini di words 
oppure dei singoli bytes. Di fatto si scrive una word alla volta, ma nel 
manuale dice che il range indirizzi valido per un 877 (che ha 8192 word 
programma) va da 0000H a 3FFFH... cioe' 16K.
In sostanza se voglio scrivere una word all'indirizzo 3 di programma, 
nel file HEX e' riportata come 2 bytes da scrivere a partire 
dall'indirizzo 6:
Il sorgente:
ORG 0003H
bcf STATUS,RP0
L'assemblato (indirizzo programma / codice):
0003 1283
Il file HEX(numero bytes / indirizzo / tipo record / codici / checksum):
:02 0006 00 83 12 63
In EEADRH:EEADR dovro' scrivere 3 o 6 ??? o_O
ciao
Claudio_F

 
so che per i pic24xxx devi usare l'indirizzo a word; con il tuo micro 
non lo so, però puoi provare con il simulatore che trovi in MPLAB -> 
debugger e capisci subito.
hth
ciao

 debugger e capisci subito.
Grazie per la risposta. Il debugger l'ho provato pochissimo e non mi e' 
chiaro come dovrei procedere esattamente, ma avendo gia' in piedi il 
programma di comunicazione alla fine mi e' venuto piu' rapido farmi dire 
dal pic cosa leggeva dai primi 3 indirizzi e confrontarlo con l'HEX.
Confermo che anche l'877 lavora a words, 0 punta i primi due bytes, 1 
punta i secondi due ecc, quindi per l'HEX basta dividere tutti gli 
indirizzi per due e prendere i bytes dati due alla volta ;)
Resta la nota sul datasheet, a questo punto direi errata, che parla di 
indirizzi fino a 2FFFH mentre si fermano a 1FFFH...
ciao
Claudio_F

 
avendo qualche esperienza di Microchip non mi stupirebbe, mi stupisce 
però che un errore del genere sia ancora non corretto dopo tutti gli 
anni da cui quel micro è in produzione.

 anni da cui quel micro è in produzione.
Azz, il datasheet del 2003 e' corretto, io stavo guardando una versione 
che mi ero stampato nel 2001... Ora tutto torna ;)
ciao
Claudio_F

 Ora tutto torna ;)
No, come non detto, lo hanno corretto sull' 877A, ma il data dell'877 
riporta ancora 3FFF.

Claudio_F ha scritto:

Aggiorno sul lavoro ;)
Finalmente riesco a scrivere correttamente nella flash, ma solo dopo 
aver sbattuto la testa sulla routine proposta sul datasheet (DS39582B 
pagina 38) che contiene ben due errori, uno e' una svista (un'istruzione 
per un'altra), l'altro un errore di logica sull'uscita dall'unico ciclo 
presente.
Per il primo invece di: MOVF DATAADDR,W va scritto: MOVLW DATAADDR.
Il secondo riguarda l'uscita dal ciclo, invece di:
MOVF EEADR,W
ANDLW 3
XORLW 3
BTFSC STATUS,Z
GOTO LOOP
va scritto:
MOVF EEADR,W
ANDLW 3
BTFSS STATUS,Z
GOTO LOOP
Magari a qualcuno puo' essere utile.
ciao
Claudio_F