找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2558|回復(fù): 0
收起左側(cè)

單片機(jī)驅(qū)動ds2433 eeprom無法寫入數(shù)據(jù)的問題

[復(fù)制鏈接]
ID:470867 發(fā)表于 2019-1-20 14:57 | 顯示全部樓層 |閱讀模式
下面是我向ds2433寫如兩個字節(jié)的程序,可是怎么都寫不進(jìn)去,用protues模擬看,可以寫進(jìn)暫存器,也可以讀暫存器和ds2433的memery,但是就是寫不盡memery,請大神幫助看看哪里出現(xiàn)問題了,程序執(zhí)行過程中,ds2433的e/s寄存器的PS位始終是1,按道理應(yīng)該是零,這是只讀寄存器,未找到原因。   DQ       BIT P3.7 ; 1 wire line
;***************************************************************
   ORG 0000H
   LJMP MAIN  

; Main program
MAIN:   
        LCALL RSTSNR      ; Init of the DS2433
         JNB   F0,KEND       ;查看f0位,是零則器件無應(yīng)答,跳轉(zhuǎn)到程序尾   
         MOV   R0,#0CCH            ;cc命令是越過rom
         LCALL SEND_BYTE   
         MOV   R0,#00FH    ;0fh寫暫存器
         LCALL SEND_BYTE   ;
                 MOV   R0,#001h                  ;TA1地址低位
         LCALL SEND_BYTE   ;
                 MOV   R0,#000h                  ;TA2地址高位
         LCALL SEND_BYTE   ; Send a Convert Command   
                 MOV   R0,#0AAH                   ;第一個字節(jié)
         LCALL SEND_BYTE   ; Send a Convert Command  
                 MOV   R0,#0cch                   ;第二個字節(jié)
         LCALL SEND_BYTE   ; Send a Convert Command   

             mov   r6,#0ffh
                 djnz      r6,$           

                 LCALL RSTSNR      ; Init of the ds2433
         JNB   F0,KEND       ;查看f0位,是零則器件無應(yīng)答,跳轉(zhuǎn)到程序尾   
         MOV   R0,#0CCH            ;cc命令是越過rom
         LCALL SEND_BYTE   
         MOV   R0,#0aah   ; 0aa讀暫存器
         LCALL SEND_BYTE   ; Send a Convert Command   
                lcall   readbyte          ;讀取TA1、TA2、ES寄存器和兩個字節(jié)數(shù)據(jù)
                mov 33h,a
                lcall        readbyte
                mov  34h,a
                lcall   readbyte
                mov  35h,a
                lcall        readbyte
                mov  36h,a
                lcall   readbyte
                mov  37h,a

mov   r6,#0ffh
                 djnz      r6,$         

                  LCALL RSTSNR      ; Init of the ds2433
                  JNB   F0,KEND
                 MOV   R0,#0CCH            ;cc命令是越過rom
        LCALL SEND_BYTE   
         MOV   R0,#055H    ;055h從暫存器寫到內(nèi)存
         LCALL SEND_BYTE   ; Send a Convert Command   
                 MOV   R0,33h                   ;TA1地址低位
         LCALL SEND_BYTE   ; Send a Convert Command   
                          MOV   R0,34h                  ;TA2地址高位
         LCALL SEND_BYTE   ; Send a Convert Command   
                          MOV   R0,35h                  ;ES寄存器
         LCALL SEND_BYTE   ; Send a Convert Command  

                 setb   DQ

                 mov r7,#0ffh
loop12:                 mov   r6,#0ffh
                 djnz      r6,$
                 djnz   r7,loop12
                                                        
KEND:   

         ljmp  main
;**********************************************************
;          ;*************************************************
; Read a byte from the 1 wire line
READBYTE:
         MOV   R5,#8
READ1:   LCALL READ
         RRC   A
         DJNZ  R5,READ1 ;
         MOV   R0,A
         RET
;*************************************************
;*************************************************
READ:    SETB  DQ ;
         NOP
         NOP
         CLR   DQ
         NOP
         NOP
         SETB  DQ ;
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         MOV   C,DQ
         MOV   R6,#23
         DJNZ  R6,$
         RET


;*************************************************
; Send a byte to the 1 wire line
SEND_BYTE: ;
         MOV   A,R0
         MOV   R5,#8
SEN3:    CLR   C
         RRC   A
         JC    SEN1
         LCALL WRITE_0
         SJMP  SEN2
SEN1:    LCALL WRITE_1
SEN2:    DJNZ  R5,SEN3 ;
         RET

;*************************************************
; Reset 1 wire line
RSTSNR:  SETB  DQ
         NOP
         NOP
         CLR   DQ
         MOV   R6,#250 ;
         DJNZ  R6,$
         MOV   R6,#50
         DJNZ  R6,$
         SETB  DQ ;
         MOV   R6,#15
         DJNZ  R6,$
         CALL  CHCK ;
         MOV   R6,#60
         DJNZ  R6,$
         SETB  DQ
         RET


;*************************************************
; low level subroutines
CHCK:    MOV   C,DQ
         JC    RST0
         SETB  F0 ;         應(yīng)答成功
         SJMP  CHCK0
RST0:    CLR   F0 ;
CHCK0:   RET

;*************************************************
WRITE_0:
         CLR   DQ
         MOV   R6,#30
         DJNZ  R6,$
         SETB  DQ
         RET
;*************************************************
WRITE_1:
         CLR   DQ
         NOP
         NOP
         NOP
         NOP
         NOP
         SETB  DQ
         MOV   R6,#30
         DJNZ  R6,$
         RET

;*************************************************

         end

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表