找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2006|回复: 0
收起左侧

单片机驱动ds2433 eeprom无法写入数据的问题

[复制链接]
ID:470867 发表于 2019-1-20 14:57 | 显示全部楼层 |阅读模式
下面是我向ds2433写如两个字节的程序,可是怎么都写不进去,用protues模拟看,可以写进暂存器,也可以读暂存器和ds2433的memery,但是就是写不尽memery,请大神帮助看看哪里出现问题了,程序执行过程中,ds2433的e/s寄存器的PS位始终是1,按道理应该是零,这是只读寄存器,未找到原因。   DQ       BIT P3.7 ; 1 wire line
;***************************************************************
   ORG 0000H
   LJMP MAIN  

; Main program
MAIN:   
        LCALL RSTSNR      ; Init of the DS2433
         JNB   F0,KEND       ;查看f0位,是零则器件无应答,跳转到程序尾   
         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                   ;第一个字节
         LCALL SEND_BYTE   ; Send a Convert Command  
                 MOV   R0,#0cch                   ;第二个字节
         LCALL SEND_BYTE   ; Send a Convert Command   

             mov   r6,#0ffh
                 djnz      r6,$           

                 LCALL RSTSNR      ; Init of the ds2433
         JNB   F0,KEND       ;查看f0位,是零则器件无应答,跳转到程序尾   
         MOV   R0,#0CCH            ;cc命令是越过rom
         LCALL SEND_BYTE   
         MOV   R0,#0aah   ; 0aa读暂存器
         LCALL SEND_BYTE   ; Send a Convert Command   
                lcall   readbyte          ;读取TA1、TA2、ES寄存器和两个字节数据
                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从暂存器写到内存
         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 ;         应答成功
         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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表