Danke, den Befehl "Incr" kannte ich noch nicht.
Ich muss das Programm mal auf einer Platine mit Hallsensoren testen,
in der Bascom-Simulation gibts noch Ungereimtheiten, der Ausgang geht nur an, wenn man den Eingang ein paar mal an und aus geschaltet hat...
Zwei Fragen noch:
1. Kennt Bascom kein "Or"?
2. Wenn ich "Debounce" einbauen will, muss das laut Hilfe in dem Hauptprogramm passieren. Wie bringe ich dann die jetzigen If..Then-Aufgaben des Hauptprogramms unter?
Hier der Code:
Gruß,Code:'------------------------------------------------------------------------------ $regfile = "m8def.dat" $crystal = 1000000 $hwstack = 100 '--------- Ein- und Ausgaenge ------------------------------------------ Config Pinb.3 = Input Eingang Alias Pinb.3 Config Portb.4 = Output Ausgang Alias Portb.4 '--------- Variblen --------------------------------------------------- Dim A As Byte 'Klemmer Dim B As Byte 'Korb A = 0 'Startwerte B = 0 '--------- LCD -------------------------------------------------------- Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Lcdbus = 4 '-------- Interrupts -------------------------------------------------- Config Int0 = Rising 'Interrupts reagieren auf steigende Flanke Config Int1 = Rising Enable Interrupts Enable Int0 'Interrups einschalten Enable Int1 On Int0 Isr_von_int0 On Int1 Isr_von_int1 '-------- Hauptprogramm ----------------------------------------------- Main: Do If Eingang = 1 And B < A Then Ausgang = 1 End If If Eingang = 0 Then Ausgang = 0 End If If A <= B Then Ausgang = 0 End If Cls 'LCD Locate 1 , 1 Lcd "Klemmer:" Locate 1 , 10 Lcd A Locate 2 , 1 Lcd "Korb:" Locate 2 , 10 Lcd B Loop '--------- Interrupt-Routinen -------------------------------------------- Isr_von_int0: Waitms 2 'Routine 2ms warten lassen Incr A 'Var A um eins erhöhen Return Isr_von_int1: Waitms 2 'Routine 2ms warten lassen Incr B 'Var B um eins erhöhen Return
Johannes







Zitieren

Lesezeichen