数字时钟中断程序汇编程序及原理
更新时间:2023-05-19 12:54:01 阅读量: 实用文档 文档下载
- 时钟中断的中断服务程序是推荐度:
- 相关推荐
20. 数字钟﹝★﹞
1. 实验任务
(1.
(2.
(3.
(4. 开机时,显示12:00:00的时间开始计时; P0.0/AD0控制“秒”的调整,每按一次加1秒; P0.1/AD1控制“分”的调整,每按一次加1分; P0.2/AD2控制“时”的调整,每按一次加1个小时;
2. 电路原理图
图4.20.1
3. 系统板上硬件连线
(1. 把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”
区域中的A-H端口上;
(2. 把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”
区域中的S1-S8端口上;
(3. 把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接
到“独立式键盘”区域中的SP3、SP2、SP1端口上;
4. 相关基本知识
(1. 动态数码显示的方法
(2. 独立式按键识别过程
(3. “时”,“分”,“秒”数据送出显示处理方法
5. 程序框图
AT89S51 单片机实验及实践教程开 始
计数单元清零 TH0,TL0 装入初值 开中断, 并允许 T0 中断 秒按键识别成功否? SECOND 加 1 SECOND=60 吗? SECOND=0 显示数据处理 分按键识别成功否? MINITE 加 1 MINITE=60 吗? MINITE=0 显示数据处理 时按键识别成功否? HOUR 加 1 HOUR=24 吗? HOUR=0 显示数据处理
- 107 -
AT89S51 单片机实验及实践教程T0 中断入口
通过查表方式显示数据
数码位选加 1
位选数值=8 吗?
位选数值=0
秒计数加 1
秒计数=500 吗?
秒计数=0
SECOND 加 1
SECOND=60 吗? SECOND=0, MINITE 加 1 并 MINITE=60 吗? MINITE=0,并 HOUR 加 1 HOUR=24 吗? HOUR=0 显示数据处理 中断返回
- 108 -
6. 汇编源程序
SECOND EQU 30H
MINITE EQU 31H
HOUR EQU 32H
HOURK BIT P0.0
MINITEK BIT P0.1
SECONDK BIT P0.2
DISPBUF EQU 40H
DISPBIT EQU 48H
T2SCNTA EQU 49H
T2SCNTB EQU 4AH
TEMP EQU 4BH
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV SECOND,#00H
MOV MINITE,#00H
MOV HOUR,#12
MOV DISPBIT,#00H
MOV T2SCNTA,#00H
MOV T2SCNTB,#00H
MOV TEMP,#0FEH
LCALL DISP
MOV TMOD,#01H
MOV TH0,#(65536-2000) / 256
MOV TL0,#(65536-2000) MOD 256
SETB TR0
SETB ET0
SETB EA
WT: JB SECONDK,NK1
LCALL DELY10MS
JB SECONDK,NK1
INC SECOND
MOV A,SECOND
CJNE A,#60,NS60
MOV SECOND,#00H
NS60: LCALL DISP
JNB SECONDK,$
NK1: JB MINITEK,NK2
LCALL DELY10MS
JB MINITEK,NK2
INC MINITE
MOV A,MINITE
CJNE A,#60,NM60
MOV MINITE,#00H
NM60: LCALL DISP
JNB MINITEK,$
NK2: JB HOURK,NK3
LCALL DELY10MS
JB HOURK,NK3
INC HOUR
MOV A,HOUR
CJNE A,#24,NH24
MOV HOUR,#00H
NH24: LCALL DISP
JNB HOURK,$
NK3: LJMP WT
DELY10MS:
MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DISP:
MOV A,#DISPBUF
ADD A,#8
DEC A
MOV R1,A
MOV A,HOUR
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
MOV A,#10
MOV@R1,A
DEC R1
MOV A,MINITE
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
MOV A,#10
MOV@R1,A
DEC R1
MOV A,SECOND
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
RET
INT_T0:
MOV TH0,#(65536-2000) / 256
MOV TL0,#(65536-2000) MOD 256
MOV A,#DISPBUF
ADD A,DISPBIT
MOV R0,A
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
MOV A,DISPBIT
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P3,A
INC DISPBIT
MOV A,DISPBIT
CJNE A,#08H,KNA
MOV DISPBIT,#00H
KNA: INC T2SCNTA
MOV A,T2SCNTA
CJNE A,#100,DONE
MOV T2SCNTA,#00H
INC T2SCNTB
MOV A,T2SCNTB
CJNE A,#05H,DONE
MOV T2SCNTB,#00H
INC SECOND
MOV A,SECOND
CJNE A,#60,NEXT
MOV SECOND,#00H
INC MINITE
MOV A,MINITE
CJNE A,#60,NEXT
MOV MINITE,#00H
INC HOUR
MOV A,HOUR
CJNE A,#24,NEXT
MOV HOUR,#00H
NEXT: LCALL DISP
DONE: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH END
7. C语言源程序
#include <AT89X51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00}; unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f}; unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};
unsigned char dispbitcnt;
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned int tcnt;
unsigned char mstcnt;
unsigned char i,j;
void main(void)
{
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(P0_0==0)
{
for(i=5;i>0;i--)
for(j=248;j>0;j--); if(P0_0==0)
{
second++;
if(second==60) {
second=0; }
dispbuf[0]=second%10; dispbuf[1]=second/10; while(P0_0==0); }
}
if(P0_1==0)
{
for(i=5;i>0;i--)
for(j=248;j>0;j--); if(P0_1==0)
{
minite++;
if(minite==60) {
minite=0; }
dispbuf[3]=minite%10; dispbuf[4]=minite/10; while(P0_1==0); }
}
if(P0_2==0)
{
for(i=5;i>0;i--)
for(j=248;j>0;j--); if(P0_2==0)
{
hour++;
if(hour==24) {
hour=0; }
dispbuf[6]=hour%10;
dispbuf[7]=hour/10; while(P0_2==0); }
}
}
}
void t0(void) interrupt 1 using 0 {
mstcnt++;
if(mstcnt==8)
{
mstcnt=0;
P1=dispcode[dispbuf[dispbitcnt]]; P3=dispbitcode[dispbitcnt]; dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
}
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24) {
hour=0; }
}
}
dispbuf[0]=second%10; dispbuf[1]=second/10; dispbuf[3]=minite%10; dispbuf[4]=minite/10; dispbuf[6]=hour%10; dispbuf[7]=hour/10;
}
}
正在阅读:
数字时钟中断程序汇编程序及原理05-19
【高一作文】感谢对手04-17
三年级我的课余生活作文(优秀4篇)03-26
雨中的一把雨伞作文600字06-23
行走青春02-14
美丽的大自然图片02-10
浅谈中西方文化的差异10-31
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 汇编程序
- 时钟
- 中断
- 原理
- 数字
- 程序
- 标本采集应急预案及流程之令狐文艳创作
- 重庆市一中09-10学年高一10月月考(政治)
- 2011届高考文言文复习教案1
- 501班家长会发言稿好的
- 4.1平行四边形性质1学案
- 《比例》整理和复习
- 去妊娠纹最好的产品
- 第九册语文教学计划文档(毛)
- 创新能力案例分析18
- 网线的接法(水晶头介绍及安装图解)
- 如何培养高中生地理学科核心素养
- 基于Matlab环境的串行数据通信
- XCMGFHZ80K型干混砂浆搅拌设备技术规格书
- 动物的主要类群复习教案-参考模板
- 当代文学批评价值观问题
- 北京市师大附中2011-2012学年高二物理上学期期中考试试卷 理 新人教版
- 结构化学-第二章习题
- 东华大学matlab数学实验-第四次答案
- 机械工程学院2014届毕业生论文答辩工作执行方案3
- 2009、2010年计算机网络考研真题及答案