Zamieszczam caly program i prosiłbym oprzerobienie
pod moje wytyczne.
Przerasta mnie to .
'sterownik do pieca at89c2051
' wyświetlacz 2*16, poprawione zachowanie po zaniku napięcia
$large
$crystal = 12000000
Config Lcd = 16 * 2
Cursor Off
Cls
Config Sda = P3.1
Config Scl = P3.0
Config Timer0 = Timer , Mode = 1 , Gate = Internal
Config Timer1 = Timer , Mode = 1 , Gate = Internal
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Cls
Dim Gasnie As Byte
Dim Pomiar As Word
Dim R As Byte
Dim Bojler As Byte
Dim Kuchnia As Byte
Dim Czjnik As Byte
Dim T0 As Byte
Dim P As Word
Dim Licz As Byte
Dim Todn As Byte
Dim T1 As Byte
Dim A As Byte
Dim Dom As Byte
Dim Channel(3) As Byte
Dim Kanal As Byte
Dim Wlacz As Bit
Dim Kontrola As Bit
Dim K As Byte
Dim Offsil As Bit
Dim Wylacz As Bit
Dim Pierwszy As Bit
Declare Sub Pompka
Declare Sub Silnik
Declare Sub Ustawiam
Declare Sub Buz
Declare Sub Buz1
Declare Sub Odczyt
Declare Sub Gasnie
Declare Sub Przegrzanie
Declare Sub Pokaz
Declare Sub Przelicz
Pomp Alias P1.0
Sil Alias P1.1
Buzer Alias P3.7
Wybor Alias P3.5
Ustaw Alias P3.4
Onsil Alias P3.3
Piwnica Alias P3.2
Load Timer0 , 65500
On Timer0 Przerwanie
Enable Timer0
Load Timer1 , 60000
On Timer1 Przerwanie1
Enable Timer1
Enable Interrupts
Todn = 56
Wlacz = 0
Kontrola = 0
P = 0
Licz = 0
Offsil = 0
Wylacz = 0
Gasnie = 0
K = 3
Pierwszy = 0
Channel(1) = &B01000000 'bojler
Channel(2) = &B01000010 'kuchnia
Channel(3) = &B01000001 'piec
Set Pomp
Set Sil
Start Timer0
Start Timer1
Set Onsil
Set Piwnica
Cls
Locate 1 , 1 : Lcd "******" 'wstęp
For A = 1 To 20
Waitms 255
Shiftlcd Left
Next A
Cls
Locate 1 , 3 : Lcd "WLACZ MNIE" 'oczekiwanie na przycisk ON/OFF
Locate 2 , 1 : Lcd "Przycisk ON/OFF"
Do
Call Przelicz 'zmiana pompka-zawsze powinna być włączna
Call Pompka 'np. po zaniku napiecia
Debounce Piwnica , 0 , Tu
Debounce Onsil , 0 , Tu
Loop
Tu:
Pierwszy = 1 'inicjalizacja 1 wlączenia
Call Buz
Do
Call Przelicz
K = 3
Call Pokaz
Wait 4 'główna pętla programu
Call Silnik
Wait 4
Call Pompka
Wait 4
Loop
Sub Odczyt:
Kanal = Channel(k)
I2cstart
I2cwbyte &B10010000
I2cwbyte Kanal
I2cwbyte Todn
I2cstart 'odczyt temperatury bojlera i kuchni
I2cwbyte &B10010001
I2crbyte Dom , Ack
I2crbyte Dom , Nack
I2cstop
Waitms 10
End Sub
Sub Przelicz:
For K = 1 To 3
Pomiar = 0
For A = 1 To 10
Call Odczyt
Pomiar = Pomiar + Dom 'przepisanie temp. pieca
Next A
Pomiar = Pomiar / 21
Select Case K:
Case 1 : Bojler = Pomiar
Case 2 : Kuchnia = Pomiar
Case 3 : R = Pomiar
End Select
Next K
End Sub
Sub Pokaz:
Cls
Locate 1 , 3
Select Case K:
Case 1 : Lcd "BOJLER= " ; Bojler ; Chr(0) ; "C" 'obsluga wyświetlacza
Case 2 : Lcd "KUCHNIA= " ; Kuchnia ; Chr(0) ; "C"
Case 3 : Lcd "PIEC= " ; R ; Chr(0) ; "C"
End Select
End Sub
Sub Silnik:
Todn = Todn + 1
If Sil = 0 Then
If R > Todn Then
Set Sil
End If
End If
Todn = Todn - 2
If R =< Todn Then
If Offsil = 0 Then
If Kontrola = 1 Then
If Sil = 1 Then
Reset Sil
P = 0 'obsluga silnika
T0 = R
Wylacz = 0
Gasnie = 0
End If
Else
Set Sil
End If
Else
Set Sil
End If
End If
Todn = Todn + 1
End Sub
Sub Pompka:
If R > 50 Then
If Wlacz = 0 Then
Reset Pomp
End If
End If
If R < 49 Then
If Pomp = 0 Then
Set Pomp
End If
End If
If R >= Todn Then
If Wlacz = 0 Then 'obsluga pompki
Wlacz = 1
End If
End If
If R >= Todn Then
Reset Pomp
End If
If Pomp = 0 Then
If Wlacz = 1 Then
Todn = Todn - 3
If R =< Todn Then
Set Pomp
End If
Todn = Todn + 3
End If
End If
If R > 90 Then
Call Przegrzanie
End If
End Sub
Ustawiam:
Call Buz
Cls
Locate 1 , 4 : Lcd "USTAWIONO"
Locate 2 , 4 : Lcd "Todn=" ; Todn ; Chr(0) ; "C"
Wait 1
Do
Set Ustaw
If Ustaw = 0 Then
Call Buz
Todn = Todn + 2
If Todn > 86 Then 'podgląd Todn
Todn = 56 'ustawienie Todn
End If
Cls
Locate 1 , 2 : Lcd "Zmiana Todn"
Locate 2 , 3 : Lcd "Todn=" ; Todn ; Chr(0) ; "C"
Waitms 200
Waitms 200
Else
Exit Do
End If
Loop
Return
Sub Buz:
Reset Buzer
Waitms 50 'alarm
Set Buzer
End Sub
Sub Buz1:
Reset Buzer
Wait 2 'alarm
Set Buzer
End Sub
Czuj:
Incr K
If K = 4 Then
K = 1 'wybór czujnika
End If
Call Buz
Call Pokaz
Return
Control:
Call Buz
Todn = Todn - 1
If R > Todn Then
Cls
Locate 1 , 1 : Lcd "!!!SILNIK OFF!!!"
Locate 2 , 3 : Lcd "NIE WLACZE GO"
Else
Kontrola = Not Kontrola
Offsil = 0
Call Silnik 'czy można wlączyc silnik??
End If
Todn = Todn + 1
Return
Sub Przegrzanie:
Call Buz1
For A = 1 To 3
Cls 'reakcja na przegrzanie
Waitms 255
Locate 1 , 4 : Lcd "UWAGA"
Locate 2 , 2 : Lcd "!!!PRZEGRZANIE!!!"
Wait 1
Next A
End Sub
Sub Gasnie:
Call Buz1
For A = 1 To 5
Cls
Waitms 255
Locate 1 , 4 : Lcd "!!!GASNIE!!!"
Locate 2 , 2 : Lcd "BRAK OPALU"
Wait 1
Next A
End Sub
Przerwanie:
Incr P
If P >= 4000 Then '900 min.
T0 = T0 - 1
T1 = T0 + 2
If R >= T0 And R <= T1 Then
If Wylacz = 1 Then
Kontrola = 0
Call Buz
End If
Wylacz = 1
Else
Kontrola = 1 'śledzenie poprawnosci wlaczenia
Wylacz = 0 'silnika
End If
If R < T0 Then
Incr Gasnie
Else
Gasnie = 0
End If
If Gasnie >= 3 Then
If Offsil = 0 Then
Call Gasnie
Offsil = 1
End If
End If
P = 0
T0 = R
End If
Return
Przerwanie1:
If Pierwszy = 1 Then
Set Ustaw
Debounce Ustaw , 0 , Ustawiam , Sub
Set Wybor
Debounce Wybor , 0 , Czuj , Sub
Set Onsil 'obsluga przycisków
Debounce Onsil , 0 , Control , Sub
Set Piwnica
Debounce Piwnica , 0 , Control , Sub
End If
Todn = Todn - 1
If R <= Todn Then
Enable Timer0
Else
Disable Timer0
End If
Todn = Todn + 1
Return
Dodano po 10 [minuty]:
Pomóżcie:D