PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : assembler 'datenbank'



Sir.Zeiber
05.06.2008, 09:11
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:

; 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..?

SIGINT
05.06.2008, 16:38
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

PICture
06.06.2008, 07:40
Hallo!

Vielleicht hilft es:

https://www.roboternetz.de/wissen/index.php/PIC_Assembler#Tabellen

MfG

Siro
10.06.2008, 17:19
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

the_Ghost666
27.06.2008, 23:12
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.