Ich habe nun mal ein Code, der funktioniert. Aber selbst persönlich finde ich die Lösung nicht so gut. Vll habt ihr ja andere bessere Ideen:
z.B man viel nun nicht 0,5sek sondern auf 0,2sec Ein/AUS... Dann müsste man mit meinm Prog alles wieder anpassen.
Code:
$eeprom
$eepromhex
$regfile = "m32def.dat" ' Prozessortyp ATmega32
$crystal = 16000000 ' Taktrate
$hwstack = 32
$swstack = 10
$framesize = 40
$baud = 4800
Config Portb.2 = Output
Led1 Alias Portb.2
Config Portb.3 = Output
Led2 Alias Portb.3
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.5 , Rs = Porta.4
Cls
Cursor Off
Config Timer0 = Timer , Prescale = 64
On Timer0 Timer_irq
Const Timervorgabe = 6
Enable Timer0
Enable Interrupts
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim W As Word
Dim Taktzaehler As Integer
Dim 05takt As Bit
Dim 10takt As Bit
Dim 20takt As Bit
Dim Merker1 As Bit
Dim Merker2 As Bit
Do
W = Getadc(7)
Locate 2 , 15
Lcd W ; " "
Waitms 200
If W >= 400 Then
Merker1 = 1
Else
Merker1 = 0
End If
If W <= 400 Then
Merker2 = 1
Else
Merker2 = 0
End If
Loop
Timer_irq:
Timer0 = Timervorgabe
If Taktzaehler >= 4000 Then
Taktzaehler = 0
End If
Taktzaehler = Taktzaehler + 1
If Taktzaehler >= 0 And Taktzaehler <= 500 Then
05takt = 1
10takt = 1
End If
If Taktzaehler >= 500 And Taktzaehler <= 1000 Then
05takt = 0
10takt = 1
End If
If Taktzaehler >= 1000 And Taktzaehler <= 1500 Then
05takt = 1
10takt = 0
End If
If Taktzaehler >= 1500 And Taktzaehler <= 2000 Then
05takt = 0
10takt = 0
End If
If 05takt = 1 And Merker1 = 1 Then
Led2 = 0
Else
Led2 = 1
End If
If 10takt = 1 And Merker2 = 1 Then
Led1 = 0
Else
Led1 = 1
End If
Return
End
Lesezeichen