DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0 ' вывод порта PORTB, который будет подключен к выводу DB4 ЖКИ
DEFINE LCD_RSREG PORTD ' сигнал RS на ЖКИ
DEFINE LCD_RSBIT 5 ' сигнал RS на ЖКИ
DEFINE LCD_EREG PORTD ' сигнал E на ЖКИ
DEFINE LCD_EBIT 7 ' сигнал E на ЖКИ
DEFINE LCD_BITS 4 ' Задать 4-битный режим обмена информацией для ЖКИ
DEFINE LCD_LINES 2 'опред тип ЖКИ'
define lcd_commandus 2000 'время задержки между командами на ЖКИ'
define lcd_dataus 50
symbol dht = portd.1 'даем имя порту с датчиком
dlimp1 var byte ' переменная для первого импульса
dlimp var byte[40] ' массив для 40 остальных импулсов
vlagcel var byte 'переменная для целой влажности- первые 8 импульсов
tempcel var byte 'перем для целой температуры - следующ через 8
summa var word 'перемен для суммы ( контрольная цифра)
i var byte
' для дробных не создаю даже переменных , там все нули
podgotovka:
pause 1000 ' устаканиваем
clear 'обнуляем все наши перемнные!
TRISd.1 = 0 'задаем порт д.1 на выход
dht = 1 : pause 10 'даем на датчик 1 и ждем
dht = 0 : pause 25 'прижимаем к земле и ждем
dht =1 'отпускаем и ждем
trisd.1 = 1 : pauseus 40 ' задаем порт на вход
pulsin dht,1,dlimp1 ' меряем самый первый сигнал,он должен быть не
if dlimp1 <8 then ' менее 8 - (при этой частоте 8*10 = 80мск),если нет ,
goto podgotovka ' то возвращаемся к длине 1 импульса
endif
pulsin dht,1,dlimp[0]:pulsin dht,1,dlimp[1]:pulsin dht,1,dlimp[2]:pulsin dht,1,dlimp[3]
pulsin dht,1,dlimp[4]:pulsin dht,1,dlimp[5]:pulsin dht,1,dlimp[6]:pulsin dht,1,dlimp[7]
pulsin dht,1,dlimp[8]:pulsin dht,1,dlimp[9]:pulsin dht,1,dlimp[10]:pulsin dht,1,dlimp[11]
pulsin dht,1,dlimp[12]:pulsin dht,1,dlimp[13]:pulsin dht,1,dlimp[14]:pulsin dht,1,dlimp[15]
pulsin dht,1,dlimp[16]:pulsin dht,1,dlimp[17]:pulsin dht,1,dlimp[18]:pulsin dht,1,dlimp[19]
pulsin dht,1,dlimp[20]:pulsin dht,1,dlimp[21]:pulsin dht,1,dlimp[22]:pulsin dht,1,dlimp[23]
pulsin dht,1,dlimp[24]:pulsin dht,1,dlimp[25]:pulsin dht,1,dlimp[26]:pulsin dht,1,dlimp[27]
pulsin dht,1,dlimp[28]:pulsin dht,1,dlimp[29]:pulsin dht,1,dlimp[30]:pulsin dht,1,dlimp[31]
pulsin dht,1,dlimp[32]:pulsin dht,1,dlimp[33]:pulsin dht,1,dlimp[34]:pulsin dht,1,dlimp[35]
pulsin dht,1,dlimp[36]:pulsin dht,1,dlimp[37]:pulsin dht,1,dlimp[38]:pulsin dht,1,dlimp[39]
' считываеам последующие 40 импульсов и не тратя времени на обработку сразу записываем
' их в массив, потом в свободной обстановке, без спешки мы их тихонечко обработаем
' у этого датчика нет дробных частей влажности и температуры - всегда идут нули
'но считывать их все равно надо ,что бы не нарушать порядок следования элементов массива
for i= 0 to 7 ' всё, все размеры импульсов в массиве , датчик отдыхает,
if dlimp[7-i] > 5 then ' а мы начинаем преобразовывать из длительности импульса
vlagcel =vlagcel+(1<<i) ' нули и единицы
endif
next i
for i= 0 to 7 ' вынимаем по очереди все длины импульсов - здесь уже
if dlimp[23-i] > 5 then ' идут данные целой температуры,относим к 0 или 1
tempcel = tempcel+(1<<i) 'отделив единицы сносим-умножаем на разряд
endif
next i
for i= 0 to 7 '
if dlimp[39-i] > 5 then '
summa = summa+(1<<i) '
endif
next i
if summa <> (vlagcel+tempcel) then ' делаем проверку - суммируем влажности и температуры
goto podgotovka '
endif
lcdout $fe,1,"Vlag=",#vlagcel
lcdout $fe,$c0,"Temp=",#tempcel
goto podgotovka
end