Ich baue ein Programm für einen PIC16F877A. Im Simulator MPLABX scheint es korrekt zu laufen. Ich verwende etwa die Hälfte des verfügbaren Programm- und Datenspeichers.
Beim Programmieren erhalte ich folgende Meldung:
The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0xfff
configuration memory
Debug Executive
Address: 1f00 Expected Value: 1170 Received Value: 3fff
Failed to program device
Unter der Simulatorsituation habe ich in den Programmspeicher geschaut. Die Adresse 1F00 wird nicht verwendet und hat tatsächlich den Wert 3FFF. Wie gehe ich bei der Fehlersuche vor?
Das Programm ist in XC8 geschrieben.
Für das Hardware-Debugging wird ein zusätzliches Stück Code namens "Debug Executive" von 0x1F00-1FFF in den Programmspeicher geladen. Aus irgendeinem Grund kann Ihr Programmierer nicht in diesen Bereich schreiben. Drei mögliche Ursachen fallen mir ein:
Stellen Sie sicher, dass der gesamte Programmspeicher beschreibbar ist, indem Sie #pragma config WRT = OFF
Ihrem Code etwas hinzufügen.
Der 16F877 kann so konfiguriert werden, dass er 0x1F00-1FFF schreibgeschützt macht, während er andere Bereiche in Ruhe lässt. Die Lösung besteht darin, die richtige MCU auszuwählen und die entsprechenden Konfigurationsbits dafür zu setzen.
Versuchen Sie, das Programm aufzufüllen, bis es mehr als die Hälfte des Speichers ausfüllt. Wenn die Programmierung über 0x1000 fehlschlägt, wissen Sie, dass es nur 4 KB funktionierenden Flash hat!
Fehler gefunden.
Das Konfigurationsbit WRT wechselte im Moment des Compilerstarts von OFF auf HALF. Also habe ich den gesamten Quellcode kommentiert und bin gegangen
void main(void){
while(1){};
};
Kein Erfolg. Mit nur xc.h kein Problem. Mein Header verursacht Probleme!!
#define ON 1
#define OFF 0
bewirkt, dass WRT von OFF auf HALF geändert wird
Rohr
Bruce Abbott
Zehnfüßer