8051 Timer ISR toggelt keine 2 Ports

Gast #1429558
Lesenswert?

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
Angehängte Dateien:
#1429680
Lesenswert?

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
#1429729
Lesenswert?

Ich hab den Kommentar rausgenommen, der Code sieht vollkommen o.k. aus:
1
             ; FUNCTION timer0_isr (BEGIN)
2
0000 C0E0          PUSH    ACC
3
                                           ; SOURCE LINE # 21
4
                                           ; SOURCE LINE # 26
5
0002 E500    R     MOV     A,count+01H
6
0004 640A          XRL     A,#0AH
7
0006 4500    R     ORL     A,count
8
0008 7008          JNZ     ?C0003
9
                                           ; SOURCE LINE # 27
10
000A B292          CPL     point0
11
                                           ; SOURCE LINE # 28
12
000C B293          CPL     point1
13
                                           ; SOURCE LINE # 29
14
000E F500    R     MOV     count,A
15
0010 F500    R     MOV     count+01H,A
16
                                           ; SOURCE LINE # 30
17
0012         ?C0003:
18
                                           ; SOURCE LINE # 32
19
0012 0500    R     INC     count+01H
20
0014 E500    R     MOV     A,count+01H
21
0016 7002          JNZ     ?C0008
22
0018 0500    R     INC     count
23
001A         ?C0008:
24
                                           ; SOURCE LINE # 33
25
001A D0E0          POP     ACC
26
001C 32            RETI
27
             ; FUNCTION timer0_isr (END)

Peter
Gast #1430195
Lesenswert?

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.
Angehängte Dateien:
Gast #1430436
Lesenswert?

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
Gast #1430548
Lesenswert?

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.
Gast #1430703
Lesenswert?

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.
Gast #1430764
Lesenswert?

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
Gast #1430780
Lesenswert?

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?
Gast #1430832
Lesenswert?

>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.
Gast #1430877
Lesenswert?

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
Gast #1430905
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren