导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→高手请帮忙!!!24C02关机时间长就没用,连续开机有记忆!

* 96873: 高手请帮忙!!!24C02关机时间长就没用,连续开机有记忆!!!

   zhaobao51 
zhaobao51发表的帖子 

 高手请帮忙!!!24C02关机时间长就没用,连续开机有记忆!!!
ID      EQU 30H
K1      BIT P3.3
K2      BIT P3.4
L1      BIT P2.0
L2      BIT P2.1
L3      BIT P2.2
L4      BIT P2.3
L5      BIT P2.4
L6      BIT P2.5
L7      BIT P2.6
SDA EQU P1.5
SCL EQU P1.6
Address EQU 08H
I2CData EQU 09H 


        ORG 00H
    
START: 
MOV P1,0FFH
MOV P2,0FFH
MOV SP,#60H
CLR P1.5
MOV Address,#00H
CALL I2C_READ
MOV I2CData,A ;读出数据
LCALL   DELAY20MS


cjne A,#8,TT ;
TT: JNC TT1
 AJMP TT2
TT1: MOV ID,#00

 

TT2:
KK1:    
 
JB      K1,KK2
        LCALL   DELAY20MS       ;10MS:可靠性低
        JB      K1,KK2
        INC     ID
        MOV     A,ID
        CJNE    A,#07,REL
        MOV     ID,#-1H
KK2:    JB      K2,REL
        LCALL   DELAY20MS       ;10MS:可靠性低
        JB      K2,REL
        DEC     ID
        MOV     A,ID
        CJNE    A,#-1,REL
        MOV     ID,#06H         ;07H:ERR
                                ;RET:err
REL:   

 
        
        JNB     K1,$
        JNB     K2,$

       MOV Address,#00H

MOV I2CData,ID
CALL I2C_WRITE ;写入数据 
LCALL   DELAY20MS


        
        
        MOV     A,ID
        CJNE    A,#00H,IS0
        ORL     P2,#01111111B   ;***
        CLR     L1              ;***
        LJMP    KK1             ;START:ERR
IS0:    CJNE    A,#01H,IS1
        ORL     P2,#01111111B   ;***
        CLR     L2              ;***
        LJMP    KK1             ;START:ERR
IS1:    CJNE    A,#02H,IS2
        ORL     P2,#01111111B   ;***
        CLR     L3              ;***
        LJMP    KK1             ;START:ERR
IS2:    CJNE    A,#03H,IS3
        ORL     P2,#01111111B   ;***
        CLR     L4              ;***
        LJMP    KK1             ;START:ERR
IS3:    CJNE    A,#04H,IS4
        ORL     P2,#01111111B   ;***
        CLR     L5              ;***
        LJMP    KK1             ;START:ERR
IS4:    CJNE    A,#05H,IS5
        ORL     P2,#01111111B   ;***
        CLR     L6              ;***
        LJMP    KK1             ;START:ERR
IS5:    CJNE    A,#06H,IS6
        ORL     P2,#01111111B   ;***
        CLR     L7              ;***
        LJMP    KK1             ;START:ERR
IS6:    LJMP    START

/*------------------------------------------------------
写一个字节 Address地址 I2CDatata写入的数据
------------------------------------------------------*/
I2C_WRITE:
I2C_WRITE_A:
LCALL I2C_START
MOV A,#10100000B
LCALL I2C_SEND8BIT
LCALL I2C_ACK
JC I2C_WRITE_A ;=1,表示无确认,再次发送

MOV A,Address
LCALL I2C_SEND8BIT
LCALL I2C_ACK 

MOV A,I2CData
LCALL I2C_SEND8BIT
LCALL I2C_ACK 
LCALL I2C_STOP
RET 

 

/*------------------------------------------------------
读一个字节 Address地址 Data读出的数据
------------------------------------------------------*/

I2C_READ:
I2C_READ_A:
LCALL I2C_START
MOV A,#10100000B
LCALL I2C_SEND8BIT
LCALL I2C_ACK
JC I2C_READ_A ;=1,表示无确认,再次发送

MOV A,Address
LCALL I2C_SEND8BIT
LCALL I2C_ACK 

I2C_READ_B:
LCALL I2C_START
MOV A,#10100001B
LCALL I2C_SEND8BIT
LCALL I2C_ACK
JC I2C_READ_B

LCALL I2C_RECEIVE8BIT
MOV I2CData,A
LCALL I2C_ACK
LCALL I2C_STOP
RET

 

;发送开始信号
I2C_START:
SETB SCL
SETB SDA
NOP
NOP
CLR SDA
NOP
NOP
CLR SCL
RET
;发送结束信号
I2C_STOP:
CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
SETB SDA
RET

;发送接收确认信号
I2C_ACk:
SETB SDA
SETB SCL
NOP
NOP
JB SDA,I2C_ACK0
CLR C 
SJMP I2C_ACK_END
I2C_ACK0:
SETB C
I2C_ACK_END:
CLR SCL
RET

;送八位数据
I2C_SEND8BIT:
MOV B,#08H
I2C_SEND8BIT_A: 
RLC A

MOV SDA,C
SETB SCL
NOP
NOP
CLR SCL
DJNZ B,I2C_SEND8BIT_A
RET


;接收八位数据
I2C_RECEIVE8BIT:
MOV B,#08H
CLR A
SETB SDA
I2C_RECEIVE8IT_A:
SETB SCL
NOP
NOP
MOV C,SDA
RLC A
CLR SCL
DJNZ B,I2C_RECEIVE8IT_A

RET
                  

DELAY20MS:      MOV     R6,#40
LOOP1:          MOV     R7,#248
                DJNZ    R7,$
                DJNZ    R6,LOOP1
                RET
                

END


发表时间:2006年8月19日18:44:33

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:谢谢!!我没收到啊!!!
[下一篇帖子]:我已经将相关信息发到你的邮箱啦我已经将相关信息发到你的邮箱啦