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

📄 jrdmdysz.asm

📁 用增强型单片机51RD2做的控制器
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                ANL     A,#0FH
                MOV     OXL,#24
                MOV     OY,#0
                MOV     SeleTab,#Tsk
                MOV     CCCODE,A                ; x
                LCALL   CCTW
                MOV     OXL,#26
                MOV     OY,#0
                MOV     SeleTab,#Tsk
                MOV     CCCODE,#45              ; 时
                LCALL   CCTW
                MOV     A,Min
                ANL     A,#0F0H
                SWAP    A
                MOV     OXL,#28
                MOV     OY,#0
                MOV     SeleTab,#Tsk
                MOV     CCCODE,A                ; x
                LCALL   CCTW
                MOV     A,Min
                ANL     A,#0FH
                MOV     OXL,#30
                MOV     OY,#0
                MOV     SeleTab,#Tsk
                MOV     CCCODE,A                ; x
                LCALL   CCTW
                MOV     OXL,#32
                MOV     OY,#0
                MOV     SeleTab,#Tsk
                MOV     CCCODE,#46              ; 分
                LCALL   CCTW
                MOV     A,Sec
                ANL     A,#0F0H
                SWAP    A
                MOV     OXL,#34
                MOV     OY,#0
                MOV     SeleTab,#Tsk
                MOV     CCCODE,A                ; x
                LCALL   CCTW
                MOV     A,Sec
                ANL     A,#0FH
                MOV     OXL,#36
                MOV     OY,#0
                MOV     SeleTab,#Tsk
                MOV     CCCODE,A                ; x
                LCALL   CCTW
                MOV     OXL,#38
                MOV     OY,#0
                MOV     SeleTab,#Tsk
                MOV     CCCODE,#47              ; 秒
                LCALL   CCTW
                RET

;

;
;       ******  发送数据(TimeByteCnt)个子节给HT1380  ******
;
HtSendByte:     CLR     TimeRst                 ; 复位引脚为低电平,所有数据传送终止
                NOP
                NOP
                CLR     TimeClk                 ; 清时钟总线
                NOP
                SETB    TimeRst                 ; 复位引脚为高电平,逻辑控制有效
                NOP
                NOP
                MOV     A,TimeCommand           ; 准备发送命令字节
                NOP
                MOV     TimeBitCnt,#08H         ; 传送位数为 8
                NOP
                NOP
HtSendByte1:    RRC     A                       ; 将最低位传送给进位位 C
                NOP
                NOP
                MOV     TimeDat,C               ; 位传送至数据总线
                NOP
                NOP
                SETB    TimeClk                 ; 时钟上升沿,发送数据有效
                NOP
                NOP
                CLR     TimeClk                 ; 清时钟总线
                NOP
                NOP
                DJNZ    TimeBitCnt,HtSendByte1  ; 位传送未完毕则继续
                NOP
HtSendByte2:    NOP                             ; 准备发送数据
                MOV     A,@R0                   ; 传送数据,过程与传送命令相同
                MOV     TimeBitCnt,#08H
HtSendByte3:    RRC     A
                MOV     TimeDat,C
                NOP
                NOP
                SETB    TimeClk
                NOP
                NOP
                CLR     TimeClk
                DJNZ    TimeBitCnt,HtSendByte3
                INC     R0                      ; 发送数据的内存地址加 1
                DJNZ    TimeByteCnt,HtSendByte2 ; 字节传送未完毕则继续
                NOP
                NOP
                CLR     TimeRst                 ; 逻辑操作完毕,清 RST
                RET

;
;       ******  从HT1380接收数据(TimeByteCnt)个字节  ******
;
ReceiveByte:    CLR     TimeRst                 ; 复位引脚为低电平,所有数据传送终止
                NOP
                NOP
                CLR     TimeClk                 ; 清时钟总线
                NOP
                NOP
                SETB    TimeRst                 ; 复位引脚为高电平,逻辑控制有效
                NOP
                NOP
                MOV     A,TimeCommand           ; 准备发送命令字节
                NOP
                NOP
                MOV     TimeBitCnt,#08H         ; 传送位数为 8
                NOP
                NOP
ReceiveByte1:   RRC     A                       ; 将最低位传送给进位位 C
                NOP
                NOP
                MOV     TimeDat,C               ; 位传送至数据总线
                NOP
                NOP
                SETB    TimeClk                 ; 时钟上升沿,发送数据有效
                NOP
                NOP
                CLR     TimeClk                 ; 清时钟总线
                NOP
                NOP
                DJNZ    TimeBitCnt,ReceiveByte1 ; 位传送未完毕则继续
                NOP
                NOP
ReceiveByte2:   NOP                             ; 准备接收数据
                CLR     A                       ; 清类加器
                CLR     C                       ; 清进位位 C
                MOV     TimeBitCnt,#08H         ; 传送位数为 8
ReceiveByte3:   NOP
                NOP
                MOV     C,TimeDat               ; 数据总线上的数据传送给 C
                RRC     A                       ; 从最低位接收数据
                NOP
                NOP
                SETB    TimeClk                 ; 时钟总线置高
                NOP
                NOP
                CLR     TimeClk                 ; 时钟下降沿接收数据有效
                DJNZ    TimeBitCnt,ReceiveByte3 ; 位接收完毕则继续
                MOV     @R0,A
                INC     R0
                DJNZ    TimeByteCnt,ReceiveByte2; 字节传送未完毕则继续
                NOP
                NOP
                CLR     TimeRst                 ; 逻辑操作完毕,清 RST
                RET

;
;       ******  写保护寄存器操作  ******
;
WriteEnable:    MOV     TimeCommand,#8EH        ; 命令字节为 8EH
                MOV     TimeByteCnt,#1          ; 单字节传送模式
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     @R0,#00H                ; 数据内容为00H (写入允许)
                LCALL   HtSendByte              ; 调用写入子程序
                RET
WriteDisable:   MOV     TimeCommand,#8EH        ; 命令字节为 8EH
                MOV     TimeByteCnt,#1          ; 单字节传送模式
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     @R0,#80H                ; 数据内容为80H (禁止写入)
                LCALL   HtSendByte              ; 调用写入子程序
                RET
;
;       ******  时钟允许位操作  ******
;
OscEnable:      MOV     TimeCommand,#80H        ; 命令字节为 80H
                MOV     TimeByteCnt,#1          ; 单字节传送模式
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     @R0,#00H                ; 数据内容为00H (振荡器工作允许)
                LCALL   HtSendByte              ; 调用写入子程序
                RET
;
;       ******  时钟停止位操作  ******
;
OscDisable:     MOV     TimeCommand,#80H        ; 命令字节为 80H
                MOV     TimeByteCnt,#1          ; 单字节传送模式
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     @R0,#80H                ; 数据内容为80H (振荡器工作停止)
                LCALL   HtSendByte              ; 调用写入子程序
                RET

;
;       ******  写 HT1380 时钟  ********
;
HtWriteClock:   MOV     TimeCommand,#8EH        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     @R0,#00H                ; 数据内容为00H (写入允许)
                LCALL   HtSendByte              ; 调用写入数据子程序
                MOV     TimeCommand,#80H        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     A,Sec
                MOV     @R0,A                   ; 送秒单元内容
                LCALL   HtSendByte              ; 调用写入数据子程序
                MOV     TimeCommand,#82H        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     A,Min
                MOV     @R0,A                   ; 送分单元内容
                LCALL   HtSendByte              ; 调用写入数据子程序
                MOV     TimeCommand,#84H        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     A,Hour
                MOV     @R0,A                   ; 送时单元内容
                LCALL   HtSendByte              ; 调用写入数据子程序
                MOV     TimeCommand,#8EH        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     @R0,#80H                ; 数据内容为80H (禁止写入)
                LCALL   HtSendByte              ; 调用写入数据子程序
                RET
;
;       ******  写 HT1380 日期  ********
;
HtWriteDate:    MOV     TimeCommand,#8EH        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     @R0,#00H                ; 数据内容为00H (写入允许)
                LCALL   HtSendByte              ; 调用写入数据子程序
                MOV     TimeCommand,#86H        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     A,Day
                MOV     @R0,A                   ; 送日单元内容
                LCALL   HtSendByte              ; 调用写入数据子程序
                MOV     TimeCommand,#88H        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     A,Month
                MOV     @R0,A                   ; 送月单元内容
                LCALL   HtSendByte              ; 调用写入数据子程序
                MOV     TimeCommand,#8AH        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     A,Week
                MOV     @R0,A                   ; 送周单元内容
                LCALL   HtSendByte              ; 调用写入数据子程序
                MOV     TimeCommand,#8CH        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     A,Year
                MOV     @R0,A                   ; 送年单元内容
                LCALL   HtSendByte              ; 调用写入数据子程序
                MOV     TimeCommand,#8EH        ;
                MOV     TimeByteCnt,#1          ;
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     @R0,#80H                ; 数据内容为80H (禁止写入)
                LCALL   HtSendByte              ; 调用写入数据子程序
                RET
;
;       ******  写 HT1380 多字节时钟  ********
;
WriteMulClock:  MOV     TimeCommand,#0BEH       ; 命令字节为 BEH
                MOV     TimeByteCnt,#8          ; 多字节写入模式
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     A,Sec
                MOV     @R0,A                   ; 送秒单元内容
                INC     R0
                MOV     A,Min
                MOV     @R0,A                   ; 送分单元内容
                INC     R0
                MOV     A,Hour
                MOV     @R0,A                   ; 送时单元内容
                INC     R0
                MOV     A,Day
                MOV     @R0,A                   ; 送日单元内容
                INC     R0
                MOV     A,Month
                MOV     @R0,A                   ; 送月单元内容
                INC     R0
                MOV     A,Week
                MOV     @R0,A                   ; 送周单元内容
                INC     R0
                MOV     A,Year
                MOV     @R0,A                   ; 送年单元内容
                INC     R0
                MOV     A,#00H
                MOV     @R0,A                   ; 写保护单元内容为 00H
                LCALL   HtSendByte              ; 调用写入数据子程序
                RET
;
;       ******  读 HT1380 多字节时钟  ********
;
ReadMulClock:   MOV     TimeCommand,#0BFH       ; 命令字节为 BFH
                MOV     TimeByteCnt,#8          ; 多字节读出模式
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                LCALL   ReceiveByte             ; 调用读出数据子程序
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     A,@R0
                INC     R0
                MOV     Sec,A
                MOV     A,@R0
                INC     R0
                MOV     Min,A
                MOV     A,@R0
                INC     R0
                MOV     Hour,A
                MOV     A,@R0
                INC     R0
                MOV     Day,A
                MOV     A,@R0
                INC     R0
                MOV     Month,A
                MOV     A,@R0
                INC     R0
                MOV     Week,A
                MOV     A,@R0
                INC     R0
                MOV     Year,A
                RET
;
;       ******  单子节传送方式  ******
;
WriteSingleByte:MOV     TimeCommand,#84H        ; 命令字节为 84H
                MOV     TimeByteCnt,#1          ; 多字节写入模式
                MOV     R0,#TimeBuf             ; 数据地址赋给 R0
                MOV     @R0,#88H                ; 写小时内容8时(12小时模式)
                LCALL   HtSendByte              ; 调用写入数据子程序
                RET

ReadSingleByte: MOV     TimeCommand,#85H        ; 命令字节为 85H
                MOV     TimeByteCnt,#1          ; 多字节读出模式
                MOV     R0,#TimeBuf             ; 读小时内容给 R0
                LCALL   ReceiveByte             ; 调用读出数据子程序
                RET
                END

⌨️ 快捷键说明

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