Hallo Spezialisten.
Ich bin daran einer scheinbar einfachen Aufgabe zu scheitern.
(Code im Anhang)
Controller: AT89C51ED2 (wird seit 4 Jahren hin und wieder auf
SelbstbauDevBoard verwendet)
In meiner Timer 0 ISR sollen 2 PortPins, nach 10 Timerüberläufen,
getoggelt werden.
point0 und point1 sind die PortPins.
Werden point0 und point1 compiliert geht nix. Ports bleiben aus.
Wird nur eine von beiden compiliert, wird dieser einwandfrei getoggelt.
Ich habe diesen kleine CodeSchnippsel in vielen Varianten probiert.
Nix zu machen.
Es kam auch schon vor das 2 andere Ports im Wechsel blinkten. :(
Woran kann das leigen?
Datentransport in Controller schlecht?
Interuptauslöse?
Danke im Voraus Mi
MikroMakro schrieb:
> Hallo Spezialisten.> Ich bin daran einer scheinbar einfachen Aufgabe zu scheitern.> (Code im Anhang)
Diese Code toggled nichts, sondern setzt P1 auf den konstanten Wert
0x03.
Du mußt schon den Code zeigen, der fehlerhaft sein soll!
Peter
Hallo Peter.
> Diese Code toggled nichts, sondern setzt P1 auf den konstanten Wert
0x03.
damit meinst du P1=~0xfc; das gehört nicht zum Code (sorry)
im Anhang nochmals die Ausgangssituation.
Mi.
Danke an alle.
Das Toggeln der PortPins funktioniert.
Aber nicht auf dem System was ich verwendete.
Auf einem kleinen AT89c2051 funtioniert alles tadellos.
Ich habe mal den Code wie er auf dem ersten System, mal läuft mal nicht
läuft angehangen und Kommentare beigelegt.
Irgendwie bekommt das System Probleme, wenn die "if" - Anweisung aktiv
ist.
Und ich auch die Timerregister in der ISR nicht neu lade.
Lade ich die Register nicht neu, toggelt evtl mal ein Port oder beide im
Gegentakt. Wenn überhaupt.
Kann sich das jemand erklären?
Mein nächster Schritt wird ein neuer Controller mit Bootloader sein.
Oder kann es am Bootlader selber leigen?
Grüße Mi.
Ich habe den AT89C51ED2 jetzt mit FLIP programmiert.
Jetzt funktioniert das Programm.
Liegt das nun an µVision?
Ist eine Einstellung falsch?
Ich nutze gleiche Programmerkabel, gleiches Board und Controller.
Hat jemand eine Idee?
Grüße Mikro
Es gibt 2 Varianten das Programm zu starten. Einmal läuft der interne
Bootloader noch im Hintergrund mit (inkl. seiner Interrupts usw.) zum
anderen praktisch mit einem Kaltstart. Bei Flip kannst Du das unten
rechts mit den Haken bei Reset (Start Application) einstellen.
Guten Morgen.
Nachdem nun mit Flip das Programm lief, habe ich den Chip wieder erased.
PSEN habe ich wieder umgejumpert
Daraufhin habe ich µVision neu installiert.
Jetzt findet µVision das Target nicht mehr.
Ich habe in Flip keine Bits geändert.
Den Bootloader habe ich sicher auch nicht gelöscht. Oder?
Was muss ich tun, damit µVision das Target wieder findet?
Grüße Mi.
Den Bootloader kann man meines Wissens nicht löschen. Man kann nur das
BLJB-Bit löschen, mit PSEN=L beim Reset müsste er trotzdem noch starten.
Mit µVision kenne ich mich nicht so genau aus. Ich nehme grundsätzlich
FLIP. Das geht auch in einem Batch-Prozess (BATCHISP), welchen Du bei
Keil im Anschluß an die Code-Generierung automatisch ausführen kannst.
BSP.:
batchisp -cmdfile "at89C51ED2.cmd"
Inhalt der "at89c51ED2.cmd"
-device AT89C51ED2
-hardware RS232
-port COM1
-baudrate 57600
-operation
memory FLASH
erase f
loadbuffer "Pfad zu Deiner HEX\dein_hex.hex"
program
verify
start reset 0
wait 5
Ja, du hast recht, ich habe es gerade gelesen, den Bootloader kann man
nicht löschen.
Den ROM (2k bootloader) kann man weder löschen noch beschreiben.
Ich habe - BATCHISP - über µVision genutzt.
Das Programm lies sich in den Controller flashen und das Programm läuft
auch.
Kann ich den controller auch damit wieder stoppen?
Oder nur mit Hardware-Reset
Ist es so, wenn ich das Häkchen bei BLJB löschen, dass diese aktion
sofort ausgelöst wird? Oder muss ich noch was starten?
Nur warum geht das mit µVision nicht mehr?
Ok. ich habe die ... .cmd mit deinen Angabe vervollständigt.
Programm startet.
Gibt es nun auch die Möglichkeit ohne HW-Reset ein neuen Code zu
flashen?
>Gibt es nun auch die Möglichkeit ohne HW-Reset ein neuen Code zu>flashen?
Ja gibt es. Dazu muss Dein Board oder Programmieradapter AUTOISP
unterstützen, wobei der PSEN und RESET-PIN von FLIP über RTS/DTR der
RS232 gesteuert wird.
Bei FLIP musst Du AUTOISP aktivieren.
Aber dennoch muss es auch mit µVision gehen. Ging ja bisher auch.
Habe ich mit der ersten Benutzung von Flip was geändert?
Im Anhang sind meine Einstellung in Flip sichtbar.
Ist das BLJB-Bit = 0 wird ja der Bootloader nach Reset gestartet.
Ist X2 gesetzt -> 12 clocks per instruction (8051 üblich)
Oder stimmt da noch was nicht?
Grüße
X2 angehakt: 6-Cycle Mode (offen: 12-Cycle Mode)
BLJB legt fest, ob beim nächsten Reset der Bootloader oder das
User-Programm gestartet werden soll.
Reset unten bei Start Application sollte immer angehakt werden.
Zu µVision kann ich Dir nicht helfen.