Hallo! Ich habe in großes Problem: Mein PIC 16f877A empfängt keine Zeichen mehr am USART, sobald ich einen Schreibzugriff am EEPROM durchgeführt habe! Die Interrupts sind alle enabled etc - das Problem tritt NUR auf, wenn ins EEPROM geschrieben wurde. Die Interrupts im übrigen funktionieren dann auch zB TIMER1 ... Ich wäre sehr dankbar für einen Lösungsansatz. Übrigens neu initialisieren des UART bringt nichts, auch nicht das neu Initialisieren des TRISC. Vielen Dank im Voraus Josef
Hallo Josef Peter meinte damit, daß Du vielleicht mal den Code mitpostest. Zu Deinem Problem. Vielleicht hast Du irgendwo ne falsche Page eingestellt und schreibst beim EEPROM-Zugriff aufs falsche register ??!! Gerhard
Also erstmal danke, dass Ihr an meinem Problem interessiert seid!
Hier ist meine EEPROM-Schreibroutine (im w-Register wird die zu
schreibende EEPROM-Adresse übernommen):
Write_EE ;
movwf EE_Zelle ;
bcf PIR2,EEIF ;
;
BCF STATUS, RP0 ;
movf EE_Zelle,w ;
BSF STATUS, RP1 ;
MOVWF EEADR ;
BCF STATUS,RP1 ;
MOVF Zeichen,w ;
BSF STATUS,RP1 ;
MOVWF EEDATA ;
BSF STATUS, RP0 ;
BCF EECON1, EEPGD
BSF EECON1, WREN
BCF INTCON, GIE
; Die folgenden 5 Zeilen
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1, WR
; Die 5 Zeilen bleiben ge
BCF STATUS,RP0 ;
BCF STATUS,RP1
Write_EE1
clrwdt
btfss PIR2,EEIF
B Write_EE1
bsf STATUS,RP0
bsf STATUS,RP1
bcf EECON1,WREN
bcf STATUS,RP0
bcf STATUS,RP1
btfss INTCON_,0
Return
BSF INTCON, GIE
BSF STATUS,RP0
BSF PIE1,RCIE
BCF STATUS,RP0
Return
Übrigens landen die Daten genau dort im EEPROM, wo sie hin sollen - ich
habe den PIC danach ausgelesen!
Gruß Josef
Hallo Josef ich hab Deinen Code jetzt nicht Zeile für zeile analysiert. Im datenblatt steht eine Anleitung, wie man richtig auf das EEPROM zugreift. Ich unterstelle jetzt mal, daß das so stimmt. Aber weiter unten da versteh ich was nicht: - was ist INTCON_ ?? - wieso schaltest Du den INT ein ? (BSF INTCON, GIE ) hast Du den irgendwo ausgeschaltet ? Wird dieser Teil evtl übersprungen ? - und wieso schaltest Du den Receive INT ein ? (BSF PIE1,RCIE ) wurde der auch abgeschaltet ? Also hier, bei den letzten Befehlen, bzw bei deinem Hauptprogramm scheint mir der Fehler zu liegen. Hast Du schon mal die Simulation versucht ? Gerhard
Hallo! Ich habe den Fehler gefunden - die Fehlerbehandlungsroutine in meinem Interrupt für die Behandlung von overflow-errors wurde nicht aufgerufen, da der call dafür falsch plaziert war! Vielen Dank für die Unterstützung Gruß aus Österreich Josef
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.