Доброе время суток. Попытался сделать термометр на PIC16F628A, DS1820 вывод на ЖКИ Winstar WH1601. Схема в Proteus работает, хотя есть некая погрешность. При запуске на железе на ЖКИ выдает результат "654.11 С", при этом никак не зависит от температуры датчика. Подскажите пожалуйста в чем ошибка.
Код: temperature Var Word ' Temperature storage
count_remain Var Byte ' Count remaining
count_per_c Var Byte ' Count per degree C
DQ1 Var PORTA.0 ' One-wire data pin
Define LCD_DREG PORTB
Define LCD_DBIT 4
Define LCD_RSREG PORTA
Define LCD_RSBIT 2
Define LCD_EREG PORTA
Define LCD_EBIT 3
define LCD_LINES 1
DEFINE LCD_BITS 4
DEFINE LCD_COMMANDUS 2000
DEFINE LSD_DATAUS 50
CMCON=7
TRISB = 0
portb = %11110000 ' Выводы, связанные с ЖКИ
TRISA = %00000011 ' A0 A1 на вход
PORTA.0=1
OWOut DQ1, 1, [$CC, $44] ' Старт измерения температуры 1
Pause 1000
mainloop:
OWOut DQ1, 1, [$CC, $44] ' Start temperature conversion
OWOut DQ1, 1, [$CC, $BE] ' Read the temperature
OWIn DQ1, 0, [temperature.LOWBYTE, temperature.HIGHBYTE, Skip 4, count_remain, count_per_c]
' Calculate temperature in degrees C to 2 decimal places (not valid for negative temperature)
temperature = (((temperature >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
Lcdout $fe, 1, DEC (temperature / 100), ".", DEC2 temperature, " C"
Pause 1000 ' Display about once a second
Goto mainloop ' Do it forever
Спасибо