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

📄 ds1302sp2.asm

📁 ds1302电子时钟单片机设计汇编原码
💻 ASM
字号:
IO	EQU	P1.0
SCLK	EQU	P1.1
RST	EQU	P1.2
SECOND	EQU	30H; 
MIN	EQU	31H;
HR	EQU	32H
CDATA	EQU	33H
	org	0000h
	ajmp	main
	org	000bh
	ljmp	begin
	org	0003h
	ljmp	set1302
	org	0040h
main:	mov	sp,#60h
	mov	49h,#20
	mov	r5,49h
	mov	tmod,#01h
	mov	th0,#0b1h
	mov	tl0,#0dfh
	setb	ea
	setb	ex0
	clr	it0
	setb	et0
	setb	tr0
	sjmp	$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;修改时间
set1302:
key:	lcall	zbcd
	lcall	showdate;检查按下的键是否释放
	jnb	p1.3,key
	
cmin:	lcall	zbcd
	lcall	showdate
	lcall	delay
	jnb	p1.3,chr;时与分的切换
	jnb	p1.4,addmin
	ajmp	cmin
addmin:	lcall	zbcd
	lcall	showdate;修改分钟
	mov	a,36h
	mov	r1,#01h
	addc	a,r1
	da	a
	mov	36h,a
	lcall	zbcd
	lcall	showdate
	mov	a,36h
	cjne	a,#60h,cmin
	mov	36h,#00h
	ajmp	cmin
chr:	lcall	zbcd;等待切换键的释放
	lcall	showdate
	jnb	p1.3,chr
chr1:	lcall	zbcd	
	lcall	showdate	
	jnb	p1.3,cdat1;调用日期修改
	jnb	p1.4,addhr
	ajmp	chr1
addhr:	lcall	zbcd
	lcall	showdate
	mov	a,37h
	mov	r1,#01h ;修改小时
	addc	a,r1
	da	a
	mov	37h,a
	lcall	zbcd
	lcall	showdate
	mov	a,37h
	cjne	a,#23h,chr
	mov	37h,#00h
	ajmp	chr
cdat1:	lcall	year
	lcall	showdate;等待键的释放
	jnb	p1.3,cdat1
cdat:  	lcall	zbcd	
	lcall	showdate	
	jnb	p1.3,over;调用年份月份的显示
	jnb	p1.4,addata
	ajmp	cdat
addata: lcall	zbcd
	lcall	showdate
	mov	a,38h
	mov	r1,#01h
	addc	a,r1
	da	a
	mov	38h,a
	lcall	zbcd
	lcall	showdate
	mov	a,38h
	cjne	a,#32h,cdat
	mov	38h,#00h
	ajmp	cdat	
over:	lcall	year
	lcall	showdate
	jb	p1.3,over1
	sjmp	over
over1:	mov	30h,35h
	mov	31h,36h
	mov	32h,37h
	mov	33h,38h
	clr	sclk
	clr	rst
	setb	rst
	mov	b,#8eh
	lcall	write
	mov	b,#00h
	lcall	write
 	clr	rst
	setb	sclk
	mov	r0,#second
	mov	r7,#4h
	mov	r1,#80h
set13021:clr	rst;把修改的值写入ds1302
	clr	sclk
	setb	rst
	mov	b,r1
	lcall	write
	mov	a,@r0
	mov	b,a
	lcall	write
	inc	r0
	inc	r1
	inc	r1
	setb	sclk
	clr	rst
	djnz	r7,set13021
	clr	sclk
	clr	rst
	setb	rst
	mov	b,#8eh
	lcall	write
	mov	b,#80h
	lcall	write
	clr	rst
	setb	sclk
	clr	ie0
	reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
write:	mov	r4,#08h;值写入子程
inbit:	mov	a,b
	rrc	a
	mov	b,a
	mov	io,c
	setb	sclk
	clr	sclk
	djnz	r4,inbit
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
begin:	mov	th0,#0b1h;定时中断入口
	mov	tl0,#0dfh
	lcall	showdate
	djnz	r5,zwq
	lcall	out1302	
	lcall	zbcd
        
	lcall	delay
	
zwq:	reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
showdate:	;显示子程序
	clr	c
	mov	p1.7,c 
ss:	mov	r0,#40h;显示缓冲区
	mov	r2,#08h
	mov	r1,#0feh
go:	mov	a,r1
	mov	p2,a
	mov	p0,@r0
	rl	a
	mov	r1,a
	inc	r0
	lcall	delay
	djnz	r2,go
	ret
delay:	mov	r7,#20h
dey:	mov	r6,#50h
dey1:	djnz	r6,dey1
	djnz	r7,dey
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
year:	;年,星期,月的显示附件
	mov	a,39h
	anl	a,#0fh
	mov	40h,a
	mov	a,39h
	anl	a,#0f0h
	swap	a
	mov	41h,a
	mov	a,3ah
	anl	a,#0fh
	mov	42h,a
	mov	a,3ah
	anl	a,#0f0h
	swap	a
	mov	43h,a
	mov	a,3bh
	anl	a,#0fh
	mov	44h,a
	mov	a,3bh
	anl	a,#0f0h
	swap	a
	mov	45h,a
	mov	46h,#00h
	mov	47h,#02h
	mov	dptr,#tab
	mov	r1,#40h
	mov	r2,#8h
chabia:	mov	a,@r1
	movc	a,@a+dptr
	mov	@r1,a
	inc	r1
	djnz	r2,chabia
	ret		
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;读数据ds1302
out1302:setb	c
	mov	p1.7,c
	mov	r5,49h
	mov	r0,#35h
	mov	r7,#8h
	mov	r1,#81h
get1302:clr	sclk
	clr	rst
	setb	rst
	mov	b,r1
	lcall	write
	lcall	read
	mov	@r0,a
	inc	r0
	inc	r1
	inc	r1
	setb	sclk
	clr	rst
	djnz	r7,get1302
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
read:	mov	r4,#8h;读入数据
outbit:	mov	c,io
	rrc 	a
	setb	sclk
	clr	sclk
	djnz	r4,outbit
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
zbcd:   mov	a,35h;转换bcd码查表并显示
	anl	a,#0fh
	mov	40h,a
	mov	a,35h
	anl	a,#0f0h
	swap	a
	mov	41h,a
	mov	a,36h
	anl	a,#0fh
	mov	42h,a
	mov	a,36h
	anl	a,#0f0h
	swap	a
	mov	43h,a
	mov	a,37h
	anl	a,#0fh
	mov	44h,a
	mov	a,37h
	anl	a,#0f0h
	swap	a
	mov	45h,a
	mov	a,38h
	anl	a,#0fh
	mov	46h,a
	mov	a,38h
	anl	a,#0f0h
	swap	a
	mov	47h,a
	mov	dptr,#tab
	mov	r1,#40h
	mov	r2,#8h
chabiao:mov	a,@r1
	movc	a,@a+dptr
	mov	@r1,a
	inc	r1
	djnz	r2,chabiao
	ret
tab:	db	0c0h,0f9h,0a4h,0b0h,99h
	db	92h,82h,0f8h,80h,90h
	end




	
	

	



⌨️ 快捷键说明

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