Witam.
Proszę o przejrzenie kodu i uwagi.
Zasada działania urządzenia jest prosta. Pomiar temperatury z pieca z centralnego, porównanie , ja ze zmienna alarmową, jeśli się zgadza to sygnał buzera co 250 ms.
4 przyciski:
1 - pozwala zwiększyć zmienna alarmową
2 - pozwala zmniejszyć zmienna alarmową
3- wyłącza buzer
4- po naciśnięciu jeśli załączy się alarm, wywołuje przerwę 10min w jego działaniu przy pomocy timer0 po czym jeśli temperatura dalej jest alarmowa uruchamia buzer ponownie.
Proszę o przejrzenie kodu i uwagi.
Zasada działania urządzenia jest prosta. Pomiar temperatury z pieca z centralnego, porównanie , ja ze zmienna alarmową, jeśli się zgadza to sygnał buzera co 250 ms.
4 przyciski:
1 - pozwala zwiększyć zmienna alarmową
2 - pozwala zmniejszyć zmienna alarmową
3- wyłącza buzer
4- po naciśnięciu jeśli załączy się alarm, wywołuje przerwę 10min w jego działaniu przy pomocy timer0 po czym jeśli temperatura dalej jest alarmowa uruchamia buzer ponownie.
Cytat:$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
Config 1wire = Portc.0
Config Portd = &B00000001
Portd = &B11111110
'*****************konfiguracja tajmera
Config Timer0 = Timer , Prescale = 256
On Timer0 Od1s
Dim Licz8ms As Byte
Enable Interrupts
Enable Timer0
Load Timer0 = 250
' ****************zmienne i procedury
Dim Czas As Word
Dim Lsb As Byte
Dim Msb As Byte
Dim Tempstr As String * 5
Dim Temp As Single
Dim Tempa As Integer
Dim Minus As Bit
Dim Bukl As Bit
Dim Temal As Single
Temal = 30
Declare Sub Odcztemp
Declare Sub Wb
'******************************************* przypisanie przyjaznych nazw
Buzzer Alias Pind.0
Onoff Alias Pind.1
Przp Alias Pind.2
Przm Alias Pind.3
Wk Alias Pind.4
Wylb Alias Pind.5
' definicja znaku stopnia '
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
' ****************************poczatke glownej petli
Do
Cls
Call Odcztemp
' If Bukl = 0 Then
If Minus = 0 Then
'wyświetla temperatury dodatnie
Lcd "Temp. Ak."
Locate 1 , 15
Lcd Tempstr ; Chr(0) ; "C"
Else
'wyświetla temperatury ujemne
Lcd "Temp. Ak."
Locate 1 , 15
Lcd Tempstr ; Chr(0) ; "C"
End If
'End If
Lowerline
Lcd "Temp. Al." ;
Locate 2 , 11
Lcd Temal
Locate 2 , 15
Lcd Chr(0) ; "C"
'kod buzzera ON OFF
If Onoff = 0 Then
Waitms 5 ' tu 50
Toggle Wk
Do
Loop Until Onoff = 1
Cls
If Wk = 1 Then
Lcd "Sygal alarmu"
Lowerline
Lcd "Wylaczony"
Else
Lcd "Sygal alarmu"
Lowerline
Lcd "Wlaczony"
End If
End If
'kod przycisku plus
If Przp = 0 Then
Waitms 5 ' tu 50
Do
Loop Until Przp = 1
Incr Temal
End If
'kod przycisku minus
If Przm = 0 Then
Waitms 5 ' tu 50
Do
Loop Until Przm = 1
Decr Temal
End If
' Kod Alarmowania
If Temal >= Temp And Wk = 1 Then ' sprawdza czy temper alarmowania spelnia warunek i czy buzer jest zalaczony
Set Buzzer
Waitms 250 'zalączam buzer w każdym takcie na przemiennie co 250ms
Reset Buzzer
Waitms 250 '
Set Buzzer
End If
'wyłaczenie buzera na 10 min
If Wylb = 0 Then
Waitms 50
Call Wb
End If
Loop
End
'***************************koniec głownej petli
Sub Odcztemp
1wreset 'reset magistrali 1-Wire
1wwrite &HCC 'opuszczenie zapisu numeru ID
1wwrite &H44 'start pomiaru temperatury
Waitms 1
' tu powinno byc 750 opóźnienie na czas pomiaru
1wreset 'reset magistrali 1-Wire
1wwrite &HCC 'opuszczenie zapisu numeru ID
1wwrite &HBE 'komenda odczytu zmierzonej
Lsb = 1wread():
Msb = 1wread():
1wreset
Reset Bukl
Reset Minus
If Err = 0 Then
Tempa = Msb * 256
Tempa = Tempa + Lsb
If Msb.7 = 0 Then
Temp = Tempa / 16
Else
Set Minus
Tempa = Not Tempa
Tempa = Tempa + 1
Temp = Tempa / 16
End If
Tempstr = Fusing(temp , "###.##") 'formatowanie do postaci 000.00
Else
Set Bukl
End If
End Sub
Sub Wb
Od1s:
Toggle Wk
Load Timer0 = 250 ' zaczynamy od 250
Incr Licz8ms ' zwiększam o 1 po każdym przepełnieniu
If Licz8ms = 125 Then ' jesli 125 przepełnień zeruje zmienna licz8ms a zwiększam zmienna czas o 1 az do 600 (10 min) wtedy aktywuje buzer
Licz8ms = 0
Incr Czas
If Czas = 600 Then
Toggle Wk
Czas = 0
End If
End If
End If
End Sub Wb
