PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmieren einer Tabelle mit pic 18F2320



dennse159
11.05.2007, 07:21
moin leute ich hab da Ein Problem
ich möchte mit dem Pic eine Temperatur messung durchführen.
AD Wandlung hab ich jezz soweit hinbekommen jezz will ich aber die Werte verabeiten und in ASCII code ausgeben. da habe ich mir gedacht das ich die mit einer tabelle realisieren will... Es gibt ja einmal die tabellen funktion mit dem Programmcounter. ich habe aber auch im Datenblatt etwas von einer funktion gelesen die Table read bzw. Table write heißt. Kann mir jemand was dazu sagen wie das funktioniert? Oder gibt es da noch andere möglichkeiten?
Würd mich freuen wenn ihr mir weiter helfen könntet.[/shadow]

Adonai
11.05.2007, 10:27
Die einfachste Möglichkeit wäre ein Array zu programmieren. Wenn du in C programmierst und den MCC18 Compiler von Microchip verwendest geht das sehr einfach.


int array[8]; //Array mit 8 Byte (eindimensional)
int zeiger; //Pointer des Arrays

zeiger = 3; //Pointer setzen
PORTB = array[zeiger]; //Ausgabe des Byte Nummer 3


So kannst du in einer Schleife den Wert des Zeiger ändern und deine Temperaturen speichern und auch wieder ausgeben oder weiter verarbeiten.

dennse159
11.05.2007, 10:40
Ja danke
hilft mir aber leider nicht weiter da ich in Assembler Programmiere
trotzdem Danke

PICture
12.05.2007, 07:42
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


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