导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→作过单总线的帮我看看这个程序好吗??急阿!!!![greatddq]

 *第9724篇: 作过单总线的帮我看看这个程序好吗??急阿!!!!

  
楼 主:greatddq 2003年4月2日16:58
 作过单总线的帮我看看这个程序好吗??急阿!!!!
 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]


  
2楼:qingtao 2003年4月2日17:34
 程序乱跑,谁帮你看啊
  
3楼:greatddq 2003年4月3日01:08
 是我搞错了。。还有谁帮我看看阿。。急阿

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:原来发小字报要50个金钱呀!

[下一篇主题]:[求助]请教WINDRIVER: