- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 4 von 4

Thema: Programmieren einer Tabelle mit pic 18F2320

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2007
    Beiträge
    5

    Programmieren einer Tabelle mit pic 18F2320

    Anzeige

    Praxistest und DIY Projekte
    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]

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2006
    Beiträge
    25
    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.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2007
    Beiträge
    5
    Ja danke
    hilft mir aber leider nicht weiter da ich in Assembler Programmiere
    trotzdem Danke

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen