作过单总线的帮我看看这个程序好吗??急阿!!!!
pic16c72和ds2401 ,晶振是4m
有能帮我 的联系我阿!!急阿!!qq21404086 email:greatddq@163.com
MAIN1:
BCF INTCON,GIE
BSF STATUS,RP0 ;强制为一
MOVLW 8FH ;将10001111送给w
MOVWF OPTION_REG
MOVLW 7H ;00000111
MOVWF ADCON1
MOVLW 01H
MOVWF TRISB
BCF STATUS,RP0
; make all I/Os inputs
; the following illustrates how to write these eight values to EEPROM
; beginning at EEPROM address 06.
MOVLW BUFF_SIZE ; number of bytes of data
MOVWF N
MOVLW 40H ; beginning of data buffer
MOVWF FSR
CALL INIT ; intitialize DS2401
; the following shows how to read 8 bytes beginning at address 06
MOVLW 0CCH ; skip ROM
MOVWF O_BYTE
CALL OUT_BYTE
MOVLW 033H ; read memory into scratch pad
MOVWF O_BYTE
CALL OUT_BYTE
READ_1:
CALL IN_BYTE
MOVF I_BYTE, W
MOVWF INDF
INCF FSR, F
DECFSZ N, F
GOTO READ_1
; done reading
DONE:
GOTO START1
; The following are standard 1-Wire routines.
INIT:
BSF STATUS,RP0 ;强制为一
BCF TRISB,0
BCF STATUS,RP0
CALL PIN_HI
NOP
CALL PIN_LO
MOVLW .80 ; 800 us delay
CALL DELAY_10USEC
LOOP11:
BSF PORTB,0
;MOVLW .5
;CALL DELAY_10USEC
BSF STATUS,RP0 ;强制为一
BSF TRISB,0
BCF STATUS,RP0
WAIT_0:
BTFSC PORTB,0
GOTO WAIT_0
;MOVLW .24 ; 240 us delay
;CALL DELAY_10USEC
NOP
WAIT_1:
BTFSS PORTB,0
GOTO WAIT_1
;GOTO INIT
RETURN
IN_BYTE: ; returns byte in I_BYTE
MOVLW .8
MOVWF INDEX
CLRF I_BYTE
IN_BYTE_1:
BSF STATUS,RP0 ;强制为一
BCF TRISB,0
BCF STATUS,RP0
BCF STATUS,C
BCF PORTB,0;读前保持低电平
NOP
;BSF PORTB,0
BSF STATUS,RP0 ;强制为一
BSF TRISB,0
BCF STATUS,RP0
MOVF PORTB, W ; 7 usecs later, fetch from DATA_PIN
MOVWF TEMP
BTFSS TEMP, 0
BCF STATUS, C ; its a zero
BTFSC TEMP, 0
BSF STATUS, C ; its a one
RRF I_BYTE, F
MOVLW .4 ; now delay 60 usecs
CALL DELAY_10USEC
DECFSZ INDEX, F
GOTO IN_BYTE_1
MOVF I_BYTE, W ; return the result in W
BSF PORTB,0
RETURN
OUT_BYTE: ; sends O_BYTE to 2430
MOVLW .8
MOVWF INDEX
OUT_BYTE_1:
RRF O_BYTE, F
BTFSS STATUS, C
GOTO OUT_0
GOTO OUT_1
OUT_BYTE_2:
DECFSZ INDEX, F
GOTO OUT_BYTE_1
RETURN
OUT_0:
BSF STATUS,RP0 ;强制为一
BCF TRISB,0
BCF STATUS,RP0
BCF PORTB,0;传输开始时将它置低
NOP
;
MOVLW .4 ; for 60 usecs
CALL DELAY_10USEC
GOTO OUT_BYTE_2
OUT_1:
;CALL PIN_LO
BSF STATUS,RP0 ;强制为一
BCF TRISB,0
BCF STATUS,RP0
BCF PORTB,0;传输开始时将它置低
;NOP
;CALL DELAY_10USEC
BSF STATUS,RP0 ;强制为一
BSF TRISB,0
BCF STATUS,RP0
CALL PIN_HI
MOVLW .4 ; 60 usec delay
CALL DELAY_10USEC
GOTO OUT_BYTE_2
;;;;;;
PIN_HI:
BSF PIN_DIRS, DATA_PIN
MOVF PIN_DIRS, W
TRIS PORTB
RETURN
PIN_LO:
BCF PORTB, DATA_PIN
BCF PIN_DIRS, DATA_PIN
MOVF PIN_DIRS, W
TRIS PORTB
RETURN
DELAY_10USEC: ; provides a delay equal to W * 10 usecs
MOVWF LOOP1
DELAY_10USEC_1:
CLRWDT
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ LOOP1, F
GOTO DELAY_10USEC_1
RETURN[/fly]
发表时间:2003年4月2日16:58:28