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

📄 rtcv10.inc

📁 本程序为某企业的税控机固件程序.基于东芝TMP93CS41 16位单片机编写,符合国家标准.该程序已经经过多次长期调试.
💻 INC
字号:
;***********************************************************
;程序名称:		RTC访问子程序
;程序开发:		前锋集团技术中心 江海波
;编写时间:		2004年7月7日
;软件环境:		供QF561型税控器的上层C语言使用
;硬件环境:		QF561型税控器,硬件环境V1.0
;			RTC芯片为DALLAS公司DS12C887
;MCU:			TOSHIBA TMP93CS41@max 16M/1
;程序版本:		V1.00
;最后修订时间:		2004年12月17日
;修订部分说明:
;----------------------------------------------------------

;**********************************************************

;定义伪指令,当软,硬件结构改变时修改本位置上的指令即可完成程序修改

;----------------------------------------------------------
;为了提高系统可靠性,我们对RTC采用了复选通模式,这个复选通端口被定义在
;端口rtc_sel_port的rtc_sel_bit位上
rtc_sel_port	equ	P3
rtc_sel_bit	equ	2
;----------------------------------------------------------
;上层C语言和本程序之间由一个名叫"rtc_buffer"的缓冲区传递时间参数
;这个缓冲区的首地址被定义在:
rtc_buffer	equ	0x101
;这个缓冲区中的数据分别为:rtc_buffer年,rtc_buffer+1月,rtc_buffer+2日
;rtc_buffer+3时,rtc_buffer+4分,rtc_buffer+5秒,rtc_buffer+6周
;----------------------------------------------------------
;为了方便程序调试和硬件Debug模式下的调试工作,程序安排了一个错误标志
;这个标志被定义在地址:
t_error_flag	equ	0x144
;----------------------------------------------------------
;DS12C887被挂在系统数据总线上,其首地址为:
rtc_addr	equ	0X300000
;**********************************************************

;--------------------全局函数声明---------------------------

PUBLIC	__get_time			;---RTC时间读取函数
PUBLIC	__set_time			;---RTC时间设置函数
PUBLIC	__init_rtc			;---RTC初始化函数

;**********************************************************

;********************RTC时间读取函数***********************

__get_time:					;Get Time From The DS12887 RTC
	di					;关中断
	res	rtc_sel_bit,(rtc_sel_port)	;开复选通
	ld	(t_error_flag),0x05		;预制错误标志
	ld	bc,0x64				;时间保护计数器,保护时间为100uS

uip_test:
	ld	w,(rtc_addr+10)			;读入A寄存器
	ldcf	7,w				;取UIP标志位
	jp	nc,read_time
	djnz	bc,uip_test

read_time:
	ld	(rtc_buffer),(rtc_addr+9)	;年信息
	ld	(rtc_buffer+1),(rtc_addr+8)	;月信息
	ld	(rtc_buffer+2),(rtc_addr+7)	;日信息
	ld	(rtc_buffer+3),(rtc_addr+4)	;时信息
	ld	(rtc_buffer+4),(rtc_addr+2)	;分信息
	ld	(rtc_buffer+5),(rtc_addr)	;秒信息
	ld	(rtc_buffer+6),(rtc_addr+6)	;星期信息

	ld	(t_error_flag),0x03		;读时间成功

	set	rtc_sel_bit,(rtc_sel_port)	;关复选通
	ei	0x00				;开中断
	ret

;*********************RTC时间设置函数***********************

__set_time:
	di					;关中断
	res	rtc_sel_bit,(rtc_sel_port)	;开复选通

	ld	(rtc_addr+11),0x82		;设置更改时间标志

	ld	(rtc_addr+9),(rtc_buffer)	;年信息
	ld	(rtc_addr+8),(rtc_buffer+1)	;月信息
	ld	(rtc_addr+7),(rtc_buffer+2)	;日信息
	ld	(rtc_addr+4),(rtc_buffer+3)	;时信息
	ld	(rtc_addr+2),(rtc_buffer+4)	;分信息
	ld	(rtc_addr),(rtc_buffer+5)	;秒信息
	ld	(rtc_addr+6),(rtc_buffer+6)	;星期信息

	ld	(rtc_addr+11),0x02		;更改完毕,时间格式为24H,BCD
	set	rtc_sel_bit,(rtc_sel_port)	;关复选通
	ei	0x00				;开中断
	ret

;******************RTC时间初始化函数***********************

__init_rtc:					;---INITialization RTC
	di					;关中断
	res	rtc_sel_bit,(rtc_sel_port)	;开复选通

	ld	w,(rtc_addr+13)			;RTC掉电标志判断
	ldcf	7,w
	jp	c,ini_rtc_fini
	ld	(t_error_flag),0x01		;错误,电池耗尽

ini_rtc_fini:					;---INITialization RTC FINIsh
	ld	(rtc_addr+11),0x02		;初始化完毕,时间格式为24H,BCD
	ld	(rtc_addr+10),0x20		;开震荡
	set	rtc_sel_bit,(rtc_sel_port)	;关复选通
	ei	0x00				;开中断
	ret

;**********************************************************

⌨️ 快捷键说明

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