کد:
$regfile = "m32def.dat"
$crystal = 1000000
'----------------------------------------------------------------config lcd
Config Lcd = 20 * 4
Config Lcdpin = Pin , Rs = Portc.7 , E = Portc.6 , Db4 = Portc.5 , _
, Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2
Cursor Off
Cls
Locate 1 , 1
Lcd "hello"
Waitms 1000
Cls
'----------------------------------------------------------------config adc
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'-----------------------------------------------------------all config & alias
Config Portd.0 = Output 'portd
Phoner Alias Portd.0
Config Portd.3 = Output
M1 Alias Portd.3
Config Portd.4 = Output
M2 Alias Portd.4
Config Portd.5 = Output
F1 Alias Portd.5
Config Portd.6 = Output
F2 Alias Portd.6
Config Portd.7 = Output
'portb
Config Portb.4 = Output
Alarm Alias Portb.4
Config Portb.5 = Output
Meror Alias Portb.5
Config Portb.6 = Output
Dcontrol Alias Portb.6
Config Portb.7 = Output
Stoperor Alias Portb.7
Reset Stoperor
Reset M1
Reset M2
Reset F1
Reset F2
Reset Phoner
Reset Alarm
Reset Meror
Reset Dcontrol
'---------------------------------------------------------------interupt
On Int0 Heror
Enable Int0
Config Int0 = Rising
Enable Interrupts
'-----------------------------------------------------------dim
Dim Hc1 As Word
Dim Tc1 As Word
Dim Hc2 As Single
Dim Tc2 As Single
Dim Hc3 As Single
Dim Tc3 As Single
Dim Hc As Word
Dim Tc As Word
Dim Tmax As Word
Dim Tmin As Word
Dim Hmax As Word
Dim Hmin As Word
'-----------------------------------------------------------dim sht
Dim Ctr As Byte
Dim Dataword1 As Word
Dim Dataword2 As Word
Dim Command As Byte
Dim Temp1 As String * 4
Dim Temp2 As String * 4
Dim H1 As String * 4
Dim H2 As String * 4
Dim Calc As Single
Dim Calc2 As Single
Dim Rhlinear As Single
Dim Rhlintemp As Single
Dim Tempc As Single
Dim Tempf As Single
Dim C As Single
Dim D As Single
Dim E As Single
Dim E1 As Word
Dim E2 As Word
Dim Rhlintemp1 As Word
Dim Rhlintemp2 As Word
Const C1 = -4
Const C2 = 0.0405
Const C3 = -0.0000028
Const T1c = .01
Const T2 = .00008
Const T1f = .018
'------------------------------------------------------- sht1
Sck1 Alias Portb.0
Dataout1 Alias Portb.1
Datain1 Alias Pinb.1
Read1 Alias Portb.2
Declare Sub Getit1()
'------------------------------------------------------- sht2
Sck2 Alias Portc.0
Dataout2 Alias Portc.1
Datain2 Alias Pinc.1
Read2 Alias Portd.7
Declare Sub Getit2()
'-----------------------------------------------------------start sht1
Ddrb = &B11111111
Config Pinb.0 = Output 'sck
Config Pinb.1 = Output 'data
Set Dataout1
For Ctr = 1 To 12
Set Sck1
Waitus 2
Reset Sck1
Waitus 2
Next Ctr
Set Read1
'-----------------------------------------------------------start sht2
Ddrc = &B11111111
Config Pinc.0 = Output 'sck
Config Pinc.1 = Output 'data
Set Dataout2
For Ctr = 1 To 12
Set Sck2
Waitus 2
Reset Sck2
Waitus 2
Next Ctr
Set Read2
'------------------------------------------------------------main
Main:
Do
Locate 3 , 1
Lcd "m1:"
Locate 3 , 8
Lcd "m2:"
Locate 3 , 15
Lcd "tc="
Locate 4 , 1
Lcd "f1:"
Locate 4 , 8
Lcd "f2:"
Locate 4 , 15
Lcd "hc="
Hc1 = Getadc(0)
Tc1 = Getadc(1)
Tc2 = Tc1 / 1023
Hc2 = Hc1 / 1023
Tc3 = Tc2 * 80
Hc3 = Hc2 * 90
Tc = Round(tc3)
Hc = Round(hc3)
Locate 3 , 18
Lcd Tc ; " "
Locate 4 , 18
Lcd Hc ; "% "
Tmax = Tc + 2
Tmin = Tc - 2
Hmax = Hc + 2
Hmin = Hc - 2
Gosub Sht1
Waitms 10
Gosub Sht2
Waitms 10
If E1 < Tmin Then
Set M1
Locate 3 , 4
Lcd "on "
End If
If E1 > Tmax Then
Reset M1
Locate 3 , 4
Lcd "off "
End If
If E2 < Tmin Then
Set M2
Locate 3 , 11
Lcd "on "
End If
If E2 > Tmax Then
Reset M2
Locate 3 , 11
Lcd "off "
End If
If Rhlintemp1 > Hmin Then
Set F1
Locate 4 , 4
Lcd "on "
End If
If Rhlintemp1 < Hmax Then
Reset F1
Locate 4 , 4
Lcd "off "
End If
If Rhlintemp2 > Hmin Then
Set F2
Locate 4 , 11
Lcd "on "
End If
If Rhlintemp2 < Hmax Then
Reset F2
Locate 4 , 11
Lcd "off "
End If
Loop
End
'-------------------------------------------------------------------end main
'************************************************************
'-------------------------------------------------------------sht1
Sht1:
Command = &B00000011
Reset Read1
Call Getit1
Set Read1
Tempf = T1f * Dataword1
Tempf = Tempf - 40
Tempc = T1c * Dataword1
Tempc = Tempc - 40
C = Tempf - 32
D = C * 5
E = D / 9
E1 = Round(e)
Temp1 = Fusing(e , "##.#")
Locate 1 , 1
Lcd "T1=" ; Temp1 ; " "
Command = &B00000101
Reset Read1
Call Getit1()
Set Read1
Calc = C2 * Dataword1
Calc2 = Dataword1 * Dataword1
Calc2 = C3 * Calc2
Calc = Calc + C1
Rhlinear = Calc + Calc2
Calc = T2 * Dataword1
Calc = Calc + T1c
Calc2 = Tempc - 25
Calc = Calc2 * Calc
Rhlintemp = Calc + Rhlinear
Rhlintemp1 = Round(rhlintemp)
H1 = Fusing(rhlintemp , "##.#")
Locate 2 , 1
Lcd "h1=" ; H1 ; "% "
Return
'----------------------------------------------------------------sht2
Sht2:
Command = &B00000011
Reset Read2
Call Getit2
Set Read2
Tempf = T1f * Dataword2
Tempf = Tempf - 40
Tempc = T1c * Dataword2
Tempc = Tempc - 40
C = Tempf - 32
D = C * 5
E = D / 9
E2 = Round(e)
Temp2 = Fusing(e , "##.#")
Locate 1 , 10
Lcd "T2=" ; Temp2 ; " "
Command = &B00000101
Reset Read2
Call Getit2()
Set Read2
Calc = C2 * Dataword2
Calc2 = Dataword2 * Dataword2
Calc2 = C3 * Calc2
Calc = Calc + C1
Rhlinear = Calc + Calc2
Calc = T2 * Dataword2
Calc = Calc + T1c
Calc2 = Tempc - 25
Calc = Calc2 * Calc
Rhlintemp = Calc + Rhlinear
Rhlintemp2 = Round(rhlintemp)
H2 = Fusing(rhlintemp , "##.#")
Locate 2 , 10
Lcd "h2=" ; H2 ; "% "
Return
'-------------------------------------------------------------- getit 1
Sub Getit1()
Local Datavalue As Word
Local Databyte As Byte
Set Sck1
Reset Dataout1
Reset Sck1
Set Sck1
Set Dataout1
Reset Sck1
Shiftout Dataout1 , Sck1 , Command , 1
Ddrb = &B11111101
Config Pinb.1 = Input
Set Sck1
Reset Sck1
Waitus 10
Bitwait Pinb.1 , Reset
Shiftin Datain1 , Sck1 , Databyte , 1
Datavalue = Databyte
Ddrb = &B11111111
Config Pinb.1 = Output
Reset Dataout1
Set Sck1
Reset Sck1
Ddrb = &B11111101
Config Pinb.1 = Input
Shiftin Datain1 , Sck1 , Databyte , 1
Shift Datavalue , Left , 8
Datavalue = Datavalue Or Databyte
Dataword1 = Datavalue
Ddrb = &B11111111
Config Pinb.1 = Output
Reset Dataout1
Set Sck1
Reset Sck1
Ddrb = &B11111101
Config Pinb.1 = Input
Shiftin Datain1 , Sck1 , Databyte , 1
Ddrb = &B11111111
Config Pinb.1 = Output
Set Dataout1
Set Sck1
Reset Sck1
End Sub
'------------------------------------------------------------------ getit 2
Sub Getit2()
Local Datavalue As Word
Local Databyte As Byte
Set Sck2
Reset Dataout2
Reset Sck2
Set Sck2
Set Dataout2
Reset Sck2
Shiftout Dataout2 , Sck2 , Command , 1
Ddrc = &B11111101
Config Pinc.1 = Input
Set Sck2
Reset Sck2
Waitus 10
Bitwait Pinc.1 , Reset
Shiftin Datain2 , Sck2 , Databyte , 1
Datavalue = Databyte
Ddrc = &B11111111
Config Pinc.1 = Output
Reset Dataout2
Set Sck2
Reset Sck2
Ddrc = &B11111101
Config Pinc.1 = Input
Shiftin Datain2 , Sck2 , Databyte , 1
Shift Datavalue , Left , 8
Datavalue = Datavalue Or Databyte
Dataword2 = Datavalue
Ddrc = &B11111111
Config Pinc.1 = Output
Reset Dataout2
Set Sck2
Reset Sck2
Ddrc = &B11111101
Config Pinc.1 = Input
Shiftin Datain2 , Sck2 , Databyte , 1
Ddrc = &B11111111
Config Pinc.1 = Output
Set Dataout2
Set Sck2
Reset Sck2
End Sub
'-------------------------------------------------------h1eror
Heror:
Reset M1
Reset M2
Reset F1
Reset F2
Set Meror
Set Phoner
Waitms 50
Reset Phoner
Set Alarm
Waitms 500
Reset Alarm
Cls
Locate 1 , 1
Lcd " EROR "
Locate 2 , 1
Lcd " HITER - EROR "
Locate 3 , 1
Lcd " EROR "
Locate 4 , 1
Lcd " PRES STOP EROR "
Bitwait Stoperor , Set
Reset Meror
Cls
Goto Main
Return
مشکل میدونی از کجا بود؟