PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Program Counter überlauf



28.01.2006, 16:57
Hallo zusammen!!

Vor kurzen habe ich mit PIC-programming angefangen, bin also noch ganz am Anfang und habe auch schon ein kleines Problem:

Ich habe ein programm geschrieben, welches schon etwa 300 Zeilen umfasst. Das Problem ist, dass irgendwann der Program Counter (PCL Register) überlauft und der PIC wieder von vorne anfängt. Ich verwende den PIC16F627 bzw PIC16F627A der eigentlich einen 13bit Counter haben soll (PCLATH, der allerdings unangerührt bleibt). Muss ich die Register noch verbinden?

Für Antworten und Hilfen bin ich dankbar!!

Gruß

Jörn

kalledom
29.01.2006, 16:06
Hallo Jörn,
programmierst Du in Assembler, C oder noch was anderes ?

PS: Du hast nur 1 K Flash-Speicher; bei 300 Zeilen in Assembler kannst Du noch nicht den Speicher voll haben, bei C evtl. schon.

Jörn Arne
29.01.2006, 17:04
Hallo, danke für deine Antwort!

programmiert habe ich den Code in Assembler und es sind keine vorkompilierten Objekte drin



Gruß
Jörn Arne

kalledom
29.01.2006, 23:39
Hallo Jörn,
Am ProgrammCounter brauchst/solltest Du bei normalem Programm-Ablauf nichts verändern. Der PCLATH ist z.B. bei Computed GOTO zu bedienen (siehe Beispiel unter http://www.domnick-elektronik.de/picasm.htm).
Wie stellst Du fest, daß der PCL einen Überlauf hat ?
Vielleicht hast Du etwas anderes nicht berücksichtigt. Eine FehlerCheckListe findest Du unter http://www.domnick-elektronik.de/piccheck.htm.

Jörn Arne
30.01.2006, 14:47
Hallo,


für die Entwicklung benutze ich MPLab von Microchip, und bevor ich die Datei in den PIC lade Simuliere ich den Programmablauf. Irgendwann steht der PC (unten in der Statuszeile) recht nahe an ff und kurze Zeit später fängt der PIC bei 0 an.

In meinem Programm verwende ich eine ganze Reihe von addwf PCL, f Befehlen, aber die Funktionieren eigentlich richtig.

Die links werde ich mir gleich ansehen

Danke

Gruß
Jörn Arne

kalledom
30.01.2006, 15:17
Wenn Du addwf PCL,f verwendest und das Ergebnis in PCL einen Überlauf ergibt, also über eine 256-er-Grenze rüber geht, gibt es ein Problem, weil das Carry nicht berücksichtigt wird.
Vor dem addwf PCL (hinterher ist zu spät) mußt Du PCLATH richtig setzen.

Jörn Arne
31.01.2006, 17:28
Deinen Tip habe ich mal ausprobiert, tatsächlich trat das Problem bei den PCL manipulationen auf. Im Simulator habe ich den PCLATH testweise kurz vor den überlauf auf 1 gesetzt, und siehe da es hat geklappt.

Wenn ich das richtig sehe, muss ich vor dem Tatsächlichen "springen" erst mal prüfen ob der PC überlauft, wenn ich den gewünschten Wert addiere und gegebenfalls (wenn c = 1) den PCLATH auf 1 setzten (oder um eins erhöhen).
Nur was ich nicht weiß ist was nach dem Sprung zu tun ist(PCLATH auf 0 setzten, bzw um eins verringern?).

Allerdings konnte ich einige addwf PCL, f befehle aus meinem Projekt entfernen, und habe die Anweisungen durch indirekte Adressierung ausgetauscht. (Durch die Sprungbefehle habe ich mir eine Art Array gebastelt)
In meinem Projekt gibt es nur noch eine addwf PCL, f Zeile, als Liste mit 127 Einträgen.

Zurzeit arbeitet mein Programm richtig, aber es ist leider noch nicht fertig.

Ich danke dir für deine Hilfe!!

kalledom
31.01.2006, 18:27
Schau Dir noch mal den Link mit dem ...picasm an und klicke auf 'Computed GOTO'; da siehst Du, was mit PCLATH zu machen ist.