Declare SHOW_SYSTEM_VARIABLES = OFF ' При симуляции в Proteus не показывать внутренние переменные Declare FSR_CONTEXT_SAVE = OFF ' Не заботиться о сохранении содержимого регистра FSR Declare Reminders = OFF ' Выключить напоминания компилятора Declare Warnings = OFF ' Выключить предупреждения компилятора Declare Optimiser_Level 0 ' Выключить оптимизацию программы Declare Bootloader = OFF ' Выключить загрузчик Device = 16F877A ' Используемый микроконтроллер Xtal = 20 ' Частота осциллятора 20 МГц Config DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_OFF, PWRTE_On, WDT_OFF, HS_OSC Declare Hserial_Baud 9600 ' Скорость передачи данных, бод Declare Hserial_TXSTA = %00100000 ' Включить передатчик USART Declare Hserial_RCSTA = %10010000 ' Включить приемник USART Declare Hserial_SPBRG 32 ' Значение регистра SPBRG для выбранной скорости Declare Hserial_Clear = On ' Автоматическая очистка бита ошибки переполнения TEMP con 1 HUMI con 2 Symbol statusregw = $06 Symbol statusregr = $07 Symbol measuretemp = $03 Symbol measurehumi = $05 Symbol resett = $1e Dim SCK As PORTC.3 Dim SDATA As PORTC.4 Dim i As Byte Dim f As Byte Dim value As Byte Dim errorr As Bit Dim mode As Byte Dim ack As Bit Dim vall As Byte Dim pktvalue As Word Dim pktchksum As Byte Dim humival As Word Dim tempval As Word Dim dewpoint As Byte Dim checksum As Byte Dim var1 As Dword Dim var2 As Word usetheSHT11: GoSub connectionreset value = measurehumi GoSub measure humival = pktvalue * 10 humival = Div32 4095 value = measuretemp GoSub measure tempval = pktvalue * 10 tempval = Div32 16383 'HRSIn var1,var2 'HRSOut var1 DelayMS 500 HRSOut Dec tempval,"c","-",Dec humival,"%",pktvalue,10,13 DelayMS 500 GoTo usetheSHT11 connectionreset: High SDATA Low SCK For i = 1 To 9 High SCK Low SCK Next GoSub transstart Return transstart: High SDATA Low SCK High SCK Low SDATA Low SCK High SCK High SDATA Low SCK Return measure: errorr = 0 GoSub transstart GoSub writebyte For i = 1 To 255 If SDATA = 0 Then GoTo meascomplete EndIf DelayMS 1 Next meascomplete: If SDATA != 0 Then errorr = 1 EndIf ack = 1 GoSub readbyte pktvalue.HighByte = vall GoSub readbyte pktvalue.LowByte = vall ack = 0 GoSub readbyte pktchksum = vall Return writebyte: errorr = 0 i = 0x80 While i > 0 If (i & value) != 0 Then High SDATA Else Low SDATA EndIf High SCK Low SCK i = i / 2 Wend High SDATA TRISC.4 = 1 High SCK errorr = SDATA Low SCK Return readbyte: vall = 0 High SDATA TRISC.4 = 1 i =0x80 While i > 0 High SCK If SDATA = 1 Then vall = vall | i EndIf Low SCK i = i / 2 Wend TRISC.4 = 0 SDATA = ack High SCK Low SCK High SDATA TRISC.4 = 1 Return softreset: errorr = 0 GoSub connectionreset value = resett GoSub writebyte Return