Witam panowie, usiłuje napisać program do wytrawiarki, lecz jak już program jest prawie gotowy strasznie wolno chodzi i nie wykonuje czasami wszystkich poleceń. Program ma działać tak: po włączeniu, grzałka ma cały czas grzać do uzyskania temperatury zadanej, a pompka włączać się co jakiś czas w celu wymieszania. A po osiągnięciu temperatury zadanej, ma się włączyć buzzer i pikać, aż do naciśnięcia S1. Po naciśnięciu S1 buzer ma się wyłączyć, a grzałka ma pilnować temperatury oraz pompka ma być włączona cały czas. Program jest w bascomie, ustalanie temperatury zadanej poprzez enkoder ecw1j-b24. Nie wiem czym to jest spowodowane, że program strasznie wolno działa i nie wykonuje całego kodu. Może to przez jednoczesną obsługę Lcd, przerywań i ds-a. Na s1 czyli portb.2 mam cały czas stan niski, nawet jak swich jest odłączony. Jak by ktoś był tak miły i znał się dobrze na bascomie i poukładał im ten program tak jak należy byłbym bardzo wdzięczny. Niestety napisać coś korzystającej z jednej rzeczy np. sam termometr na ds-e umiem i inne rzeczy, lecz mam problem z pisaniem bardziej złożonych programów. Bardzo dziękuje za pomoc z góry.
oto kod:
oto kod:
Code:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 256
$swstack = 256
$framesize = 500
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 1wire = Portb.0
Config Portb.7 = Output
Config Portb.6 = Output
Config Portb.5 = Output
Config Portb.2 = Input
Cha Alias Pind.2
Chb Alias Pind.3
Config Cha = Input
Config Chb = Input
Config Pind.6 = Output
Config Int0 = Falling
Const Debouncetime = 1
Dim Wtime As Byte
'Dim Encounter As Integer
Set Chb
On Int0 Getencoder
Cls
Wtime = 100
'T1 = 112
'Set Portd.7
Grzalka Alias Portb.7
Pompka Alias Portb.6
Buz Alias Portb.5
S1 Alias Portb.2
Dim Temp(2) As Byte
Dim B As Integer
Dim C As Integer
Dim X As Bit
Dim T1 As Byte
Dim S1 As Bit
Dim A1 As Bit
Declare Sub Odcz_temp
Declare Sub Buzer
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Deflcdchar 1 , 4 , 10 , 10 , 10 , 17 , 21 , 31 , 14
'Encounter = T1
T1 = 30
X = 0
Buz = 0
Cursor Off
Cls
Locate 1 , 1
Lcd Chr(1)
Locate 1 , 2
Lcd "r"
Locate 1 , 3
Lcd "="
Locate 1 , 6
Lcd Chr(0)
Locate 1 , 7
Lcd "C"
Locate 1 , 9
Lcd Chr(1)
Locate 1 , 10
Lcd "z"
Locate 1 , 11
Lcd "="
Locate 1 , 14
Lcd Chr(0)
Locate 1 , 15
Lcd "C"
'Portd = &B11
Enable Interrupts
Enable Int0
Do
Locate 1 , 4
Lcd Temp(1)
Locate 1 , 12
Lcd T1
If Temp(1) > T1 Then
Reset Grzalka
If X = 0 Then
Gosub Buzer
End If
End If
Waitms 750
If Temp(1) < T1 Then
Set Grzalka
End If
If S1 = 1 Then
Waitms 25
If S1 = 1 Then
X = 1
Else
X = 0
End If
End If
A1 = 0
If X = 0 Then
Gosub Pnag
Locate 2 , 2
Lcd "NAGRZEWANIE"
End If
If X = 1 Then
Set Pompka
Locate 2 , 2
Lcd "WYTRAWIANIE"
End If
If T1 > 55 Then
T1 = 55
End If
If T1 < 20 Then
T1 = 20
End If
A1 = 1
Gosub Odcz_temp
Loop
End
Sub Odcz_temp
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
Temp(1) = 1wread(2)
1wreset
If Err = 1 Then
Cls
Lcd "Brak ukladu"
Do
Loop
End If
If Temp(2) > 0 Then
Temp(1) = 256 - Temp(1)
End If
Temp(1) = Temp(1) / 2
End Sub
Sub Buzer
Do
Buz = 0
Waitms 300
Buz = 1
If S1 = 0 Then
Waitms 25
'If S1 = 0 Then
' X = 1
' Exit Sub
' Exit Do
' End If
End If
Gosub Odcz_temp
Locate 1 , 4
Lcd Temp(1)
Locate 1 , 12
Lcd T1
Loop
End Sub
Pnag:
Set Pompka
Wait 5
Reset Pompka
Return
Getencoder:
Waitms Debouncetime
If Cha = 0 Then
If Chb = 0 Then Incr T1 Else Decr T1
End If
Gifr = 64
Return