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

📄 pcf8563.asm

📁 周立功DP_51S开发板下的时钟读写
💻 ASM
字号:
;本程序在包含VI2C_ASM.INC头文件的前提下对时钟芯片PCF8563进行设定初始时间,然后再读时间,把结果通过串口发送出去;设定和读时间发;时候,给出读对还是出错的信息

ACK     BIT   10H;应答标志位变量
SLA     DATA  50H;器件从地址变量
SUBA    DATA  51H;器件子地址变量
NUMBYTE DATA  52H

;使用前定义变量
SDA     BIT   P1.7
SCL     BIT   P1.6
MTD     EQU   30H
MRD     EQU   46H

;定义器件地址
PCF8563 EQU  0A2H

ORG 0000H
AJMP MAIN

ORG 0100H

MAIN:
    LCALL   COMINIT

    MOV     SP,    #70H
    MOV     R4,    #0F0H
    DJNZ    R4,    $
    MOV     MTD,   #00H
    MOV     MTD+1, #12H
    MOV     MTD+2, #00H
    MOV     MTD+3, #57H
    MOV     MTD+4, #03H

WR8563:
    MOV     SLA,      #PCF8563
    MOV     SUBA,      #00H
    MOV     NUMBYTE,   #5
    LCALL   IWRNBYTE
    NOP
    MOV C,ACK
    JNC     ERROR
    LCALL   DISPLAY_OK
    JMP     next
ERROR:LCALL   DISPLAY_ERROR
next:
RD8563:
    MOV     SLA,      #PCF8563
    MOV     SUBA ,     #02H
    MOV     NUMBYTE,   #3
    LCALL   IRDNBYTE
    NOP
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    MOV C,ACK
    JNC     ERROR1
    LCALL   DISPLAY_OK
    JMP     next1
ERROR1:LCALL   DISPLAY_ERROR
next1:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    LCALL   CHANGE

    LCALL   DISPLAY
    MOV R0,#0AH
 MYDELAY:   LCALL   DELAY
    DJNZ R0, MYDELAY
    JMP     RD8563
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHANGE:   ;转换成BCD码
    MOV     A,        MRD+2      ;小时放在 40H,41H, 两个字节中
    ANL     A,        #0F0H
    SWAP     A
    MOV     40H,      A
    MOV     A,        MRD+2
    ANL     A,        #0FH
    MOV     41H,      A

    MOV     A,        MRD+1      ;分钟放在 42H,43H, 两个字节中
    ANL     A,        #0F0H
    SWAP     A
    MOV     42H,      A
    MOV     A,        MRD+1
    ANL     A,        #0FH
    MOV     43H,      A

    MOV     A,        MRD     ;秒放在 44H,45H, 两个字节中
    ANL     A,        #0F0H
    SWAP     A
    MOV     44H,      A
    MOV     A,        MRD
    ANL     A,        #0FH
    MOV     45H,      A
    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY:
    MOV A, #'T'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'i'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'m'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'e'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'='
    MOV SBUF,A
    LCALL DELAY;

    MOV A, 40h     ;Hour
    ADD A,#30H
    MOV SBUF,A
    LCALL DELAY;

    MOV A,41h
    ADD A,#30H
    MOV SBUF,A
    LCALL DELAY;

    MOV A, #':'
    MOV SBUF,A
    LCALL DELAY;

    MOV A, 42h     ;Minute
    ADD A,#30H
    MOV SBUF,A
    LCALL DELAY;

    MOV A,43h
    ADD A,#30H
    MOV SBUF,A
    LCALL DELAY;

    MOV A, #':'
    MOV SBUF,A
    LCALL DELAY;

    MOV A, 44h     ;Second
    ADD A,#30H
    MOV SBUF,A
    LCALL DELAY;
    MOV A, 45h
    ADD A,#30H
    MOV SBUF,A
    LCALL DELAY;
    
    MOV A, #0DH ;回车换行
    MOV SBUF,A
    LCALL DELAY;

    MOV A, #0AH ;
    MOV SBUF,A
    LCALL DELAY;



    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY:
	MOV	R6,#0FFH
DELAY0:	MOV	R5,#0FFH
DELAY1:	DJNZ	R5,DELAY1
	DJNZ	R6,DELAY0
    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
COMINIT:
        MOV	TMOD,#20H	;设置T1为方式2
	MOV	TH1,#0FDH	;设置波特率为9600
	MOV	TL1,#0FDH
        MOV	SCON,#40H	;设置串口位方式1
	MOV	PCON,#00H       ;SMOD=0
        SETB	TR1            ;开T1
        ;SETB    EA            ;开中断
        ; SETB    ES            ;允许串口中断
        ;mov     a,sbuf        ;预读缓冲区
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY_OK:
    MOV A, #'O'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'K'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'!'
    MOV SBUF,A
    LCALL DELAY;
   
    MOV A, #0DH ;回车换行
    MOV SBUF,A
    LCALL DELAY;

    MOV A, #0AH ;
    MOV SBUF,A
    LCALL DELAY;
    ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY_ERROR:
    MOV A, #'E'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'r'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'r'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'o'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'r'
    MOV SBUF,A
    LCALL DELAY;
    MOV A, #'!'
    MOV SBUF,A
    LCALL DELAY;

    MOV A, #0DH ;回车换行
    MOV SBUF,A
    LCALL DELAY;

    MOV A, #0AH ;
    MOV SBUF,A
    LCALL DELAY;
    ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$INCLUDE(VI2C_ASM.INC)
END

⌨️ 快捷键说明

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