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.