Forum: Mikrocontroller und Digitale Elektronik PIC USART - EEPROM Problem


von Josef K. (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

Ich vermute mal, der Fehler ist in Zeile 13 Deines Programms.


Peter

von Josef K. (Gast)


Lesenswert?

@Peter
Zeile 13?

Wie darf ich das verstehen?

Josef

von Gerhard Gunzelmann (Gast)


Lesenswert?

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

von Josef K. (Gast)


Lesenswert?

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

von Gerhard Gunzelmann (Gast)


Lesenswert?

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

von Josef K. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.