Hallo,
ich hoffe doch der Urlaub war okay.
Ja, das kann so noch nicht funktionieren aus mehreren Gründen.
1) Der PIC18F4455 hat ab Adresse 0x800 gar keinen RAM mehr, er besitzt nur 2048 Bytes und damit endet der RAM bei 0x07FF.
Siehe Datenblatt Seite 60
2) Der Ram ist unterteilt in verschiedene Blöcke. Um entsprechend darauf zuzugreifen benötigt man ein sogenanntes BANKSELECT.
Zuständig ist dafür das Register BSR
Solange Du mit MOVFF arbeitest, brauchst Du Dir keine Gedanken um das Bankselect machen. Sobald aber MOVWF oder MOVF ins Spiel kommt, musst Du sicherstellen, daß auch die richtige Rambank aktiv ist.
ich hab mal deinen Code abgeändert und ausprobiert. So geht es dann:
Code:
#include P18F4455.inc
org 0
goto main
var_Address_Low EQU 0x0100
var_Address_High EQU 0x0101
Zeichen EQU 0x102
main:
; ich schreibe in diesem Beispiel an die Adresse 0x0600 eine 6
; und an die Adresse 0x0700 eine 7
BANKSEL var_Address_Low ; so kannst Du dafür sorgen, daß MPLAB (der Assembler) automatisch die richtige Bank auswählt
movlw D'0'
movwf var_Address_Low
movlw D'6'
movwf var_Address_High
; hier brauchen wir kein Bankselect wegen dem MOVFF
movff var_Address_Low,FSR0L
movff var_Address_High,FSR0H
movlw D'6'
movwf POSTINC0;INDF0
; hier setze ich z.B die BANK mal direkt mit dem BSR Register,
; eigentlich brauche ich es nicht mehr, da die Bank immer noch richtig steht
; nur zur Verdeutlichung...
bsf BSR,0 ; BANK 1 Speicherbereich 100..1FF auswählen
movlw D'7'
movwf var_Address_High
movff var_Address_Low,FSR0L
movff var_Address_High,FSR0H
movlw D'7'
movwf POSTINC0;INDF0
;auslesen:
movlw D'0'
movwf var_Address_Low
movlw D'6'
movwf var_Address_High
movff var_Address_Low,FSR0L
movff var_Address_High,FSR0H
movf POSTINC0,W
movwf Zeichen
; call SendeZeichen
; call WarteLänger
movlw D'0'
movwf var_Address_Low
movlw D'7'
movwf var_Address_High
movff var_Address_Low,FSR0L
movff var_Address_High,FSR0H
movf POSTINC0,W
movwf Zeichen
; call SendeZeichen
; call WarteLänger
end
ich hoffe, ich konnte Dir damit helfen.
Siro
Lesezeichen