Hallo,
ich habe hier gerade in kleines Problem...
ich möchte daten einlesen und speichern, damit ich die später wieder
ausgeben kann.
Nur leider ist das Datenwort so lang, dass ich dafür 12Bytes belegen
muss...
Ich bekomme das aber nicht hin.
Schaff es nur mittels Pointer 8Byte einzulesen und die dann auszugeben.
Der Pointer fängt bei mir bei 0x08 an und erhöt sich nach jedem
einlesevorgang
danach setze ich FSr wieder auf 0x08 und beginne die Bytes auszugeben.
sobald ich aber das 9. mal Incrementiere, gibt der ausgang lauter 0en
aus.
mein code sieht so aus,
MOVLW 0x08
MOVWF FSR
Call Einlesen
INCF FSR,.1
Call Einlesen
INCF FSR,.1
Call Einlesen
INCF FSR,.1
Call Einlesen
INCF FSR,.1
Call Einlesen
INCF FSR,.1
Call Einlesen
INCF FSR,.1
Call Einlesen
INCF FSR,.1
Call Einlesen
; INCF FSR,.1
; Call Einlesen
MOVLW 0x08
MOVWF FSR
CALL Ausgabe_0
INCF FSR,.1
CALL Ausgabe_0
INCF FSR,.1
CALL Ausgabe_0
INCF FSR,.1
CALL Ausgabe_0
INCF FSR,.1
CALL Ausgabe_0
INCF FSR,.1
CALL Ausgabe_0
INCF FSR,.1
CALL Ausgabe_0
INCF FSR,.1
CALL Ausgabe_0
; INCF FSR,.1
; CALL Ausgabe_0
...
...
Einlesen
MOVLW .8
MOVWF marke1
Einlesen_1
BTFSC Input
GOTO lesen_1
BTFSS Input
GOTO lesen_0
GOTO Einlesen
lesen_1
BCF STATUS,0
RLF INDF,.1
MOVFW INDF
XORLW b'00000001'
MOVWF INDF
CALL WAIT
DECFSZ marke1,.1
GOTO Einlesen_1
retlw .0
lesen_0
BCF STATUS,0
RLF INDF,.1
MOVFW INDF
XORLW b'00000000'
MOVWF INDF
CALL WAIT
DECFSZ marke1,.1
GOTO Einlesen_1
RETLW .0
...
...
Ausgabe_0
MOVFW INDF
MOVWF Ausgabe
MOVLW 0x08
MOVWF marke2
BCF STATUS,0
Ausgabe_1
RLF Ausgabe,.1
BTFSC STATUS,0
BSF Output_1
BTFSS STATUS,0
BCF Output_1
call WAIT
DECFSZ marke2,.1
GOTO Ausgabe_1
retlw .0
ich kann mir vorstellen, dass der Speicher bei dem PIC begrenzt ist,
aber welche möglichkeiten habe ich noch Bytes abzuspeichern?
Würde mich über eine Antwort sehr freuen, da ich sonst nicht weiter
komme :(
Gruß
Thomas
Du hast ganze 24 Byte Ram zur Verfügung. Von Adresse 8 bis 31, also eigentlich genug Platz für 9 Byte. Wo liegen denn die Variablen marke1, marke2 und Ausgabe? Überschneiden sich deren Adressen mit deinem Puffer? Gruß Uwe
meine variablen habe ich so definiert:
cblock 0x10
loops
loops2
marke1
marke2
Ausgabe
endc
#define Output_2 GPIO,2
#define Input GPIO,1
#define Output_1 GPIO,0
Thomas wrote: > meine variablen habe ich so definiert: > > cblock 0x10 Naja, dann ist der Fehler doch schon ziemlich gut erkennbar: Der String beginnt bei 0x08 und der cblock bei 0x10. Dazwischen ist genau 8 Byte Platz, wenn der String länger wird (12 Byte) überlappt er sich mit dem cblock und du liest die (auf 0 runtergezählten) Schleifenzähler. Leg mal den cblock auf 0x14, dann sollte das Programm laufen.
ah ok stimmt, Ich hab es jetzt so gemacht, kann es da irgendwelche probleme geben? kann man die variablen auch bei 0x00 anfangen lassen? habe mal gelesen, dass man 0x00 nicht verändern soll/ darf. Wo darf man anfragen Variablen zu schreiben? loops equ 0x10 loops2 equ 0x11 marke1 equ 0x12 marke2 equ 0x13 Ausgabe equ 0x14 ... ... MOVLW 0x15 MOVWF FSR ... ... Hier ist es so, dass ich ja nur 11 Bytes zu verfügung habe, weil man nur bis 0x1F schreiben kann. okok, wer lesen kann ist klar im vorteil... man darf ab adresse 0x08 anfangen zu schreiben. Mal sehen ob ich das hin bekomme. Vielen dank schonmal für die Hilfe!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.