⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m41t81.txt

📁 实时时钟M41T0源程序,你只要定议好引脚,便能使用,主程序是一个应用试验
💻 TXT
字号:
m41t81的汇编程序:



M41T81_INIT:
       NOP
        LCALL   START
        MOV     A,#0D0H ;SLAVE ADDRESS :1101000Wb
        LCALL   WRBYTE  ;SEND SLAVE ADDRESS
        NOP
        LCALL   MACK
        NOP
        MOV     A,#0CH  ;TIME REGISTER ADDRESS
        LCALL   WRBYTE  ;SEND TIME REGISTER ADDRESS
        NOP 
        LCALL   MACK
        MOV     A,#00H  ;TIME DATA
        LCALL   WRBYTE  ;SEND TIME DATA
        NOP 
        LCALL   MACK
        LCALL   STOP
READ_M41T81_TIME:
        NOP
        LCALL   START
        MOV     A,#0D0H ;SLAVE ADDRESS :1101000Wb
        LCALL   WRBYTE  ;SEND SLAVE ADDRESS
        NOP
        LCALL   MACK
        NOP
        MOV     A,#00H  ;TIME REGISTER ADDRESS
        LCALL   WRBYTE  ;SEND TIME REGISTER ADDRESS
        NOP
        LCALL   MACK
        NOP
        NOP
        LCALL   START
        MOV     A,#0D1H         ;SLAVE ADDRESS :1101000Rb
        LCALL   WRBYTE          ;SEND SLAVE ADDRESS
        LCALL   CACK
        NOP
        MOV     R1,#SECONDS00
        MOV     R3,#08H
READ_M41T81_TIME01:
        LCALL   RDBYTE          ;READ TIME VALUE
        MOV     @R1,A           ;SAVE VALUE
        DJNZ    R3,READ_M41T81_TIME02
        LCALL   MNACK           ;最后一字节法非应答信号
        LCALL   STOP
        RET
READ_M41T81_TIME02:
        LCALL   MACK
        INC     R1
        SJMP    READ_M41T81_TIME01
START:
        SETB    SDA
        NOP
        SETB    SCL
        NOP
        NOP
        NOP
        NOP
        NOP
        CLR     SDA
        NOP
        NOP
        NOP
        NOP
        NOP
        CLR     SCL
        NOP
        RET
;结束I2C总线子程序
STOP:
        CLR     SDA
        NOP
        SETB    SCL
        NOP     
        NOP
        NOP
        NOP
        NOP
        SETB    SDA
        NOP
        NOP
        NOP
        NOP
        RET
;发送应答信号
MACK:
        CLR     SDA
        NOP
        NOP
        SETB    SCL
        NOP
        NOP
        NOP
        NOP
        NOP
        CLR     SCL
        NOP
        NOP
        RET
;发送非应答信号
MNACK:
        SETB    SDA
        NOP
        NOP
        SETB    SCL
        NOP
        NOP
        NOP
        NOP
        NOP
        CLR     SCL
        NOP
        NOP
        RET
;发送字节子程序
;字节数据放入ACC
;每发送一字节要调用一次CACK子程序,取应答位
WRBYTE:
        MOV     R0,#08H
WLP:
        RLC     A       ;取数据位       
        JC      WR1
        SJMP    WR0     ;判断数据位
WLP1:
        DJNZ    R0,WLP
        NOP
        RET
WR1:
        SETB    SDA     ;发送“1”
        NOP
        NOP
        NOP
        NOP
        SETB    SCL
        NOP
        NOP
        NOP
        NOP
        NOP
        CLR     SCL
        SJMP    WLP1
WR0:
        CLR     SDA
        NOP             ;发送“0”
        NOP
        NOP
        NOP
        NOP
        NOP
        SETB    SCL
        NOP
        NOP
        NOP
        NOP
        NOP
        CLR     SCL
        SJMP    WLP1
;读取字节子程序
;读出的值在ACC          
;每取一个字节要发送一个应答/非应答信号
RDBYTE:
        MOV     R0,#08H
RLP:
        SETB    SDA
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        SETB    SCL     ;时钟线为高,接收数据
        NOP
        NOP
        MOV     C,SDA   ;读数据位
        MOV     A,R2
        CLR     SCL     ;将SCL拉低,时间大于4.7us
        RLC     A       ;进行数据位处理
        MOV     R2,A
        NOP
        NOP
        NOP
        DJNZ    R0,RLP  ;未够8位,再来一次
        RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -