赞助论坛
  • 4583阅读
  • 0回复

24C02读写问题,高手帮忙看下,谢谢! [复制链接]

楼层直达
发帖
2
精华
0
金币
6
威望
0
贡献
0
好评
0
注册
2010-10-28
楼主    hjaifeng 发表于: 2010-10-30 15:19:26 
;选用的是89C52 晶振12M 贴片24c02 ,问题是:这个程序我早在06年就在用了,
;效果一直很好,最近出现奇数地址读不出,写不进,偶数读写有时也很慢,很郁闷,
;原来用的是直插的,现在用的是贴片24c02,但现在用直插的测试效果也不如原来
;好用了。如有疑问可以联系我QQ:289171871,谢谢各位了。

CSCK2402    EQU   P0.2   ;24C02选通线引脚6
DAT2402        EQU   P0.3   ;24C02数据线引脚5


   ORG    0000H
GHE1:    NOP
   NOP
   LCALL    SAVE
   NOP
   NOP
   LCALL    DU_DATA        ;调读数据
   JMP    GHE1

   ;**********************************读数据
DU_DATA:
    MOV    3AH,#07H
   LCALL    D_USHU        
    MOV    20H,A        ;是否是第一次写1302数据状态数据暂存20H

   MOV    3AH,#01H    
   LCALL    D_USHU        ;读取器件数据
    MOV    27H,A        ;温度数据暂存27H

   MOV    3AH,#02H    
   LCALL    D_USHU        
    MOV    28H,A        ;定时开机时钟数据暂存28H

   MOV    3AH,#03H
   LCALL    D_USHU        
    MOV    29H,A        ;定时开机分钟数据暂存29H

   MOV    3AH,#04H    
   LCALL    D_USHU        
    MOV    3CH,A        ;定时关机时钟数据暂存3CH

   MOV    3AH,#05H
   LCALL    D_USHU        
    MOV    3FH,A        ;定时关机分钟数据暂存3FH

    MOV    3AH,#06H
   LCALL    D_USHU        
    MOV    37H,A        ;定时开关机状态数据暂存37H
    RET




SAVE:                ;保存设置数据
;    LCALL    SET1302        ;写时间
   MOV   4DH,#01H    ;写器件地址
   MOV   4EH,#00H        ;装入开机设置参数
   LCALL   XIE
   MOV   4DH,#02H    ;写器件地址
   MOV   4EH,#00H        ;装入设置参数
   LCALL   XIE
   MOV   4DH,#03H    ;写器件地址
   MOV   4EH,#00H        ;装入设置参数
   LCALL   XIE
   MOV   4DH,#04H    ;写器件地址
   MOV   4EH,#00H        ;装入设置参数
   LCALL   XIE
   MOV   4DH,#05H    ;写器件地址
   MOV   4EH,#00H        ;装入设置参数
   LCALL   XIE
   MOV   4DH,#06H    ;写器件地址
   MOV   4EH,#00H        ;装入设置参数
   LCALL   XIE
   MOV   4DH,#07H    ;写器件地址
   MOV   4EH,#00H        ;装入设置参数
   LCALL   XIE
   MOV   4DH,#08H    ;写器件地址
   MOV   4EH,#00H        ;装入设置参数
   LCALL   XIE
   MOV   4DH,#09H    ;写器件地址
   MOV   4EH,#00H        ;装入设置参数
   LCALL   XIE

   RET

;***************24C02读写程序******************
;****************************************************************
XIE:         LCALL    DELAY1        ;写
       CLR    DAT2402
       MOV    A,#10100000B
       LCALL    SUBS
       MOV    A,4DH        ;把待写入的地址从暂存地址移入A
       LCALL    SUBS
       MOV    A,4EH        ;设置数据从暂存地址移入A
       LCALL    SUBS
       CLR    DAT2402
       LCALL    DELAY50
       SETB    CSCK2402
       LCALL    DELAY50
       SETB    DAT2402
       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SUBS:        MOV    R0,#08H
LOOPU:        CLR    CSCK2402
       RLC    A
       MOV    DAT2402,C
       LCALL    DELAY50
       SETB    CSCK2402
       LCALL    DELAY50
       DJNZ    R0,LOOPU
       CLR    CSCK2402
       LCALL    DELAY50
       SETB    CSCK2402
REP:        MOV    C,DAT2402
       JC    REP
       CLR    CSCK2402
       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       ;;24C02读程序
D_USHU:       SETB    DAT2402
       SETB    CSCK2402
       CLR    DAT2402
       MOV    A,#10100000B
       LCALL    SUBS
       MOV    A,3AH
       LCALL    SUBS
       SETB    DAT2402
       SETB    CSCK2402
       CLR    DAT2402
       MOV    A,#10100001B
       LCALL    SUBS
       LCALL    SUBR
       CLR    DAT2402
       LCALL    DELAY50
       SETB    CSCK2402
       LCALL    DELAY50
       SETB    DAT2402
       LCALL    DELAY50
        RET

SUBR:        MOV    R0,#08H
L_OOP2:        SETB    CSCK2402
       MOV    C,DAT2402
       RLC    A
       CLR    CSCK2402
       LCALL    DELAY50
       DJNZ    R0,L_OOP2
       RET

DELAY50:    MOV    24H,#01H
DL200:        MOV    2AH,#0E0H    ;E0H
       DJNZ    2AH,$
       DJNZ    24H,DL200
       RET
;**************************************************
DELAY1:        MOV    R1,#10H;03
DEL11:        MOV    R2,#75H;75
DEL12:        MOV    R3,#0DH;0D0
DEL13:        DJNZ    R3,DEL13
       DJNZ    R2,DEL12
       DJNZ    R1,DEL11
       RET

END