-
assembler 'datenbank'
hi, gibt es die möglichkeit in assembler eine art datenbank anzulegen und zu nutzen?
ich nutze den i2c bus um daten an ein display zu senden, was ungefähr so aussieht:
Code:
; Paket senden
movlw H'11'
call senden
movlw H'0E'
call senden
movlw H'1B'
call senden
movlw H'44'
call senden
movlw H'4C'
call senden
movlw H'1B'
call senden
movlw H'47'
call senden
movlw H'44'
call senden
movlw H'00'
call senden
movlw H'00'
call senden
movlw H'140'
call senden
;etc......
__________________________________________
; ein Byte aus W senden
senden
movwf SSPBUF ; -> zum I2C-Slave übertragen
goto warten
ich find das aber ziehmlich unübersichtlich,... das ganze muss auch einfacher und besser gehen, hat jmd. einen rat wie?
MfG,
S.Z
edit: kann man das eigentlich auch direkt in ASCii senden..?
-
Hallo Sir.Zeiber,
das was du suchst nennt sich Tabelle und nicht Datenbank. Natürlich kann der PIC sowas; jeder halbwegs brauchbare Mikrocontroller kann sowas ;-)
Beim PIC dient der Befehl "retlw" diesem Zweck. Der Befehl springt aus einem Unterprogramm raus und lädt vorher das W-Register mit einem Wert.
Um eine Tabelle zu bauen musst du folgendes machen:
;PCLATCH für "call tabelle" setzen
movf index,w
call tabelle
;irgendwas mit W machen
tabelle:
addwf PCL,f
retlw 0x01
retlw 0x02
retlw 0x03
Bin mir nicht 100% sicher, ob das alles richtig ist. Ich hab schon lange nichts mehr mit dem PIC gemacht... aber so ähnlich sollte das gehen.
Gruß,
SIGINT
-
-
Je nach verwendetem PIC kann man das auch ohne RETLW tätigen.
Wenn der PIC die Befehle TBLRD unterstützt, lassen sich solche
Tabellen wesentlich eleganter handhaben.
Beispiel aus meiner RS232 Schnittstelle:
#define RED 0x02
;Farbe,Spalte,Zeile,Text
Text_FE_ERROR: db RED,1,1,"Frame Error",0
Text_UC_ERROR: db RED,1,2,"Unknown Command Error",0
Text_PE_ERROR: db RED,1,3,"Parameter Error",0
Text_OV_ERROR: db RED,1,4,"Overrun Error",0
mfg Siro
-
Das geht leider nur bei den PICs der 18er Generation und höher. Ansonsten muss es mit dem RETLW Befehl gehen, da der Pointer INDF nicht auf den Flash zeigen kann.
Leider ist der PIC 16 wegen der internen 14Bit Befehlsbreite nicht sehr hübsch um Tabellen von 8-Bit Werten anzulegen, es geht recht viel Platz verloren.
Um direkt Ascizeichen auszugeben, musst du einfach folgendes schreiben:
RETLW 'A'
RETLW 'B'
RETLW '2'
RETLW '!'
Solange kein D oder so vor den ' steht,interpretiert der Assembler das als Zeichen und setzt es von selbst in Ascii um.