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

📄 ds1302.asm

📁 lyd-sy-5100单片机开发板的示例程序 分为C语言版本和ASM汇编版本。其他牌子的板子也可以使用其C语言版本。
💻 ASM
字号:
;**********************************
;文件名:DS1302.asm
;功能  :在LJD-SY2A实验板完成设置DS1302时间为08年8月8日19点59分59秒,
;	显示时、分、秒。
;
;**********************************
LOAD        BIT      P1.2
DIN         BIT      P1.0
DCLK        BIT      P1.1
DOUT        BIT      P3.2
BUZZER      BIT      P2.6
;**********************************
IO_DATA     BIT      P1.0   
SCLK        BIT      P1.1
RST         BIT      P1.3 
;**********************************

BitCnt      DATA     30H        ; 数据位计数器
ByteCnt     DATA     31H        ; 数据字节计数器
Command     DATA     32H        ; 命令字节地址
RcvDat      DATA     40H        ; 接收数据缓冲区
XmtDat      DATA     50H        ; 发送数据缓冲区
;*****************************
USERFLAG    EQU      20H
BCD4A       EQU      22H
BCD4B       EQU      23H

;**********************************
            ORG      0000H
	    JMP      START
             
	    ORG      0030H
START:      mov p1,#60h
            MOV      SP,#7FH
;	    CLR     BUZZER 	    
;***********************************
 
             CLR     DIN            ;初始化CH451
	     SETB    DCLK
	     SETB    DIN
	     SETB    LOAD
	     SETB    DOUT
             NOP
             MOV     B,#04H         ;设置CH451
	     MOV     A,#03H         ;关看门狗开显示键盘
      	     LCALL   WRITE
	     NOP
	

;*********************设置时钟****************************
Write_Enable:
            MOV Command,#8Eh         ;命令字节为8E
            MOV ByteCnt,#1           ;单字节传送模式
            MOV R0,#XmtDat           ;数据地址覆给R0
            MOV XmtDat,#00h          ;数据内容为0 写入允许
            LCALL Send_Byte          ;调用写入数据子程序
;*******************************当把秒寄存器的第7 位时钟停止位设置为0 时起动时钟开始           

           MOV Command,#80h           ; 命令字节为80
           MOV ByteCnt,#1              ; 单字节传送模式
           MOV R0,#XmtDat               ;数据地址覆给R0
           MOV XmtDat,#00h              ;数据内容为0 振荡器工作允许
           LCALL Send_Byte              ;调用写入数据子程序

;******************************************
Write_Multiplebyte:
           MOV Command,#0BEh            ;命令字节为BEh
           MOV ByteCnt,#8               ;多字节写入模式此模块为8 个
           MOV R0,#XmtDat               ;数据地址覆给R0
           MOV XmtDat,  #59h            ;秒单元内容为59h
           MOV XmtDat+1,#59h            ;分单元内容为59h
           MOV XmtDat+2,#19h            ;时单元内容为13h
           MOV XmtDat+3,#08h            ;日期单元内容为21h
           MOV XmtDat+4,#08h            ;月单元内容为06h
           MOV XmtDat+5,#05h            ;星期单元内容为03h
           MOV XmtDat+6,#08h             ;年单元内容为00h
           MOV XmtDat+7,#0              ;写保护单元内容为00h
           LCALL Send_Byte              ;调用写入数据子程序
;**********************************************

Read_A1:
           MOV     B,#05H               ;设置为译码
   	   MOV     A,#08AH
           LCALL   WRITE
;*************************************************

TIME:
           MOV     Command,#85h            ; 命令字节为85h
           MOV     ByteCnt,#1              ; 单字节传送模式
           MOV     R1,#RcvDat              ;数据地址覆给R1
           LCALL   Receive_Byte            ;调用读出数据子程序
           LCALL   BCD8_1
           MOV      B,#0aH
   	   MOV     A,BCD4A
           LCALL   WRITE
	   ORL     BCD4B,#80H            
           MOV     B,#0bH
   	   MOV     A,BCD4B
           LCALL   WRITE
;**********************************************
           MOV     Command,#83h            
           MOV     ByteCnt,#1               
           MOV     R1,#RcvDat              
           LCALL   Receive_Byte            
	   LCALL   BCD8_1
           MOV      B,#0cH
   	   MOV     A,BCD4A
           LCALL   WRITE
           ORL     BCD4B,#80H
           MOV     B,#0dH
   	   MOV     A,BCD4B
           LCALL   WRITE
;**********************************************
           MOV     Command,#81h            
           MOV     ByteCnt,#1              
           MOV     R1,#RcvDat              
           LCALL   Receive_Byte            
           LCALL   BCD8_1
           MOV      B,#0eH
   	   MOV     A,BCD4A
           LCALL   WRITE
           MOV     B,#0fH
   	   MOV     A,BCD4B
           LCALL   WRITE
           NOP
	   LJMP    TIME

;**********************************
;写CH451程序
;文件名:WRITE
;入参:B、ACC待写的12位数据,低8位在ACC中,高4位在B的低四位中。
;***********************************

WRITE:
       ;     PUSH     DPH
	;    PUSH     DPL
        ;    PUSH     ACC
            CLR       EX0
	    CLR       LOAD
	    MOV       R7,#08H
WRITE_1:
            RRC       A
	    CLR       DCLK
	    MOV       DIN,C
	    SETB      DCLK
	    DJNZ      R7,WRITE_1
	    MOV       A,B
	    MOV       R7,#004H
WRITE_2:
            RRC       A
	    CLR       DCLK
	    MOV       DIN,C
	    SETB      DCLK
	    DJNZ      R7,WRITE_2
	    SETB      LOAD
	    SETB      EX0
	;    POP       ACC
	;    POP       DPH
	 ;   POP       DPL
	    RET
;*********************************
BCD8_1:
            MOV      R7,#04H
            MOV      A,RcvDat
	    
RR1:
            CLR      C
            RRC      A
            DJNZ     R7,RR1
	    MOV      BCD4A,A
	    NOP
	    MOV      R7,#04H
            MOV      A,RcvDat
	    
RL1:       
            CLR      C
            RLC      A
	    DJNZ     R7,RL1
	    SWAP     A
	    MOV      BCD4B,A
	    RET
  
;*************************************
Send_Byte:
            CLR     RST 
            NOP
            CLR     SCLK 
            NOP
            SETB    RST 
            NOP
            MOV     A,Command 
            MOV     BitCnt,#08h    
S_Byte0:
            RRC     A 
            MOV     IO_DATA,C 
            NOP
            SETB    SCLK 
            NOP
            CLR     SCLK 
            DJNZ    BitCnt,S_Byte0 
            NOP
S_Byte1: 
            MOV     A,@R0 
            MOV     BitCnt,#08h
S_Byte2:
            RRC     A
            MOV     IO_DATA,C
            NOP
            SETB    SCLK
            NOP
            CLR     SCLK
            DJNZ    BitCnt,S_Byte2
            INC     R0              
            DJNZ    ByteCnt,S_Byte1 
            NOP
            CLR     RST               
            RET
;***************************************************************************************
;接收数据程序;
;名称:Receive_Byte
;描述:从被控器DS1302 接收ByteCnt 个字节数据
;命令字节地址在Command 中
;所接收数据的字节数在ByteCnt 中接收的数据在RcvDat 缓冲区中
;***********************************************************************************
Receive_Byte:
             CLR    RST                  ;
             NOP
             CLR    SCLK 
             NOP
             SETB    RST 
             MOV     A,Command 

             MOV     BitCnt,#08h 
R_Byte0:
             RRC     A 
             MOV     IO_DATA,C 
             NOP
             SETB    SCLK 
             NOP
             CLR     SCLK 
             DJNZ    BitCnt,R_Byte0 
             NOP
R_Byte1: 
             CLR     A 
             CLR     C 
             MOV     BitCnt,#08h 
R_Byte2:
             NOP
             MOV     C,IO_DATA 
             RRC     A 
             SETB    SCLK 
             NOP
             CLR     SCLK 
             DJNZ    BitCnt,R_Byte2 
             MOV     @R1,A 
             INC     R1 
             DJNZ    ByteCnt,R_Byte1 
             NOP
             CLR     RST 
             RET
;*************************************


END

⌨️ 快捷键说明

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