DEFINE LCD_DREG PORTB ' Задать порт PIC-микроконтроллера для передачи данных на ЖКИ DEFINE LCD_DBIT 0 ' Задать первый вывод порта PORTB, который будет подключен к выводу DB4 ЖКИ DEFINE LCD_RSREG PORTD ' Задать порт PIC-микроконтроллера, который будет выдавать сигнал RS на ЖКИ DEFINE LCD_RSBIT 5 ' Задать вывод порта PORTд, с которого будет выдаваться сигнал RS на ЖКИ DEFINE LCD_EREG PORTD ' Задать порт PIC-микроконтроллера, который будет выдавать сигнал E на ЖКИ DEFINE LCD_EBIT 7 ' Задать вывод порта PORTд, с которого будет выдаваться сигнал 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] ' считывеам последующие 40 импульсов и не тратя времени на обработку заразу записываем 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] for i= 0 to 7 ' все, все размеры импульсов в массиве , датчик отдыхает, if dlimp[7-i] > 5 then ' а мы начинаем преобразовывать из длительности импульса vlagcel =vlagcel+(1< 5 then ' идут данные целой температуры,относим к 0 или 1 tempcel = tempcel+(1< 5 then ' summa = summa+(1< (vlagcel+tempcel) then ' делаем проверку суммируем влаг и темпер goto podgotovka ' endif lcdout $fe,1,"Vlag=",#vlagcel lcdout $fe,$c0,"Temp=",#tempcel goto podgotovka end