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

📄 m41t0.asm

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

;  读命令
;  #R06R05R04R02R01R00R03*


;  时钟元件M41T0调试程序
        T_SCL   EQU   P1.6   ;时钟
        T_SDA   EQU   P1.3   ;数据
        DATA1   EQU   10H    ;汉字的高位
        DATA2   EQU   11H    ;汉字的低位
        ;  年  月   日   时   分   秒   星   期
        ;C4EA D4C2 C8D5 CAB1 B7D6 C3EB D0C7 C6DA
        ORG   2000H
        MOV   DPTR,#0E010H
        MOV   A,#0
        MOVX  @DPTR,A
        MOV  R0,#01H
R_CLR:
        MOV  A,#0
        MOV  @R0,A
        INC  R0
        CJNE R0,#7FH,R_CLR

        MOV   SP,#50H
        SETB  T_SCL
        NOP
        SETB  T_SDA
;调试格式
;#RDDRDDRDDRDDRDD..*    R---读命令  DD 地址
;#WDDXXWDDXXWDDXX..*    W---写命令  DD 地址  XX 数据
START:
        JNB   RI,$
        MOV   A,SBUF
        CLR   RI
        CJNE  A,#23H,START        ;#  START
        MOV   R0,#30H
MAIN:
        JNB   RI,MAIN
        CLR   RI
        MOV   A,SBUF
        MOV   @R0,A
        INC   R0
        CJNE  A,#2AH,MAIN        ;* END

        MOV   R0,#30H             ;DOING
        MOV   A,@R0
MAIN_W_R:
        CJNE  A,#52H,MAIN2        ;R  READ
        INC   R0
        MOV   A,@R0
        LCALL 0400H
        ANL   A,#0FH
        SWAP  A
        MOV   B,A

        INC   R0
        MOV   A,@R0
        LCALL 0400H
        ANL   A,#0FH
        ORL   A,B

        LCALL BIJIAO

        LCALL DATE_READ
        LCALL 0430H
        MOV   SBUF,5EH
        JNB   TI,$
        CLR   TI
        MOV   SBUF,A
        JNB   TI,$
        CLR   TI

        MOV   SBUF,DATA1
        JNB   TI,$
        CLR   TI
        MOV   SBUF,DATA2
        JNB   TI,$
        CLR   TI

        INC   R0
        MOV   A,@R0
        CJNE  A,#2AH,MAIN_W_R

        LJMP  START

MAIN2:
        CJNE  A,#57H,START        ;W  WRITE
        INC   R0
        MOV   A,@R0
        LCALL 0400H
        ANL   A,#0FH
        SWAP  A
        MOV   B,A

        INC   R0
        MOV   A,@R0
        LCALL 0400H
        ANL   A,#0FH
        ORL   A,B
        MOV   B,A

        INC   R0
        MOV   A,@R0
        LCALL 0400H
        ANL   A,#0FH
        SWAP  A
        MOV   20H,A

        INC   R0
        MOV   A,@R0
        LCALL 0400H
        ANL   A,#0FH
        ORL   A,20H

        LCALL DATE_WRITE
        INC   R0
        MOV   A,@R0
        CJNE  A,#2AH,MAIN_W_R_T
        LJMP  START
MAIN_W_R_T:
        LJMP  MAIN_W_R
send:
   lcall 0430h
   mov   sbuf,5eh
   jnb   ti,$
   clr   ti
   mov   sbuf,a
   jnb   ti,$
   clr   ti
   ret
        ;  年  月   日   时   分   秒   星   期       周
        ;C4EA D4C2 C8D5 CAB1 B7D6 C3EB D0C7 C6DA     D6DC

BIJIAO:
        CJNE A,#00H,BIJIAO1
        MOV  DATA1,#0C3H
        MOV  DATA2,#0EBH
        RET
BIJIAO1:
        CJNE A,#01H,BIJIAO2
        MOV  DATA1,#0B7H
        MOV  DATA2,#0D6H
        RET

BIJIAO2:
        CJNE A,#02H,BIJIAO3
        MOV  DATA1,#0CAH
        MOV  DATA2,#0B1H
        RET

BIJIAO3:
        CJNE A,#04H,BIJIAO4
        MOV  DATA1,#0C8H
        MOV  DATA2,#0D5H
        RET

BIJIAO4:
        CJNE A,#05H,BIJIAO5
        MOV  DATA1,#0D4H
        MOV  DATA2,#0C2H
        RET

BIJIAO5:
        CJNE A,#06H,BIJIAO6
        MOV  DATA1,#0C4H
        MOV  DATA2,#0EAH
        RET

BIJIAO6: ;星期   D0C7 C6DA
        MOV  SBUF,#20H
        JNB  TI,$
        CLR  TI
        MOV  SBUF,#0D0H
        JNB  TI,$
        CLR  TI
        MOV  SBUF,#0C7H
        JNB  TI,$
        CLR  TI
        MOV  SBUF,#0C6H
        JNB  TI,$
        CLR  TI
        MOV  SBUF,#0DAH
        JNB  TI,$
        CLR  TI
        MOV  DATA1,#20H
        MOV  DATA2,#20H
        RET

;*******************************************************
;  M41T0-- address table(地址表)
;  00:seconds
;  01:minutes
;  02:hours
;  03:week
;  04:date
;  05:mouth
;  06:year
;  07:control
;====================================================
;        T_SCL   EQU   P1.6   ;时钟
;        T_SDA   EQU   P1.3   ;数据
;  要读的地址由A送入(地址表如上)
;  读出的数据在A中(ASC码)
DATE_READ:
        CLR   T_SDA
        NOP             ;启动
        NOP
	NOP
        CLR   T_SCL
     ;------------------------
        PUSH  ACC
        MOV   A,#0D0H   ;准备写命令
        MOV   R5,#08H   ;准备8位的记数
READ_WRITE1:
        RLC   A
        MOV   T_SDA,C
	NOP
        SETB  T_SCL
        NOP             ;一个高脉冲,由低到高--再拉低
        NOP
        CLR   T_SCL     ;写命令
        DJNZ  R5,READ_WRITE1

      ;---------------------
        CLR   T_SDA
        NOP
        NOP
        SETB  T_SCL    ;一个空脉冲
        NOP
        NOP
        CLR   T_SCL
        NOP
        NOP
      ;----------------------

        POP   ACC
        MOV   R5,#08H
READ_WRITE2:
        RLC   A
        MOV   T_SDA,C
        NOP
        SETB  T_SCL
        NOP             ;一个高脉冲,由低到高--再拉低
        NOP
        CLR   T_SCL       ;写地址
        DJNZ  R5,READ_WRITE2
     ;-------------------------
        CLR  T_SDA
        NOP
        NOP
        SETB  T_SCL    ;一个空脉冲
        NOP
        NOP
        CLR   T_SCL
        NOP
        NOP
     ;--------------------------
     ;-------------------------
        ;读前的在一次启动
        SETB  T_SCL
	NOP
	NOP
        SETB  T_SDA
        NOP
        NOP
        CLR   T_SDA
        NOP
        NOP
	NOP
        CLR   T_SCL
     ;-------------------------
        MOV   A,#0D1H      ;读命令
        MOV   R5,#08H
READ_WRITE3:
        RLC   A
        MOV   T_SDA,C
	NOP
        SETB  T_SCL
        NOP              ;一个高脉冲,由低到高--再拉低
        NOP
        CLR   T_SCL
        DJNZ  R5,READ_WRITE3
     ;----------------------------

        CLR  T_SDA
        NOP
        NOP
        SETB  T_SCL     ;一个空脉冲
        NOP
        NOP
        CLR   T_SCL
        NOP
        NOP
     ;-----------------------------
        SETB  T_SDA
        CLR   A
        MOV   R5,#08H
READ_READ1:
        CLR   T_SCL
        NOP
        NOP
        SETB  T_SCL
        NOP
        NOP
        MOV   C,T_SDA
        RLC   A
        DJNZ  R5,READ_READ1

     ;------------------------
        SETB  T_SDA
        NOP
        NOP
        SETB  T_SCL
        NOP
        NOP
        CLR   T_SCL
        NOP
        NOP
        NOP
        SETB  T_SCL
        NOP             ;结束
        NOP
	NOP
        SETB  T_SDA
        RET
;===================================================
;===================================================
;        T_SCL   EQU   P1.6   ;时钟
;        T_SDA   EQU   P1.3   ;数据
;   要写的数据的地址由B送入(地址表如上)
;   要写的数据在A中(ASC码)
DATE_WRITE:
        CLR   T_SDA
        NOP             ;启动
        NOP
	NOP
        CLR   T_SCL
     ;-------------------------
        PUSH  ACC
        MOV   A,#0D0H
        MOV   R5,#08H
     ;-------------------------
WRITE_WRITE1:
        RLC   A
        MOV   T_SDA,C
	NOP
        SETB  T_SCL
        NOP
        NOP
        CLR   T_SCL
        DJNZ  R5,WRITE_WRITE1

        CLR   T_SDA
        NOP
        NOP
        SETB  T_SCL
        NOP
        NOP
        CLR   T_SCL
        NOP
        NOP

        MOV   A,B
        MOV   R5,#08H
WRITE_WRITE2:
        RLC   A
        MOV   T_SDA,C
	NOP
        SETB  T_SCL
        NOP
        NOP
        CLR   T_SCL
        DJNZ  R5,WRITE_WRITE2

        CLR  T_SDA
        NOP
        NOP
        SETB  T_SCL
        NOP
        NOP
        CLR   T_SCL
        NOP
        NOP

        POP   ACC
        MOV   R5,#08H
WRITE_WRITE3:
        RLC   A
        MOV   T_SDA,C
	NOP
        SETB  T_SCL
        NOP
        NOP
        CLR   T_SCL
        DJNZ  R5,WRITE_WRITE3

     ;-------------------------
        CLR  T_SDA
        NOP
        NOP
        SETB  T_SCL
        NOP
        NOP
        CLR   T_SCL
        NOP
        NOP
        SETB  T_SCL
        NOP
        NOP
        SETB  T_SDA
        RET
;==================================================
;*****************************************************
        END

⌨️ 快捷键说明

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