|
Делаю вот так, времена вроде выдержаны. Чтение крайне не стабильно, постоянно проскакивает FF. Причем 1-й байт всегда читается правильно.
Убил 2 дня, меняя временные настройки - все равно, бывает 2-3 раза подряд читает правильно, затем несколько раз подряд с FF вместо одного или 2-х байт. HELP!
MOVLW .8 ; number of bytes of data
MOVWF N
MOVF Str_Dallas,W ;DATA_BUFF ; beginning of data buffer
MOVWF FSR
READ_ID_1: ; fetch each of 8 bytes
clrwdt
bcf INTCON,GIE ;Запрет прерывания
_1W_IN_BYTE: ; returns byte in I_BYTE
MOVLW .8
MOVWF INDEX
CLRF I_BYTE
_1W_IN_BYTE_1:
MOVLW .1 ; for 10 usecs
CALL DELAY_10USEC
CALL _1W_PIN_LO ; momentary low on DATA_PIN
nop ; 1us
nop
nop
nop
nop
CALL _1W_PIN_HI
movlw .13 ;4 delay 15us
movwf H'29' ;4
DEL_1USEC:
nop ;4
clrwdt ;4
decfsz H'29',F ;4
goto DEL_1USEC ;8
MOVF PORTB, W
MOVWF PORTB_MIRROR
BTFSS PORTB_MIRROR,6
BCF STATUS, C ; its a zero
BTFSC PORTB_MIRROR,6
BSF STATUS, C ; its a one
RRF I_BYTE, F
MOVLW .100 ; now delay 60 usecs
CALL DELAY_10USEC
DECFSZ INDEX, F
GOTO _1W_IN_BYTE_1
MOVF I_BYTE, W
E-mail: info@telesys.ru