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
Sorry, dass P1=~0xfc; gehört dort nicht hin. Sonst alles wie im 1. Text beschrieben.
probier mal: point0 = !point0; (~ geht mit Bitvariablen nicht bei jeden Compiler)
tach - also deini init funktion schein zu stimmen probier einmal mit einer temporären variable welche du toggelst und dann ausgibts.... gruss
Hi Matthias, gleiches Verhalten. compiliere ich ein pointx wird getoggelt. compiliere ich beide geht nix. Grüße 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.
Ich würde mir da einfach mal das Assemblerlisting, das der Compiler ausspuckt, ansehen...
zum Toggeln XOR verwenden! 001 XOR 001 = 000 000 XOR 001 = 001 usw.
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
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.
Mal sehen wie ich über µVision wieder in Gang bekomme. Dennoch vielen Dank Matthias. Mi.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.