کد:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 128
$swstack = 128
$framesize = 128
'************************************************************************** Baud
$baud = 9600
'************************************************************************ TIMER2
Config Timer2 = Timer , Prescale = 1024
Enable Interrupts
Enable Ovf2
On Ovf2 Clock
Stop Timer2
'*************************************************************************** ADC
Config Adc = Single , Prescaler = Auto
Start Adc
Enable Adc
'*************************************************************************** LCD
Config Lcdpin = Pin , Db4 = Pinb.0 , Db5 = Pind.7 , Db6 = Pind.6 , Db7 = Pind.5 , Rs = Pinb.1 , E = Pinb.2
Config Lcd = 16 * 2
Cursor Off
Cls
'***************************************************************** Config Output
Config Portb.4 = Output 'LED Temp Error
Config Portb.5 = Output 'LED Temp Normal
Config Portc.2 = Output 'RLY Temp Down
Config Portc.3 = Output 'RLY Temp Up
'****************************************************************** Alias Output
Rly_temp_down Alias Portc.2
Rly_temp_up Alias Portc.3
Led_temp_error Alias Portb.4
Led_temp_normal Alias Portb.5
Rly_temp_down = 0 : Rly_temp_up = 0 : Led_temp_error = 0 : Led_temp_normal = 0
'****************************************************************** Config Input
Config Pind.2 = Input 'Pin Ring GSM
'******************************************************************* Alias Input
Ri Alias Pind.2
'**************************************************************** Dim Var As ...
Dim T As Byte
Dim F0 As Byte
Dim T2 As Byte
Dim T3 As Byte
Dim T7 As Byte
Dim Show As Bit
Dim Mic As Byte
Dim Tik As Byte
Dim Var As Byte
Dim Din As Word
Dim Error As Byte
Dim Temp As Single
Dim Time_lcd As Byte
Dim Var_up As Single
Dim Var_dn As Single
Dim Sms As String * 200
Dim Code As String * 20
Dim T_dn As Eram Single
Dim T_up As Eram Single
Dim T_dn_flash As Single
Dim T_up_flash As Single
Dim Data_in As String * 1
Dim Data_sd As String * 4
Dim Str_var As String * 1
Dim _string As String * 3
Dim Var_eram As String * 4
Dim Data_eram As String * 4
Dim Tell1 As Eram String * 14
Dim Tell2 As Eram String * 14
Dim Tell3 As Eram String * 14
Dim Code_charge As String * 30
Dim Password As Eram String * 4
Dim Var_epeam As Eram String * 4
Code = Password
Waitms 10
Var_eram = Var_epeam
Waitms 10
If Code = Var_eram Then
Code = "0000"
Password = Code
Waitms 10
T_dn = 20
Waitms 10
T_up = 40
Waitms 10
End If
T_dn_flash = T_dn
Waitms 10
T_up_flash = T_up
Waitms 10
Var_dn = T_dn_flash + 1
If T_up_flash > 0 Then
Var_up = T_up_flash - 1
Else
Var_up = T_up_flash
End If
Start Timer2
'*******************************************************************************
Cls
Locate 1 , 1
Lcd " Please wait... "
Locate 2 , 1
Lcd " Print AT "
Wait 2
Print "AT"
Wait 2
Print "AT"
Wait 2
Print "AT"
Wait 4
Print "ATE0"
Locate 2 , 1
Lcd " Print ATE0 "
Wait 4
Print "AT+CMGF=1"
Locate 2 , 1
Lcd "Print AT+CMGF=1 "
Wait 4
Print "AT+MORING=1"
Locate 2 , 1
Lcd " Print AT+MORING"
Wait 2
Print "AT+CSMP=17,167,0,0"
Locate 2 , 1
Lcd ">CSMP=17,167,0,0"
Wait 2
Gosub Meno
'******************************************************************** Sub [Meno]
Meno:
Show = 0
Cls
Locate 1 , 1
Lcd " Please wait... "
Locate 2 , 1
Lcd "Setting up a SIM"
Wait 10
Print "AT+CMGD=4,4"
Show = 1
Do
''''''''''''''''''''''''''''''''''
If Error = 1 Then
Error = 2
Gosub Status_temp
End If
''''''''''''''''''''''''''''''''''
If Ri = 0 Then
Waitms 200
If Ri = 1 Then Gosub Read_sms
If Ri = 0 And Mic = 1 Then
Wait 2
Print "ATA"
Wait 2
Print "AT+CMIC=0,15"
End If
End If
''''''''''''''''''''''''''''''''''
If T7 >= 129 And Mic = 1 Then
T7 = 0 : Mic = 0
Print "ATH"
Wait 3
Sms = "MIC [ OFF ]"
Gosub Data_sms
End If
Loop
Return
'**************************************************************** Sub [Read_sms]
Read_sms:
Show = 0
Wait 2
Print "AT+CMGR=1"
Sms = "" : Data_in = "" : T = 0 : T3 = 0 : F0 = 1
Do
Var = Inkey()
Select Case Var
Case 0:
Case 13:
Case 10:
Case 34:
Incr T
If T = 8 Then F0 = 2
Case Else
Data_in = Chr(var)
If Data_in = "O" And T = 8 Then Exit Do
If Data_in = "o" And T = 8 Then Exit Do
If F0 = 2 Then
Sms = Sms + Chr(var)
End If
End Select
If T3 >= 3 Then Exit Do
Loop
F0 = 0 : T = 0 : T3 = 0
Data_sd = Mid(sms , 1 , 4)
Waitms 20
If Len(sms) = 8 Or Len(sms) = 19 Then
If Data_sd = "temp" Or Data_sd = "Temp" Or Data_sd = "TEMP" Then Gosub Run
If Data_sd = "mic1" Or Data_sd = "Mic1" Or Data_sd = "MIC1" Then Gosub Run
_string = Mid(sms , 1 , 2)
If _string = "dn" Or _string = "DN" Or _string = "Dn" Then Gosub Edit_temp
If _string = "up" Or _string = "UP" Or _string = "Up" Then Gosub Edit_temp
_string = Mid(sms , 1 , 3)
If _string = "tel" Or _string = "Tel" Or _string = "TEL" Then Gosub Edit_tell
End If
If Data_sd = "pass" Or Data_sd = "Pass" Or Data_sd = "PASS" And Len(sms) = 12 Then Gosub Edit_password
Gosub Meno
Return
'********************************************************* Sub [Verify_password]
Verify_password:
Show = 0
Code = "" : Data_eram = ""
Code = Mid(sms , 5 , 4)
Data_eram = Password
Waitms 10
If Code = Data_eram Then
Code = "OK" : Data_eram = ""
End If
Return
'*********************************************************** Sub [Edit_password]
Edit_password:
Gosub Verify_password
If Code = "OK" Then
Code = Mid(sms , 9 , 4)
Password = Code
Waitms 10
'''''''''''''''''''''''''Start Show LCD
Cls
Locate 1 , 1
Lcd "OK>Edit Password"
Locate 2 , 1
Lcd "<electronics 98>"
'''''''''''''''''''''''''END Show LCD
Sms = "OK >>> New Password : " + Code
Gosub Data_sms
End If
Gosub Meno
Return
'**************************************************************** Sub [Run_look]
Run:
Gosub Verify_password
If Code = "OK" Then
Cls
Locate 1 , 1
Lcd "OK>Verify SMS..."
Locate 2 , 1
Lcd "<electronics 98>"
If Data_sd = "mic1" Or Data_sd = "Mic1" Or Data_sd = "MIC1" Then
T7 = 0 : Mic = 1
Sms = "MIC [ ON ] For [ 120 s ]"
Gosub Data_sms
End If
If Data_sd = "temp" Or Data_sd = "Temp" Or Data_sd = "TEMP" Then
Gosub Status_temp
End If
End If
Gosub Meno
Return
'*************************************************************** Sub [Edit_tell]
Edit_tell:
Gosub Verify_password
If Code = "OK" Then
Code = Mid(sms , 9 , 11)
Cls
Locate 1 , 1
Lcd "OK>Verify SMS..."
Locate 2 , 1
Lcd "<electronics 98>"
If Data_sd = "tel1" Or Data_sd = "Tel1" Or Data_sd = "TEL1" Then
Tell1 = Code
Waitms 10
Sms = "Phone [ 1 ] Number Saved : [ " + Code + " ]"
Gosub Data_sms
End If
If Data_sd = "tel2" Or Data_sd = "Tel2" Or Data_sd = "TEL2" Then
Tell2 = Code
Waitms 10
Sms = "Phone [ 2 ] Number Saved : [ " + Code + " ]"
Gosub Data_sms
End If
If Data_sd = "tel3" Or Data_sd = "Tel3" Or Data_sd = "TEL3" Then
Tell3 = Code
Waitms 10
Sms = "Phone [ 3 ] Number Saved : [ " + Code + " ]"
Gosub Data_sms
End If
End If
Gosub Meno
Return
'*************************************************************** Sub [Edit_temp]
Edit_temp:
Gosub Verify_password
If Code = "OK" Then
Code = Mid(sms , 3 , 2)
Cls
Locate 1 , 1
Lcd "OK>Verify SMS..."
Locate 2 , 1
Lcd "<electronics 98>"
'//////////////////////////////////////////////////////////Edit Temp Up
If _string = "up" Or _string = "UP" Or _string = "Up" Then
T_up_flash = Val(code)
T_up = T_up_flash
Waitms 10
If T_up_flash > 0 Then
Var_up = T_up_flash - 1
Else
Var_up = T_up_flash
End If
Sms = "OK >>> Temp Up : " + Str(t_up_flash) + " C "
Gosub Data_sms
End If
'//////////////////////////////////////////////////////////Edit Temp Down
If _string = "dn" Or _string = "DN" Or _string = "Dn" Then
T_dn_flash = Val(code)
T_dn = T_dn_flash
Waitms 10
Var_dn = T_dn_flash + 1
Sms = "OK >>> Temp Down : " + Str(t_dn_flash) + " C "
Gosub Data_sms
End If
End If
Gosub Meno
Return
'**************************************************************** Sub [Data_sms]
Data_sms:
Var = 0 : Data_eram = "" : Code = ""
Incr T2
If T2 > 3 Then
T2 = 0
Gosub Meno
End If
If T2 = 1 Then
Code = Tell1
Waitms 10
Var = Asc(code)
If Var = 255 Or Code = "" Then Gosub Data_sms
End If
If T2 = 2 Then
Code = Tell2
Waitms 10
Var = Asc(code)
If Var = 255 Or Code = "" Then Gosub Data_sms
End If
If T2 = 3 Then
Code = Tell3
Waitms 10
Var = Asc(code)
If Var = 255 Or Code = "" Then Gosub Data_sms
End If
Var = 0 : T2 = 5
Print "AT+CMGS=" ; Chr(34) ; Code ; Chr(34)
Wait 1
Print Sms ; " / www.electronics98.com" ; Chr(26)
Gosub Data_sms
Return
'************************************************************* Sub [Status_Temp]
Status_temp:
Sms = ""
If Error = 2 Then
Sms = "Temp ERROR!!! / "
End If
Code = Fusing(temp , "#.#")
Sms = Sms + "Temp : " + Code + " C"
Waitms 20
Sms = Sms + " | Temp Down : " + Str(t_dn_flash) + " C"
Waitms 20
Sms = Sms + " | Temp up : " + Str(t_up_flash) + " C"
Waitms 20
Str_var = Str(rly_temp_down)
Sms = Sms + " | Relay Temp Down : " + Str_var
Waitms 20
Str_var = Str(rly_temp_up)
Sms = Sms + " | Relay Temp Up : " + Str_var
Waitms 20
Gosub Data_sms
Return
'******************************************************************* Sub [Clock]
Clock:
Incr Tik
Din = Din + Getadc(1)
If Tik >= 30 Then
Din = Din / Tik
Temp = Din / 2.04
Tik = 0
Gosub Clock_tik
End If
Return
'*************************************************************** Sub [Clock_tik]
Clock_tik:
If Temp <= T_dn_flash Then
Rly_temp_down = 1
If Error = 0 Then Error = 1
End If
If Temp > Var_dn Then
Rly_temp_down = 0
End If
If Temp >= T_up_flash Then
Rly_temp_up = 1
If Error = 0 Then Error = 1
End If
If Temp < Var_up Then
Rly_temp_up = 0
End If
''''''''''''''''''''''''''''''''''''''''''''''''''Status LEDs Temp
If Temp > Var_dn And Temp < Var_up Then Error = 0
If Error = 0 Then
Led_temp_error = 0
Toggle Led_temp_normal
Else
Led_temp_normal = 0
Toggle Led_temp_error
End If
''''''''''''''''''''''''''''''''''''''''''''''''''
If F0 <> 0 And T3 < 20 Then Incr T3
If F0 = 0 And T3 <> 0 Then T3 = 0
'''''''''''''''''''''''''''''''''''''''''''''''''' MIC
If Mic = 1 And T7 < 130 Then
Incr T7
End If
If Mic = 0 And T7 <> 0 Then
T7 = 0
End If
''''''''''''''''''''''''''''''''''''''''''''''''''Temperature Measurement
Incr Time_lcd
If Time_lcd > 4 Then Time_lcd = 1
If Show = 1 Then
Locate 1 , 1
Lcd " "
Locate 1 , 1
Lcd "> Temp : " ; Fusing(temp , "#.#") ; " c "
If Time_lcd = 1 Or Time_lcd = 2 Then
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd "Temp Down:" ; Fusing(t_dn_flash , "#.#") ; " c "
End If
If Time_lcd = 3 Or Time_lcd = 4 Then
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd "Temp Up :" ; Fusing(t_up_flash , "#.#") ; " c "
End If
End If
Return
'------------------------------END PROGRAM--------------------------------------
'Farhad Akbari
'www.electronics98.com