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:
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
Gruß,
Johannes
Lesezeichen