NEWTEMP CALL DSRX8 ;проверить готовность датчика ADDLW 1 BTFSS STATUS,Z GOTO NEWTEMP ;продолжать пока датчик не готов GETTEMP CALL DSRESET ;инициализация перед посылкой команд BTFSS STATUS,Z RETURN ;датчик неисправен MOVLW 0XCC CALL DSTX8 ;пропустить определение номера датчика MOVLW 0XBE CALL DSTX8 ;инициализация чтения данных CALL DSRX8 ;чтение температуры MOVWF DSMAG CALL DSRX8 ;чтение знака температуры MOVWF DSSIGN CALL DSRESET ;сброс перед посылкой команд MOVLW 0XCC CALL DSTX8 ;пропустить определение номера датчика MOVLW 0X44 CALL DSTX8 ;начать новое измерение температуры MOVF DSSIGN,W ;проверить значение знака температуры, BTFSC STATUS,Z ;которое должно быть 255 или 0. GOTO OKTMP ADDLW 1 BTFSS STATUS,Z RETURN OKTMP CLRW RETURN ;макросы для перевода порта микроконтроллера на ввод и вывод DQLOW MACRO BCF PORTA,DSBIT ;DSBIT - это номер порта, куда подключен датчик BSF STATUS,RP0 BCF TRISA,DSBIT BCF STATUS,RP0 ENDM DQHIZ MACRO BSF STATUS,RP0 BSF TRISA,DSBIT BCF STATUS,RP0 ENDM ;подпрограмма задержки, счетчик в рабочем регистре PAUSE MOVWF TMP0 LOOP1 CLRWDT DECFSZ TMP0,F GOTO LOOP1 RETURN ;подпрограмма инициализации датчика для приема и передачи данных DSRESET DQLOW MOVLW .150 CALL PAUSE NN BCF INTCON,GIE BTFSC INTCON,GIE GOTO NN DQHIZ MOVLW .17 CALL PAUSE ;ожидание ответа датчика в течение 67 мкс MOVF PORTA,W BSF INTCON,GIE ANDLW 1<