Hallo dennse159!
Es ist alles in Datenblatt erklärt, deswegen möchte ich nur ein praktisches Beispiel zeigen. Die Tabelle besteht aus im Programmspeicher abgelegten 16-bit Werten die als "dw" (data word) bezeichnet sind. Beispielweise sie fängt bei der Adresse 7B00h an:
ORG 0x7B00
dw 0x447C
dw 0x203A
dw 0x005B
u.s.w.
Es gibt 3 Pointer (Register) die auf bestimmter Byte in der Tabelle Zeigen: TBLPTRU, TBLPTRH und TBLPTRL. In diesem Fall TBLPTRU=0, TBLPTRH=7Bh und in TBLPTRL wird der Wert von W-Register geladen. Also in W-Register wird ein Wert geladen, der auf bestimmter Byte in der Tabelle zeigt. Nach dem Befehl "tblrd*" wird der Byte aus der Tabelle sich im Register TABLAT befinden und kann z.B. ins W-Register kopiert werden. Es müssen noch 2 Bits im EECON1 Register entsprechend definiert werden. Im Code ist ein praktischer Auschnitt aus einem Programm. Zur Verdeutlichung:
Wert im TBLPTRL und im TABLAT
0.......................................7Ch
1.......................................44h
2.......................................3Ah
3.......................................20h
4.......................................5Bh
5.......................................00h
Ich habe nur Tabellen, die bis zum 128 dw (256 Bytes) enthalten haben, benutzt. Deswegen weiss ich nicht wie es bei längeren geht, ob sich das TBLPTRH selbst erhöht, oder muss dort höheren Wert geladen werden, wenn das TBLPTRL überläuft. Wenn man "tblrd*+" benutzt, wird das TBLPTRH automatisch erhöht.
MfG
Code:
CharOut movwf TBLPTRL ; Wert aus W-Register ins TBLPTRL
movlw 0x7B
movwf TBLPTRH
clrf TBLPTRU
bsf EECON1,EEPGD
bcf EECON1,CFGS
ByteRead tblrd*
movf TABLAT,0 ; Wert aus TABLAT ins W-Register
Lesezeichen