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

📄 4.asm

📁 1302的汇编程序
💻 ASM
字号:
;2008.07.21写定时DS1302,最终搞定了,啊!
;汇编时序是很重要的,DS1302的几个模块要分清
;写保护,写允许,写地址,写数据,读地址,读
;数据 ,主要培养模块化编程思想
	    
		
	;DS1302端口位定义
	T_CLK 	   Bit 	   P1.5;
	T_IO  	   Bit     P1.6;
	T_RST      Bit     P1.7;




		COM1	      BIT	P0.2
		COM2	      BIT	P0.3
		COM3	      BIT	P0.4
		COM4	      BIT	P0.5
		COM5	      BIT	P0.6
		COM6	      BIT	P0.7
		
        
        SEC           EQU  30H 	 
        MIN           EQU  31H 	
        HOU           EQU  32H 	

	    ORG           0000H
	    LJMP          START
	    ORG           0030H

START:	
        MOV     SP,#60H 

        MOV     SEC,#00H
	    MOV	    MIN,#18H     
	    MOV     HOU,#18H
	    LCALL    SET1302  ;/第一需要读DS1302的时间
	    
MAIN:   
	MOV           R7,#07H
	LCALL         GET1302 	  ;数据的接受与读取
    LCALL         DISPLAY		  ;显示
	LJMP          MAIN





;==相关请看DS1302说明=============
SET1302:
          CLR    T_RST
          CLR    T_CLK
          SETB   T_RST
          MOV    B,#8EH ;控制寄存器
          LCALL  RTInputByte ;写1302一字节 
          MOV    B,#00H ;写操作前WP=0
          LCALL  RTInputByte ;写1302一字节 
          SETB   T_CLK
          CLR    T_RST

          MOV    R0,#Sec;
;         MOV    R7,#7 ;秒分时日月星期年
          MOV    R1,#80H ;秒写地址
S13021:   CLR    T_RST
          CLR    T_CLK
          SETB   T_RST
          MOV    B,R1;写秒分时日月星期年地址
          LCALL  RTInputByte;写1302一字节  
          MOV    A,@R0 ;写秒数据
          MOV    B,A
          LCALL  RTInputByte;写1302一字节  
          INC    R0
          INC    R1
          INC    R1
          SETB   T_CLK
          CLR    T_RST
          DJNZ   R7,S13021
          CLR    T_RST
          CLR    T_CLK
          SETB   T_RST
          MOV    B,#8EH ;控制寄存器
          LCALL  RTInputByte;写1302一字节  
          MOV    B,#80H ;控制,WP=1,写保护
          LCALL  RTInputByte;写1302一字节  
          SETB   T_CLK
          CLR    T_RST
          RET
;子程序名:Get1302
;功    能:从DS1302读时间
;调    用:RTInputByte,RTOutputByte
;入口参数:时间保存在:Second,Minute,Hour,Day,Month,Week.YearL
;出口参数:无
;影响资源:A B R0 R1 R4 R7
Get1302:      
          MOV    R0,#Sec;
;         MOV    R7,#7
          MOV    R1,#81H ;秒地址
G13021:   CLR    T_RST
          CLR    T_CLK
          SETB   T_RST
          MOV    B,R1 ;秒分时日月星期年地址
          LCALL  RTInputByte;写1302一字节  
          LCALL  RTOutputByte;读1302一字节
          MOV    @R0,A  ;秒
          INC    R0
          INC    R1
          INC    R1
          SETB   T_CLK
          CLR    T_RST
          DJNZ   R7,G13021
          RET
;功    能:写1302一字节  
RTInputByte:  
          MOV    R4,#8
Inbit1:   MOV    A,B
          RRC    A
          MOV    B,A
          MOV    T_IO,C
          SETB   T_CLK
          CLR    T_CLK
          DJNZ   R4,Inbit1
          RET
;功    能:读1302一字节  
RTOutputByte:
          MOV    R4,#8
Outbit1:  MOV    C,T_IO
          RRC    A
          SETB   T_CLK
          CLR    T_CLK
          DJNZ   R4,Outbit1
          RET

DISPLAY:
 		MOV	         A,SEC				;取秒的低位显示
		ANL	         A,#0FH
		MOV	         DPTR,#TAB2
		MOVC	     A,@A+DPTR
		ACALL	     SEND
		CLR 	     COM6	
		MOV	         R3,#080H			;防止鬼影(延时50uS)
		DJNZ 	     R3,$
		SETB	     COM6

		MOV	         A,SEC			    ;取秒的高位显示
		SWAP	     A
		ANL	         A,#0FH
		MOV	         DPTR,#TAB1
		MOVC	     A,@A+DPTR
		ACALL	     SEND
		CLR 	     COM5	
		MOV		     R3,#080H			;防止鬼影(延时50uS)
		DJNZ 	     R3,$
		SETB	     COM5


 		MOV	         A,MIN			    ;取分的低位显示
		ANL	         A,#0FH
		MOV	         DPTR,#TAB2
		MOVC	     A,@A+DPTR
		ACALL	     SEND
		CLR 	     COM4	
		MOV	         R3,#080H			;防止鬼影(延时50uS)
		DJNZ 	     R3,$
		SETB	     COM4

		MOV	         A,MIN		       ;取分的高位显示
		SWAP	     A
		ANL	         A,#0FH
		MOV	         DPTR,#TAB1
		MOVC	     A,@A+DPTR
		ACALL	     SEND
		CLR 	     COM3	
		MOV	         R3,#080H			;防止鬼影(延时50uS)
		DJNZ 	     R3,$
		SETB	     COM3
	
 		MOV	         A,HOU			;取时的低位显示
		ANL	         A,#0FH
		MOV	         DPTR,#TAB2
		MOVC	     A,@A+DPTR
		ACALL	     SEND
		CLR 	     COM2	
		MOV	         R3,#080H			;防止鬼影(延时50uS)
		DJNZ 	     R3,$
		SETB	     COM2

		MOV	         A,HOU				;取时的高位显示
		SWAP	     A
		ANL	         A,#0FH
		MOV	         DPTR,#TAB1
		MOVC         A,@A+DPTR
		ACALL	     SEND
		CLR 	     COM1	
		MOV		     R3,#080H			;防止鬼影(延时50uS)
		DJNZ 	     R3,$
		SETB	     COM1

		RET

SEND:	MOV	         R2,#08H	
TURN:	RLC	         A
		MOV	         P0.0,C
		SETB	     P0.1
		CLR	         P0.1
		DJNZ	     R2,TURN
		RET


TAB1:	DB     0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H	 ;不带小数点

TAB2:   DB     40H, 79H, 24H, 30H, 19H,12H,02H,78H,00H,10H	 ;带小数点
         
		END

		

⌨️ 快捷键说明

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