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

📄 ds1302.asm

📁 ds1302使用及显示
💻 ASM
字号:
;=================================================
; DS1302测试程序
;=================================================
;
;实验板配套测试程序
;
;采用最简单的流程编写,简单易懂
;
;只为测试学习板使用
;
;考虑到只作为测试1302使用,所以只显示秒
;
;=================================================

  LED1	 EQU	P1.3  ;
  LED2	 EQU	P1.2  ;
  LED3	 EQU	P1.1  ;显示控制
  LED4	 EQU	P1.0  ;
  DATA1  EQU  70H   ;
  DATA2  EQU  71H   ;显示数据缓存区
  DATA3  EQU  72H   ;
  DATA4  EQU  73H   ;
  T_CLK Bit P3.5    ;实时时钟时钟线引脚 
  T_IO  Bit P3.6    ;实时时钟数据线引脚 
  T_RST Bit P3.3    ;实时时钟复位线引脚 

  ORG 0000H
  LJMP MAIN                  ;转入主程序
  ORG 0050H

MAIN:
  SETB P3.7
  NOP
  MOV DATA1,#00H             ;显示区初始化
  MOV DATA2,#00H
  MOV DATA3,#10H
  MOV DATA4,#10H
  MOV P2,#0FFH
  MOV P1,#00H
  MOV 60H,#00                ;秒
  MOV 61H,#00                ;分 
  MOV 62H,#08                ;时
  MOV 63H,#19                ;日
  MOV 64H,#09                ;月
  MOV 65H,#05                ;星期
  MOV 66H,#08                ;年
  ACALL SET1302              ;DS1302数据设置,并启动
DIS:
	NOP
  ACALL DISPLAY
  NOP
	ACALL GET1302              ;取秒数据
	MOV A,60H
  ANL A,#00001111B
	MOV DATA1,A
	MOV A,60H
  ANL A,#01110000B
  RR A
  RR A
  RR A
  RR A    
	MOV DATA2,A
	ACALL DISPLAY              ;显示秒数据
  NOP
  JMP DIS

SET1302:                   
   CLR T_RST 
   CLR T_CLK 
   SETB T_RST 
   MOV B, #8EH             ;控制寄存器 
   LCALL RTInputByte 
   MOV B, #00H             ;写操作前WP=0 
   LCALL RTInputByte 
   SETB T_CLK 
   CLR T_RST 
   MOV R0, #60H            ;秒入口地址
   MOV R7, #7              ;秒 分 时 日 月 星期 年 
   MOV R1, #80H            ;秒写地址 
S13021: 
   CLR T_RST 
   CLR T_CLK 
   SETB T_RST 
   MOV B, R1               ;写秒 分 时 日 月 星期 年 地址
   LCALL RTInputByte 
   MOV A, @R0              ;写秒数据 
   MOV B, A 
   LCALL RTInputByte 
   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 
   MOV B, #80H             ;控制,WP=1,写保护 
   LCALL RTInputByte 
   SETB T_CLK 
   CLR T_RST 
RET

GET1302: 
   MOV R0, #60H             ;数据存放地址入口 
   MOV R7, #7 
   MOV R1, #81H            ;秒地址 
G13021: 
   CLR T_RST 
   CLR T_CLK 
   SETB T_RST 
   MOV B, R1               ;秒 分 时 日 月 星期 年 地址 
   LCALL RTInputByte 
   LCALL RTOutputByte 
   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:                          ;显示子程序,可移植
  PUSH A
  NOP
  SETB LED2
  NOP
  SETB LED3
  NOP
  SETB LED4
  NOP
  CLR LED1
  NOP
  MOV DPTR,#TABLE
  MOV	A,DATA1
	MOVC	A,@A+DPTR
	MOV	P0,A
  ACALL DISDELAY
  SETB LED1
  CLR LED2
  NOP
  MOV DPTR,#TABLE
  MOV	A,DATA2
	MOVC	A,@A+DPTR
	MOV	P0,A
  ACALL DISDELAY
  SETB LED2
  CLR LED3
  NOP
  MOV DPTR,#TABLE
  MOV	A,DATA3
	MOVC	A,@A+DPTR
	MOV	P0,A
  ACALL DISDELAY
  SETB LED3
  CLR LED4
  NOP
  MOV DPTR,#TABLE
  MOV	A,DATA4
	MOVC	A,@A+DPTR
	MOV	P0,A
  ACALL DISDELAY
  POP A
  RET

DISDELAY:
  MOV 74H,#10
DISD:
  MOV 75H,#250
  DJNZ 75H,$
  DJNZ 74H,DISD
  RET


TABLE:
	DB	11000000B	;0     
	DB	11111001B	;1      
	DB	10100100B	;2   
	DB	10110000B	;3   
	DB	10011001B	;4   
	DB	10010010B	;5   
	DB	10000010B	;6   
	DB	11111000B	;7   
	DB	10000000B	;8   
	DB	10010000B	;9   
	DB	10001000B	;A   
	DB	10000011B	;b   
	DB	11000110B	;C   
	DB	10100001B	;d   
	DB	10000110B	;E   
	DB	10001110B	;F   
	DB	10111111B	;-   
	DB	11111111B	;    
END

⌨️ 快捷键说明

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