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

📄 ds12887.asm

📁 这是DS12887的源程序
💻 ASM
字号:

                BIT_CNT DATA 30H
                DELAY1 DATA 31H
                DECIMAL DATA 32H
                REC_BUF DATA 20H
                SEND_BUF DATA 21H
                CS BIT P1.0
                CLK BIT P1.1
                DIO BIT P1.2
                KEY BIT P3.2
                ORG 00H
                AJMP RESET
                ORG  0003H
                AJMP MAIN_LP
                ORG  0013H
                LJMP READDS
                ORG 80H
        RESET:
                SETB CS
                SETB KEY
                SETB DIO
                MOV  IE, #85H
                MOV  IP,#00000001B
                CLR  IT0
                CLR  IT1
                MOV DELAY1,#25 ;延时25MS
                RST_DELAY1:
                DJNZ DELAY1,RST_DELAY1
                MOV SEND_BUF,#10100100B ;初始化命令
                LCALL SEND
                SETB CS
         INIT:  SJMP  $

        START:  MOV   DPTR,#0AH
                MOV   A,#00100000B                ;设置寄存器A
                MOVX   @DPTR,A
                INC   DPTR
                MOV   A,#10000110B                ;设置寄存器B
                MOVX  @DPTR,A
                MOV   DPTR,#00H                   ;设置秒
                MOV   A,#00H
                MOVX   @DPTR,A
                INC   DPTR                        ;设置秒报警
                MOVX   @DPTR,A
                INC   DPTR
                MOV   A,#14                      ;设置分
                MOVX   @DPTR,A
                INC   DPTR
                MOV   A,#00H                      ;设置分报警
                MOVX  @DPTR,A
                INC   DPTR
                MOV   A,#12                     ;设置时
                MOVX   @DPTR,A
                INC   DPTR
                MOV   A,#00H                      ;设置时报警
                MOVX   @DPTR,A
                INC   DPTR
                MOV   A,#02                       ;设置星期
                MOVX   @DPTR,A
                INC   DPTR
                MOV   A,#12                       ;设置日
                MOVX   @DPTR,A
                INC   DPTR
                MOV   A,#04                       ;设置年
                MOVX   @DPTR,A
                MOV   A,#00010110B
                MOV   DPTR,#0BH
                MOVX   @DPTR,A
                RET

     READDS:    MOV   DPTR, #00H
                MOVX  A,  @DPTR
                MOV B,#10 ;10 进制转换
                DIV AB
                MOV DECIMAL,A
                MOV   SEND_BUF,#10000001B
                LCALL SEND
                MOV SEND_BUF,DECIMAL
                LCALL SEND
                SETB  CS
                MOV   SEND_BUF,#10000000B
                LCALL SEND
                MOV   SEND_BUF,B
                LCALL SEND
                SETB  CS
                MOV   DPTR,#02
                MOVX A,@DPTR
                MOV B,#10 ;10 进制转换
                DIV AB
                MOV DECIMAL,A
                MOV   SEND_BUF,#10000011B
                LCALL SEND
                MOV   SEND_BUF,DECIMAL
                LCALL SEND
                SETB  CS
                MOV   SEND_BUF,#10000010B
                LCALL SEND
                MOV   SEND_BUF,B
                LCALL SEND
                SETB  CS
                MOV   DPTR,#04
                MOVX A,@DPTR
                MOV B,#10 ;10 进制转换
                DIV AB
                MOV DECIMAL,A
                MOV   SEND_BUF,#10000101B
                LCALL SEND
                MOV SEND_BUF,DECIMAL
                LCALL SEND
                SETB  CS
                MOV   SEND_BUF,#10000100B
                LCALL SEND
                MOV   SEND_BUF,B
                LCALL SEND
                SETB  CS
                MOV   DPTR,#0CH
                MOVX  A,@DPTR
           L1:  JNB    P3.3,L1
                RETI
   MAIN_LP:
                MOV SEND_BUF,#00010101B ;有键按下,发送读键盘命令
                LCALL SEND
                LCALL RECEIVE ;读键盘
                SETB CS
                MOV B,#10 ;10 进制转换
                MOV A,REC_BUF
                DIV AB
                MOV DECIMAL,A
                MOV SEND_BUF,#10100001B ;左移2 次.
                LCALL SEND
                SETB CS
                MOV SEND_BUF,#10100001B
                LCALL SEND
                SETB CS
                MOV SEND_BUF,#10000001B ;下载数据且译码.
                LCALL SEND
                MOV SEND_BUF,DECIMAL ;发送10 位数到zlg7289A 显示
                LCALL SEND
                SETB CS
                MOV SEND_BUF,#10000000B ;下栽数据且译码.
                LCALL SEND
                MOV SEND_BUF,B ;发送个位数据到zlg7289A
                LCALL SEND
                SETB CS
            ;    MOV SEND_BUF,#10001000B ;设定刚发送数据显示为闪烁
            ;    LCALL SEND
            ;    MOV SEND_BUF,#11111100B
            ;    LCALL SEND
            ;    SETB CS
     MAIN_LP2:
                JNB KEY,MAIN_LP2  ;等待键松开.
                MOV A,REC_BUF
                CJNE A,#23,L2
                LCALL  START
          L2:   RETI
                ;-----------------------------------------
                ;发送一字节到zlg7289A,高位在前
                ;-----------------------------------------
        SEND:
                MOV BIT_CNT,#8 ;设发送位数为8 位.
                CLR CS
                LCALL LONG_DELAY ;延时50 微秒.
     SEND_LP:
                MOV A,SEND_BUF
                RLC A
                MOV SEND_BUF,A
                MOV DIO,C
                NOP
                NOP
                SETB CLK
                LCALL SHORT_DELAY ;延时10 微秒.
                CLR CLK
                LCALL SHORT_DELAY ;延时10 微秒.
                DJNZ BIT_CNT,SEND_LP
                CLR DIO
                RET
                ;-------------------------------------
                ;由zlg7289A 接收一字节数据,高位在前
                ;-------------------------------------
     RECEIVE:
                MOV BIT_CNT,#8 ;定义接收8 位.
                SETB DIO
                LCALL LONG_DELAY ;延时50 微秒.
  RECEIVE_LP:
                SETB CLK
                LCALL SHORT_DELAY ;延时10 微秒.
                MOV C,DIO ;接收数据送REC_BUF 低位.
                MOV A,REC_BUF
                RLC A
                MOV REC_BUF,A
                CLR CLK
                LCALL SHORT_DELAY ;延时10 微秒.
                DJNZ BIT_CNT,RECEIVE_LP
                CLR DIO
                RET
  LONG_DELAY:
                MOV DELAY1,#25
                DJNZ DELAY1,$
                RET
 SHORT_DELAY:
                MOV DELAY1,#4
                DJNZ DELAY1,$
                RET
















⌨️ 快捷键说明

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