Странно, файл в Bascom'e не прикладывается. Просто выбрасывает (и в Explorer and Google Chrome)
Прикладываю текст программы просто в сообщении:
$regfile = "m8def.dat"
$crystal = 8000000
'$sim
'$hwstack = 64
'$swstack = 64
'$framesize = 64
'конфигурация подключения дисплея к портам МК
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2
Cursor Off
Cls
Config Portc.5 = Output
Config Portc.4 = Output ' ножка управления вентилятором
Portc.5 = 0
Portc.4 = 0
'объявление подпрограммы
Declare Sub Get_th(t As Byte , H As Byte)
'подключение датчика к PortD.6
Dht_put Alias Portd.6 'передаем данные
Dht_get Alias Pind.6 ' получаем данные
Dht_io_set Alias Ddrd.6
'Red 0 Alias Portd.2 ' присваиваем имя Red выводу 2 порта D
Vent_on_off Alias Ddrc.4 'переменная отображающая действия с вентилятором
Dim T As Byte 'температуры целая часть
Dim Tdecimal As Byte 'дробная часть температуры
Dim H As Byte 'влажности
Dim Hdecimal As Byte 'дробная часть влажности
Dim Crc As Byte 'байта четности
Dim Mybyte As Byte
Dim Sensor_data As String * 40 'сюда будут записываться данные отсылаемые датчиком
Dim Strmidle8 As String * 8 'промежуточная переменная для записи текстовых значений
Dim Count As Byte 'переменная для подсчета принятых бит
Dim Intcounter As Integer 'пепеменная счетчик
Dim Inthuminity_limit As Byte 'переменная для уставки по влажности
Dim Hold As Byte
'Dim
Enable Interrupts
Set Dht_io_set
Set Dht_put
' задаем начальные условия
Intcounter = 1
Inthuminity_limit = 40
Hold = 0
Do
'индикатор работы мк
Flag:
Waitms 2000
Call Get_th(t , H)
Cls
Lcd "їeјѕ: " ; T ; "." ; Tdecimal ; "C"
Lowerline
Lcd "і»a¶: " ; H ; "." ; Hdecimal ; "%"
'Условие отсечки ошибочного опроса счетчика
If H > 4 Then
' Условия роста влажности
If H > Hold Then
'Условия превышения значением влажности величины предела
If H > Inthuminity_limit Then
Set Portc.4 'включаем вентилятор
Wait 30
Hold = H 'присваеваем влажность старому значению влажности
Goto Flag 'переходим в начало цикла
Else
Hold = H
Goto Flag 'переходим в начало цикла
End If
Else
If H > Inthuminity_limit Then
Set Portc.4
Wait 30
Intcounter = Intcounter + 1 'приращение счетчика на случай если влажность больше не падает
Hold = H 'присваеваем влажность старому значению влажности
' проверка счетчика на случай падения влажности
If Intcounter > 11 Then 'тут менять уставку времени работы после снижения влажности
Reset Portc.4
Intcounter = 1
Else
End If
Goto Flag
Else
Hold = H
Reset Portc.4 'выключаем вентилятор
Goto Flag
End If
End If
Else
Goto Flag
End If
Loop
Sub Get_th(t As Byte , H As Byte)
Count = 0
Sensor_data = ""
Config Pind.6 = Output : Portd.6 = 0
'Set Dht_io_set 'делаем PD.6 выходом
'Reset Dht_put 'прижимаем шину к земле
Waitms 20 'ждем не менее 18мс
Set Dht_put 'отпускаем шину
Waitus 16 ' было 30 мкрс
Reset Dht_io_set
Config Pind.6 = Input
'делаем PD.6 входом
Waitus 40
'ждем 40 мкс
If Dht_get = 1 Then 'если на нем по прежнему 1
'If Pind.6 = 1 Then
H = 1 'значит датчик не ответил
Exit Sub 'выходим из подпрограммы
End If
'если датчик ответил и прижал шину к земле продолжаем работу
Waitus 80 'ждем еще 80 мкс
Set Dht_io_set
Waitus 1
Reset Dht_io_set
'If Dht_get = 0 Then 'если на линии по прежнему 0
If Pind.6 = 0 Then
H = 2 'значит датчик сошел с ума
Exit Sub 'выходим из подпрограммы
End If
'если все нормально и датчик ответил правильно, тогда продолжаем
While Dht_get = 1 : Wend 'ждем пока на шине появится 1
Do 'начинаем принимать 40 бит данных
While Dht_get = 0 : Wend 'ждем появления на шине 0
Waitus 30 'после появления 0 ждем 30мкс
If Dht_get = 1 Then 'если на шине 1
Sensor_data = Sensor_data + "1" 'записываем в переменную эту единицу
While Dht_get = 1 : Wend 'и ждем пока датчик отправит следующий бит
Else 'иначе, если там был 0
Sensor_data = Sensor_data + "0" 'записываем этот 0 в переменную
End If
Incr Count 'увеличиваем счетчик на 1
Loop Until Count = 40 'повторяем пока счетчик не досчитает до 40
Set Dht_io_set
Set Dht_put
'начинаем раскладывать полученные данные
Strmidle8 = Left(sensor_data ,

'берем левые 8 символов переменной
H = Binval(strmidle8) 'это целая часть влажности
Strmidle8 = Mid(sensor_data , 9 ,

Hdecimal = Binval(strmidle8) ' дробная часть влажности
Strmidle8 = Mid(sensor_data , 17 ,

'вытаскиваем 8 символов из середины
T = Binval(strmidle8) 'это целая часть температуры
Strmidle8 = Mid(sensor_data , 24 ,

'вытаскиваем 8 символов из середины
Tdecimal = Binval(strmidle8)
Strmidle8 = Right(sensor_data ,

'правые 8 символов
Crc = Binval(strmidle8) 'проверочные данные
'проверка контрольной суммы
Mybyte = H + Hdecimal 'складываем значение температуры и влажности
Mybyte = Mybyte + T
Mybyte = Mybyte + Tdecimal
If Mybyte <> Crc Then 'если контрольная сумма не сошлась
H = 3 'значит полученные данные не верны
End If
End Sub