新闻中心

EEPW首页>嵌入式系统>设计应用> 电子钟的设计及仿真

电子钟的设计及仿真

作者: 时间:2016-11-23 来源:网络 收藏
一、实现电子钟计时的基本方法:
(1) 计数初值计算:
把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒,而100次计数可用软件方法实现。
假设使用T/C0,方式1,50ms定时,fosc=12MHz。
则初值X满足(216-X)×1/12MHz×12μs =50000μs
X=15536→0011110010110000→3CB0H
(2) 采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);
(3) 从秒到分和从分到时的计时是通过累加和数值比较实现。




二、软件系统设计
程序清单:
ORG0000H
AJMPMAIN
ORG000BH
LJMPINTT0

ORG0030H
MAIN:MOVSP,#60H;确立堆栈区
MOVPSW,#00H;
MOVR0,#20H;RAM区首地址
MOVR7,#5FH;RAM区单元个数
QL:MOV@R0,#00H;RAM清零
INCR0
DJNZR7,QL
MOVIP,#02H;IP初始化,优先定时器0
MOVIE,#82H;IE初始化,
MOVTMOD,#01H;定时器0方式1工作
LCALLPP;调P.子程序
NEXT:LCALLKEY;按键检测子程序
JBACC.0,RUNF;A键按下运行
LCALLDISP;调用显示子程序
SJMPNEXT

RUNF:LCALLOUTT;调传送子程序
LCALLTIME;开电子钟
JK:LCALLDISP;调用显示子程序
LCALLKEY;按键检测子程序
JZJK
LCALLANKEY
LCALLDISP;调用显示子程序
SJMPJK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;P点显示;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PP:MOV37H,#12;P点编码送寄存器
MOVR0,#30H;P点编码送寄存器
MOVR7,#07H
PPP:MOV@R0,#10
INCR0
DJNZR7,PPP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;键扫子程序;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY:LCALLKEYS;调键值处理子程序
JZEXIT;没有键按下转到返回
LCALLDISP
LCALLDISP;调显示去抖动
LCALLKEYS
JZEXIT
MOVB,20H;保存键值
KEYSF: LCALLKEYS;调键值处理子程序
JZKEYY;键释放,转到恢复键值
LCALLDISP;调显示子程序延时
AJMPKEYSF;等到键释放
KEYY: MOVA,B;键值送20H单元保存
EXIT: RET;返回
KEYS:MOVP1,#0FFH;先向P1口写1
MOVA,P1;P1口值送累加器A
CPLA;A值取反
ANLA,#0FH;保存P1口的低4位
MOV20H,A;A值送20H保存
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;键功能子程序;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ANKEY: CLREA;关中断
CHECK: JBTR0,YXZ;判断是否运行
K0:CJNEA,#01H,K1
AJMPRUN;转运行
K1:CJNEA,#02H,K2
AJMPKEY1;转时调整
K2:CJNEA,#04H,K3
AJMPKEY2;转分调整
K3:CJNEA,#08H,OUT
AJMPKEY3;转秒调整

YXZ:JBACC.0,STOP
AJMPOUT

KEY1:MOVR0,#45H;时调整
LCALLADD1
CLRC
CJNEA,#24H,OUTT
ACALLCLR0
AJMPOUTT
KEY2:MOVR0,#43H;分调整
LCALLADD1
CLRC
CJNEA,#60H,OUTT
ACALLCLR0
AJMPOUTT
KEY3:MOVR0,#41H;秒调整
ACALLADD1
CLRC
CJNEA,#60H,OUTT
ACALLCLR0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;传送显示数据;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OUTT: MOV30H,40H;秒显示单元41H-42H
MOV31H,41H
MOV32H,#11; "-"
MOV33H,42H;分显示单元43H-44H
MOV34H,43H
MOV35H,#11; "-"
MOV36H,44H;时显示单元44-45H
MOV37H,45H
RET
STOP:CLRTR0;关电子钟并跳出
RET
RUN:LCALLTIME;运行电子钟
OUT:SETBEA;无键按下或完成功能跳出
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;运行电子钟;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME:SETBEA
MOVTL0,#0B0H
MOVTH0,#3CH;3CB0H
MOVR4,#20;50ms,20次循环
SETBTR0;启动定时器0
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;定时中断;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT0: PUSHACC
PUSHPSW
CLRET0
CLRTR0
MOVTL0,#0B0H;重新设定定时初值
MOVTH0,#3CH
SETBTR0;启动定时器0
DJNZR4,OUTT0;1秒到
ADDSS: MOVR4,#14H;20次计数
MOVR0,#41H;秒十位
ACALLADD1;加1程序
CLRC
CJNEA,#60H,ADDMM ;1分到
ADDMM: JCOUTT0
ACALLCLR0
MOVR0,#43H
ACALLADD1;加1程序
CLRC
CJNEA,#60H,ADDHH ;1小时到
ADDHH: JCOUTT0
ACALLCLR0
MOVR0,#45H
ACALLADD1;加1程序
CLRC
CJNEA,#24H,HOUR;1天到
HOUR: JCOUTT0
ACALLCLR0
OUTT0: MOV30H,40H;秒显示单元41H-42H
MOV31H,41H
MOV32H,#11; "-"
MOV33H,42H;分显示单元43H-44H
MOV34H,43H
MOV35H,#11; "-"
MOV36H,44H;时显示单元44-45H
MOV37H,45H
POPPSW
POPACC
SETBET0
RETI


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;时间清零子程序 ;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR0: CLRA
MOV@R0,A
DECR0
MOV@R0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;加一子程序;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ADD1: MOVA,@R0;取十位
DECR0
SWAPA
ORLA,@R0;组合十位与个位
ADDA,#01H;加1
DAA;十进制调整
MOVR3,A;暂存
ANLA,#0FH;屏蔽十位
MOV@R0,A;放入个位单元
MOVA,R3;取值
INCR0
SWAPA
ANLA,#0FH;屏蔽个位
MOV@R0,A;放入十位单元
MOVA,R3;数值放入A中等待判断
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;显示子程序30H;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP:MOVR1,#30H;显示缓冲存储单元首地址
MOVR2,#80H;从右至左显示
DISP1: MOVP2,R2;送位控
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP0,A;送段控
ACALLDL;延时
MOVA,R2
JBACC.0,DISP2
RRA
INCR1
MOVR2,A
AJMPDISP1
DISP2: RET
TAB: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH,0CH
DL:MOVR6,#14H;显示延时子程序
DL1:MOVR7,#19H ;
DL2:DJNZR7,DL2
DJNZR6,DL1
RET
END


关键词:电子钟设计仿

评论


技术专区

关闭