Gast
#90753
Ich bin gerade dabei eine Lichtschranke zu programmieren (mit µC der 8051 - Familie von Atmel) und verzweifle an diesen blöden Interrupt einsprungaddressen. Und zwar folgender aufbau: Ich habe zwei Lichtschranken. Wenn der Körper die erste Lichtschranke durchquert sendet diese ein 1. Dieses SIgnal aktiviert den Timer. Dieser Zählt auf 50.000 µSekunden, sprich 0,05 Sekunden und gibt dann ein Interrupt (TF0) frei. Wenn ihr Fehler findet bitte sagt sie mir, denn ich habe mit der µC -Programmierung erst frisch angefangen. Oder könntet ihr mir einmal einen vorschlag am Quelltext machen wie ihr eine "Stoppuhr" oder so eine Lichtschranke (ist ja prinzipiell das selbe) programmieren würde, damit ich mir auch mal eure vorschläge ansehen könntet. Ich wäre euch unendlich dankbar für eure Hilfe!!!! Aber mal der quelltext dazu: org 000Ch // Ich bin weitgenug vorne um mit dem Interrupt nicht in Konflikt zu kommen mov r0, #00h // Register 0 wird mit "0" beschrieben mov TMOD, #01h // In Modus 2 des Timers wechseln (16 - Bit) setb 0AFh // Generelle Freigabe aller Interrupts mov TL0, #0B6h // Timer0 wird mit dem Startwert 15536d versehen mov TH0, #03Ch // sodass er 0,05 Sek. braucht bis er Überläuft. jb P0.1,Sprung1 // Wenn 2. Bit des P0 = 1 --> zu "Sprung1" -------------- Hier beginnt eigentliche Lichtschranke ------------- Sprung1: setb ET0 // Freigeben des Timer0 - Interrupts setb TR0 // Startbit des Timers gesetzt jb TF0, Sprung2 // Wenn Überlaufbit des T0 = 1 --> zu "Sprung2" Sprung 2: clr TR0 // Timer 0 wird angehalten clr TF0 // Timer - Interruptbit wird gelöscht setb TR0 // Timer 0 wird wieder gestartet, denn // 2*0,05 Sek. --> die gewünschten 0,1 Sek org 000Bh // Sprung zur T0 - Interrupt Einsprungadresse inc R0 // Wenn TF0 = 1 wird R0 um 1 erhöht jb P1.1,Sprung3 // Es wird zu "Sprung3" gesprungen wenn die // andere Lichtschranke "1" ist Sprung3: clr TR0 // Timer 0 wird angehalten