?? ds1302sp2.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 $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;修改時(shí)間
set1302:
key: lcall zbcd
lcall showdate;檢查按下的鍵是否釋放
jnb p1.3,key
cmin: lcall zbcd
lcall showdate
lcall delay
jnb p1.3,chr;時(shí)與分的切換
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;調(diào)用日期修改
jnb p1.4,addhr
ajmp chr1
addhr: lcall zbcd
lcall showdate
mov a,37h
mov r1,#01h ;修改小時(shí)
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;調(diào)用年份月份的顯示
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;定時(shí)中斷入口
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;顯示緩沖區(qū)
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;讀數(shù)據(jù)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;讀入數(shù)據(jù)
outbit: mov c,io
rrc a
setb sclk
clr sclk
djnz r4,outbit
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
zbcd: mov a,35h;轉(zhuǎn)換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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -