AT89C2051制电子钟时钟源程序.docx

上传人:苏美尔 文档编号:6194322 上传时间:2020-09-22 格式:DOCX 页数:7 大小:99.06KB
返回 下载 相关 举报
AT89C2051制电子钟时钟源程序.docx_第1页
第1页 / 共7页
AT89C2051制电子钟时钟源程序.docx_第2页
第2页 / 共7页
AT89C2051制电子钟时钟源程序.docx_第3页
第3页 / 共7页
AT89C2051制电子钟时钟源程序.docx_第4页
第4页 / 共7页
AT89C2051制电子钟时钟源程序.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《AT89C2051制电子钟时钟源程序.docx》由会员分享,可在线阅读,更多相关《AT89C2051制电子钟时钟源程序.docx(7页珍藏版)》请在三一文库上搜索。

1、精品 料推荐AT89C2051制电子钟时钟源程序本程序来自于互联网,站长尚没试验,但是,该程序给出了详细的说明,相信对大家很有帮助!因此,站长向原作者表示真诚谢意!;AT89C2051时钟程序;定时器 T0 、 T1 溢出周期为50MS , T0 为秒计数用,T1 为调整时闪烁用,;P3.7为调整按钮,P1 口 为字符输出口,采用共阳显示管。;中断入口程序;ORG 0000H; 程序执行开始地址LJMPSTART ;跳到标号START 执行ORG 0003H; 外中断 0 中断程序入口RETI; 外中断 0 中断返回ORG 000BH; 定时器 T0 中断程序入口LJMPINTT0 ;跳至 I

2、NTTO执行ORG 0013H; 外中断 1 中断程序入口RETI; 外中断 1 中断返回ORG 001BH; 定时器 T1 中断程序入口LJMPINTT1 ;跳至 INTT1执行ORG 0023H; 串行中断程序入口地址RETI; 串行中断程序返回;主 程 序;1精品 料推荐;START: MOVR0,#70H; 清 70H-7AH共 11 个内存单元MOVR7,#0BH;CLEARDISP: MOVR0,#00H;INCR0;DJNZ R7,CLEARDISP;MOV20H,#00H; 清 20H (标志用)MOV7AH,#0AH; 放入 熄灭符 数据MOVTMOD,#11H; 设 T0

3、、 T1 为 16 位定时器MOVTL0,#0B0H;50MS定时初值(T0 计时用)MOVTH0,#3CH;50MS定时初值MOVTL1,#0B0H;50MS定时初值(T1 闪烁定时用)MOVTH1,#3CH;50MS定时初值SETB EA; 总中断开放SETB ET0; 允许T0 中断SETB TR0; 开启T0 定时器MOVR4,#14H;1秒定时用初值( 50MS 20 )START1: LCALL DISPLAY; 调用显示子程序JNBP3.7,SETMM1;P3.7 口为 0 时转时间调整程序SJMP START1;P3.7 口为 1 时跳回 START1SETMM1:LJMP S

4、ETMM; 转到时间调整程序SETMM;1 秒计时程序;T0 中断服务程序INTT0: PUSH ACC; 累加器入栈保护PUSH PSW; 状态字入栈保护CLRET0; 关 T0 中断允许CLRTR0; 关闭定时器 T0MOVA,#0B7H; 中断响应时间同步修正ADDA,TL0; 低 8位初值修正MOVTL0,A; 重装初值(低 8位修正值)MOVA,#3CH; 高 8位初值修正ADDC A,TH0;MOVTH0,A; 重装初值(高 8位修正值)SETB TR0; 开启定时器 T0DJNZ R4, OUTT0;20 次中断未到中断退出ADDSS: MOVR4,#14H;20 次中断到( 1

5、 秒)重赋初值MOVR0,#71H; 指向秒计时单元(71H-72H )ACALL ADD1; 调用加 1 程序(加 1秒操作)MOVA,R3; 秒数据放入 A ( R3 为 2 位十进制数组合)CLRC; 清进位标志CJNE A,#60H,ADDMM;ADDMM: JCOUTT0; 小于 60 秒时中断退出2精品 料推荐ACALL CLR0; 大于或等于 60秒时对秒计时单元清0MOVR0,#77H; 指向分计时单元( 76H-77H)ACALL ADD1; 分计时单元加 1 分钟MOVA,R3; 分数据放入 ACLRC; 清进位标志CJNE A,#60H,ADDHH;ADDHH: JCOU

6、TT0; 小于 60分时中断退出ACALL CLR0; 大于或等于 60分时分计时单元清0MOVR0,#79H; 指向小时计时单元( 78H-79H)ACALL ADD1; 小时计时单元加1 小时MOVA,R3; 时数据放入 ACLRC; 清进位标志CJNE A,#24H,HOUR;HOUR: JCOUTT0; 小于 24 小时中断退出ACALL CLR0; 大于或等于 24小时小时计时单元清0OUTT0: MOV72H,76H; 中断退出时将分、时计时单元数据移MOV73H,77H; 入对应显示单元MOV74H,78H;MOV75H,79H;POPPSW; 恢复状态字(出栈)POPACC;

7、恢复累加器SETB ET0; 开放T0 中断RETI; 中断返回;闪动调时程 序;T1中断服务程序,用作时间调整时调整单元闪烁指示INTT1:PUSHACC; 中断现场保护PUSHPSW;MOVTL1,#0B0H; 装定时器T1 定时初值MOVTH1,#3CH;DJNZR2,INTT1OUT;0.3秒未到退出中断( 50MS中断 6 次)MOVR2,#06H; 重装 0.3 秒定时用初值CPL02H;0.3 秒定时到对闪烁标志取反JB02H,FLASH1;02H位为 1 时显示单元 熄灭 MOV72H,76H;02H位为 0 时正常显示MOV73H,77H;MOV74H,78H;MOV75H,

8、79H;INTT1OUT:POPPSW; 恢复现场POPACC;RETI; 中断退出FLASH1:JB01H,FLASH2;01H位为 1 时,转小时熄灭控制MOV72H,7AH;01H位为 0 时, 熄灭符 数据放入分MOV73H,7AH; 显示单元( 72H-73H ),将不显示分数据3精品 料推荐MOV74H,78H;MOV75H,79H;AJMPINTT1OUT; 转中断退出FLASH2:MOV72H,76H;01H 位为 1时, 熄灭符 数据放入小时MOV73H,77H; 显示单元( 74H-75H),小时数据将不显示MOV74H,7AH;MOV75H,7AH;AJMPINTT1OU

9、T; 转中断退出;加 1 子 程序;ADD1: MOVA,R0; 取当前计时单元数据到ADECR0; 指向前一地址SWAP A;A 中数据高四位与低四位交换ORLA,R0; 前一地址中数据放入A 中低四位ADDA,#01H;A 加 1 操作DAA; 十进制调整MOVR3,A; 移入 R3寄存器ANLA,#0FH; 高四位变 0MOVR0,A; 放回前一地址单元MOVA,R3; 取回 R3 中暂存数据INCR0; 指向当前地址单元SWAPA;A 中数据高四位与低四位交换ANLA,#0FH; 高四位变 0MOVR0,A; 数据放入当削地址单元中RET; 子程序返回;清零程序; 对计时单元复零用CL

10、R0: CLRA; 清累加器MOVR0,A; 清当前地址单元DECR0; 指向前一地址MOVR0,A; 前一地址单元清0RET; 子程序返回;时钟调整程序; 当调时按键按下时进入此程序SETMM: cLRET0; 关定时器T0 中断CLRTR0; 关闭定时器T0LCALLDL1S; 调用 1 秒延时程序4精品 料推荐JBP3.7,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电)MOVR2,#06H; 进入调时状态,赋闪烁定时初值SETBET1; 允许 T1 中断SETBTR1; 开启定时器 T1SET2: JNBP3.7,SET1;P3.7 口为 0 (键未释放) ,等待SETB00H

11、; 键释放,分调整闪烁标志置1SET4: JBP3.7,SET3; 等待键按下LCALLDL05S; 有键按下,延时0.5秒JNBP3.7,SETHH; 按下时间大于0.5秒转调小时状态MOVR0,#77H; 按下时间小于0.5秒加 1 分钟操作LCALLADD1; 调用加 1 子程序MOVA,R3; 取调整单元数据CLRC; 清进位标志CJNEA,#60H,HHH; 调整单元数据与60比较HHH: JCSET4; 调整单元数据小于60转 SET4循环LCALLCLR0; 调整单元数据大于或等于60 时清 0CLRC; 清进位标志AJMPSET4; 跳转到 SET4 循环CLOSEDIS: S

12、ETBET0; 省电( LED 不显示)状态。开T0 中断SETBTR0; 开启T0 定时器(开时钟)CLOSE:JBP3.7,CLOSE; 无按键按下,等待。LCALLDISPLAY; 有键按下,调显示子程序延时削抖JBP3.7,CLOSE; 是干扰返回 CLOSE等待WAITH:JNBP3.7,WAITH; 等待键释放LJMPSTART1; 返回主程序( LED 数据显示亮)SETHH: CLR00H; 分闪烁标志清除(进入调小时状态)SETHH1: JNBP3.7,SET5; 等待键释放SETB01H; 小时调整标志置1SET6: JBP3.7,SET7; 等待按键按下LCALLDL05

13、S; 有键按下延时 0.5秒JNBP3.7,SETOUT; 按下时间大于0.5秒退出时间调整MOVR0,#79H; 按下时间小于0.5秒加 1 小时操作LCALLADD1; 调加 1 子程序MOVA,R3;CLRC;CJNEA,#24H,HOUU; 计时单元数据与24 比较HOUU: JCSET6; 小于 24 转 SET6循环LCALLCLR0; 大于或等于 24时清 0操作AJMPSET6; 跳转到 SET6 循环SETOUT: JNBP3.7,SETOUT1; 调时退出程序。等待键释放LCALLDISPLAY; 延时削抖JNBP3.7,SETOUT; 是抖动,返回SETOUT 再等待CL

14、R01H; 清调小时标志CLR00H; 清调分标志CLR02H; 清闪烁标志CLRTR1; 关闭定时器 T15精品 料推荐CLRET1; 关定时器T1 中断SETBTR0; 开启定时器T0SETBET0; 开定时器T0 中断(计时开始)LJMPSTART1; 跳回主程序SET1: LCALLDISPLAY; 键释放等待时调用显示程序(调分)AJMPSET2; 防止键按下时无时钟显示SET3: LCALLDISPLAY; 等待调分按键时时钟显示用AJMPSET4SET5: LCALLDISPLAY; 键释放等待时调用显示程序(调小时)AJMPSETHH1; 防止键按下时无时钟显示SET7: LC

15、ALLDISPLAY; 等待调小时按键时时钟显示用AJMPSET6SETOUT1: LCALLDISPLAY; 退出时钟调整时键释放等待AJMPSETOUT; 防止键按下时无时钟显示;显示程序;显示数据在70H-75H单元内,用六位LED 共阳数码管显示,P1 口输出段码数据,P3 口作; 扫描控制,每个 LED 数码管亮 1MS 时间再逐位循环。DISPLAY: MOVR1,#70H; 指向显示数据首址MOVR5,#0FEH; 扫描控制字初值PLAY: MOVA,R5; 扫描字放入 AMOVP3,A; 从 P3口输出MOVA,R1; 取显示数据到 AMOVDPTR,#TAB; 取段码表地址M

16、OVCA,A+DPTR; 查显示数据对应段码MOVP1,A; 段码放入 P1 口LCALLDL1MS; 显示 1MSINCR1; 指向下一地址MOVA,R5; 扫描控制字放入AJNBACC.5,ENDOUT;ACC.5=0时一次显示结束RLA;A 中数据循环左移MOVR5,A; 放回R5 内AJMPPLAY; 跳回 PLAY 循环ENDOUT: SETBP3.5; 一次显示结束,P3 口复位MOVP1,#0FFH;P1口复位RET; 子程序返回TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH; 共阳段码表012 34567 89不亮 ;延时程序;1MS延时程序, LED 显示程序用6精品 料推荐DL1MS: MOVR6,#14HDL1:MOVR7,#19HDL2:DJNZR7,DL2DJNZR6,DL1RET;20MS延时程序,采用调用显示子程序以改善LED 的显示闪烁现象DS20MS: ACALLDISPLAYACALLDISPLAYACALLDISPLAYRET; 延时程序,用作按键时间的长短判断DL1S:LCALLDL05SLCALLDL05SRETDL05S:MOVR3,#20H;8 毫秒 *32=0.196秒DL05S1: LCALLDISPLAYDJNZR3,DL05S1RET;END; 程序结束7

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1