4 软件设计
软件设计分为:动态扫描、主程序、系统资源分配和软件模块几部分,在此设计中采用定时器来完成动态扫描显示。用定时器T0定20ms的时间间隔,每次定时时间到时就输出一个LED信号,即显示一位。主程序初始化后,就开始进行对DS12C887的读时间;读完后送显示缓冲区,同时并对定时时间进行判断比较。DS12C887的地址由114字节的用户RAM存放。10字节的存放实时时钟时间\\日历和定闹RAM及用于控制和状态的4字节特殊寄存器组成,几乎所有的128个字节直接读写。
设计程序有:主程序、读取时间的子程序和显示刷新程序。 主程序框图如图4.1所示:
图4.1 主程序框图
主程序如下所示: ORG 000H LJMP START ORG 0030H
START: MOV 30H,#0
18
SETB P1.1
SECOND EQU 2000H
MINUNTE EQU 2001H ;时钟芯片寄存器 HOUR EQU 2004H
WEEK EQU 2006H ;它们代表秒、分钟、时、日期 DATE EQU 2007H ;年、月 MONTH EQU 2008H
YEAR EQU 2009H TREGA EQU 200AH TREGB EQU 200BH TREGC EQU 200CH TREGD EQU 200DH
TUPDATE EQU 80H TBHALT EQU 10000010B TBSALT EQU 0000000B F32K EQU 20H
MOV A,#TBHALT MOVX @DPTR,A MOV @DPTR,#TREGD
MOV A,#32H MOV @DPTR,A MOV DPTR,BHALT MOV A, @DPTR MOV @DPTR,A MOV A,@DPTR
MOV A,#TBHALT MOVX @DPTR,A SS1:LCALL TIMEREC
;可以改变实际连线,地址也相应改变 ;四个控制寄存器 ;如果TREGA.7=1,时钟芯片更新 ;24/12=1,采用24小时计时制 将TBHALT写入TREGB,停止计时 ;将TBSTART写入TREGB继续计时 ;SET=1,PIE,AIE,UIE,SQWE=0,DM=0 ;24/12=1,24HOURS,DSE=0 ;设置控制寄存器,开晶振。 ;开始计时 19
JNB P1.4 ,SS1 LCALL DSPLAY LJMP SS1
读取时间子程序框图如图4.2所示:
开始时钟芯片初始化开晶振并计时读日期存判断时间到没?秒存首址读月份存读分存读年号存子程序返回读时存
图4.2 读取时间的子程序框图
读取时间程序如下所示: TIMEREC:PUSH ACC MOV ACC,IE CLR ETO
MOVRO,DPL ;将指针存入RO、R1 MOVR1,DPH
20
MOV DPTR ,#TREGA ;如果DS12C887正在更新则等待 TIMEWALT:MOVX A,@A+DPTR
JB ACC.7,TIMEWALT ;否则,读取秒数、分钟等数值 MOV DPTR,#SECOND MOVX A,@A+DPTR MOV R6 ,A MOV DPL ,R3 MOV DPH ,R1
MOVX A,@DPTR SUB A, R6 JNZ GETTIME RET
GETTIME: INC RO
INC RO MOV A, @EO
CPL A MOV @EO , A MOV A, R6 MOVX @DPTR ,A INC DPTR MOV R3,DPL MOV R1,DPH
MOV DPTR ,#MINUTE MOVX A,@DPTR MOV DPL ,R3 MOV DPH,R1 MOVX A, @DPTR,A INC DPTR MOV R3,DPL
;取出原来的秒数 ;如果时间未改变则退出 ;指向:所指单元 ;将“:”取反,每秒变化一次 ;以控制亮和灭,形成闪烁效果 ;恢复时间值 ;读取并存储分钟 21
MOV R1,DPH
MOV DPTR,#HOUR ;读取并存储小时 MOVX A, @DPTR MOV DPL,R3 MOVDPH,R1 MOVX @DPTR,A INC DPTR MOV R3,#DPL MOV R1,#DPH
MOV DPTR ,#DATA MOVX A,@DPTR MOV DPL ,R3 MOV DPH ,R1 MOVX @DPTR ,A INC DPTR
MOV R3 ,#TONTH MOVX A, @DPTR MOV DPL ,R3 MOV DPH ,R1 MOVX @DPTR ,A INC DPTR MOV R3,DPL MOV R1,DPH
INC DPTR,#HOUR MOVC A,@DPTR MOV DPL ,R3 MOV DPH ,RR1
MOVX @DPTR ,A POP ACC
;读取并存储日期 ;读取并存储月份 ;读取并存储年号;寄存器恢复保护22