单片机MCS51数字时钟Word文档格式.docx

上传人:b****6 文档编号:17070902 上传时间:2022-11-28 格式:DOCX 页数:49 大小:110.03KB
下载 相关 举报
单片机MCS51数字时钟Word文档格式.docx_第1页
第1页 / 共49页
单片机MCS51数字时钟Word文档格式.docx_第2页
第2页 / 共49页
单片机MCS51数字时钟Word文档格式.docx_第3页
第3页 / 共49页
单片机MCS51数字时钟Word文档格式.docx_第4页
第4页 / 共49页
单片机MCS51数字时钟Word文档格式.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

单片机MCS51数字时钟Word文档格式.docx

《单片机MCS51数字时钟Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机MCS51数字时钟Word文档格式.docx(49页珍藏版)》请在冰豆网上搜索。

单片机MCS51数字时钟Word文档格式.docx

MOVTMOD,#01H

MOVTL0,#0B0H

MOVTH0,#03CH;

定时T0初始化

SETBEA

SETBET0;

开启定时中断

SETBTR0;

定时开始

START1:

LCALLSCAN;

输出时间(动态显示)

LCALLKEYSCAN;

检测按键

SJMPSTART1

延时1MS子程序

DL1MS:

MOVR6,#14H

DL1:

MOVR7,#19H

DL2:

DJNZR7,DL2

DJNZR6,DL1

RET

延时20MS子程序

DL20MS:

ACALLSCAN

ACALLSCAN;

实际上包括了对数码管的3次动态显示

ACALLSCAN

数码管显示程序

SCAN:

MOVA,78H;

处理时间缓冲数据:

将60进制化为两个十进制(开始)

MOVB,#0AH

DIVAB;

处理秒

MOV71H,A

MOV70H,B

MOVA,79H

DIVAB;

处理分钟

MOV74H,A

MOV73H,B

MOVA,7AH

处理时钟

MOV77H,A

MOV76H,B

MOVR1,#70H;

R1是时间缓冲区首地址

MOVR5,#80H;

R5是位选码,实现数码动态显示

MOVR3,#08H

SCAN1:

MOVA,R5

MOVP2,A;

位选码,R5实现数码动态显示

MOVA,@R1;

从时间缓冲区提取一位数

MOVDPTR,#TAB;

码表首地址TAB

MOVCA,@A+DPTR;

将该位数译码输出

MOVP0,A;

;

将该位数译码输出并显示

LCALLDL1MS;

每位输出后延迟1ms,然后进行下一位的输出显示

INCR1;

R1指向下一位时间缓冲区地址

RrA

MOVR5,A;

R5会选择下一位数码管

DJNZR3,SCAN1

MOVP2,#0fH;

MOVP0,#0c0H;

这两句是扫描程序SCAN没有执行时数字时钟的状态,当按键按下不放时,前4位会显示0,

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH

;

"

0~9"

"

-"

的共阳极字段码秒速五厘米

定时器/计数器T0中断服务程序

INTT0:

PUSHACC

PUSHPSW;

storethescene

CLRET0;

停止定时时中断

CLRTR0;

停止定时

MOVTH0,#03CH

SETBTR0;

restartTO

INC7BH;

MOVA,7BH

CJNEA,#14H,OUTT0;

counttheTF0for20times

MOV7BH,#00

INC78H;

increase1secondwhen(7BH)hascounted"

TF0=1"

for20times,thatis1Sintotal!

MOVA,78H

CJNEA,#3CH,OUTT0

MOV78H,#00

INC79H;

increase1minutewhensecondisoverflow

MOV79H,#00

INC7AH;

increase1hourwhenminuteisoverflow

CJNEA,#18H,OUTT0

MOV7AH,#00;

thenextday

OUTT0:

SETBET0;

中断服务结束,恢复定时中断0

poppsw

popacc;

recoverythescene

RETI

按键处理程序

KEYSCAN:

CLREA;

屏蔽中断

JNBP1.0,KEYSCAN0

JNBP1.1,KEYSCAN1

JNBP1.2,KEYSCAN2

KEYOUT:

SETBEA;

恢复中断

按键处理程序细节

KEYSCAN0:

LCALLDL20MS

JBP1.0,KEYOUT;

持续按下20ms以上按键才有效,这20ms间实际上是对数码管作3次动态显示

WAIT0:

JNBP1.0,WAIT0

INC7CH;

7C代表状态,其初值为0(调整小时),第一次按下变为1(暂停并调整小时),二次按下变为2(暂停并调整分钟),三次按下变回0(从暂停中恢复)

MOVA,7CH

CLRTR0;

停止计时

CLRET0;

停止计时中断

CJNEA,#03H,KEYOUT;

当7C不为03时,停止计时

MOV7CH,#00;

SETBTR0;

恢复计时

SETBET0;

恢复计时中断

SJMPKEYOUT

KEYSCAN1:

LCALLDL20MS;

持续按下20ms以上按键才有效

JBP1.1,KEYOUT

WAIT1:

JNBP1.1,WAIT1

MOVA,7CH;

20ms后放下按键后

CJNEA,#02H,KSCAN11;

increaseminutewhen"

(7C)=2)"

orhourotherwise

INC79H;

increaseminute

CJNEA,#3CH,KEYOUT

KSCAN11:

INC7AH;

increasehour

CJNEA,#18H,KEYOUT

MOV7AH,#00

KEYSCAN2:

JBP1.2,KEYOUT

WAIT2:

JNBP1.2,WAIT2;

按下20ms以上按键才有效

CJNEA,#02H,KSCAN21;

DEC79H;

decreaseminute

CJNEA,#0FFH,KEYOUT

MOV79H,#3BH

SJMPKEYOUT;

KSCAN21:

DEC7AH;

decreasehour

MOV7AH,#17H

END

本设计主要组件为:

时钟振荡源、复位电路、数码管接口、按键电路

1、复位电路

说明:

当RST保持10ms以上的高电平时,单片机复位,但是内部RAM不会复位。

2、时钟振荡源

本设计使用内部时钟振荡电路,外接石英晶体和微调电容。

3、数码管接口

P0接数码管的段选口,P2接位选口。

数码管属共阴极,段选信号低电平有效。

4、按键电路

由于使用内部程序ROM,所以EA接高电平;

P1.0~P1.2接按键,低电平有效。

5、电子时钟效果图

MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。

我们也以这一代表性的机型进行系统的讲解。

MCS-51系列单片机主要包括8031、8051和8751等通用产品,其主要功能如下:

·

8位CPU

·

4kbytes程序存储器(ROM)

128bytes的数据存储器(RAM)

32条I/O口线

111条指令,大部分为单字节指令

21个专用寄存器

2个可编程定时/计数器

5个中断源,2个优先级

一个全双工串行通信口

外部数据存储器寻址空间为64kB

外部程序存储器寻址空间为64kB

逻辑操作位寻址功能

双列直插40PinDIP封装

单一+5V电源供电

MCS-51以其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“名机”,为以后的其它单片机的发展奠定了基础。

正因为其优越的性能和完善的结构,导致后来的许多厂商多沿用或参考了其体系结构,有许多世界大的电气商丰富和发展了MCS-51单片机,象PHILIPS、Dallas、ATMEL等著名的半导体公司都推出了兼容MCS-51的单片机产品,就连我国的台湾WINBOND公司也发展了兼容C51(人们习惯将MCS-51简称C51,如果没有特别声明,二者同指MCS-51系列单片机)的单片机品种。

下表是80C51系列单片机的主要分类及功能特性:

系列 

典型芯片I/O口定时/计数器中断源串行通信口片内RAM 

片内ROM 

说明80C31 

4x8位 

2x16位 

128字节 

无 

80C51 

4kB掩膜ROM 

87C51 

4kBEPROM 

89C51 

4kBEEPROM 

80C32 

256字节 

8kB掩膜ROM 

87C52 

89C52 

8051是MCS-51系列单片机中的代表产品,它内部集成了功能强大的中央处理器,包含了硬件乘除法器、21个专用控制寄存器、4kB的程序存储器、128字节的数据存储器、4组8位的并行口、两个16位的可编程定时/计数器、一个全双工的串行口以及布尔处理器。

MCS-51具有比较大的寻址空间,地址线宽达16条,即外部数据存储器和程序存储器的寻址范围达216=64kB,这作为单片机控制来说已是比较大的,这同时具备对I/O口的访问能力。

此外,MCS-51采用模块化结构,可方便地增删一个模块就可引脚和指令兼容的新产品。

从而容易使产品形成系列化。

由于MCS-51集成了几乎完善的8位中央处理单元,处理功能强,中央处理单元中集成了方便灵活的专用寄存器,硬件的加、减、乘、除法器和布尔处理机及各种逻辑运算和转移指令,这给应用提供了极大的便利。

MCS-51的指令系统近乎完善,指令系统中包含了全面的数据传送指令、完善的算术和逻辑运算指令、方便的逻辑操作和控制指令、对于编程来说,是相当灵活和方便的。

MCS-51单片机的工作频率为2-12MHz,当振荡频率为12MHz时,一个机器周期为1us,这个速度应该说是比较快的。

8051中集成了完善的各种中断源,用户可十分方便地控制和使用其功能,使得它的应用范围加大,可以说它可以满足绝大部分的应用场合。

MCS-51把微型计算机的主要部件都集成在一块心片上,使得数据传送距离大大缩短,可靠性更高,运行速度更块。

由于属于芯片化的微型计算机,各功能部件在芯片中的布局和结构达最优化,抗干扰能力加强,工作亦相对稳定。

因此,在工业测控系统中,使用单片机是最理想的选择。

单片机属于典型的嵌入式系统,所以它是低端控制系统最佳器件。

MCS-51的开发环境要求较低,软件资源十分丰富,介绍其功能特性书籍和开发软件随处可取,只需配备一台PC(个人电脑——对电脑的配置基本上无要求),一台仿真编程器即可实现产品开发,早期的开发软件多使用DOS版本,随着Windows视窗软件的普及,现在几乎都使用Windows版本,并且软件种类繁多,琳琅满目,在众多的单片机品种中,C51的环境资源是最丰富的,这给C51用户带来极大的便利。

(一)定时/计数器

1工作方式0

定时/计数器T0工作在方式0时,16位计数器只用了13位,即TH0的高8位和TL0的低5位,组成一个13位定时器/计数器。

1)、工作在定时方式

2)、工作在计数方式

2工作方式1

定时器T0工作方式1与工作方式0类同,差别在于其中的计数器的位数。

工作方式0以13位计数器参与计数,工作方式1则以16位计数器参与计数。

工作方式1是16位计数器。

这是工作方式1与工作方式0在计数方式时唯一差别。

3工作方式2

定时器T0在工作方式2时,16位的计数器分成了两个独立的8位计数器TH0和TL0。

工作方式2与工作方式0、方式1的差别,在于工作方式2是一个8位的计数器。

4工作方式3

工作方式3仅对定时器T0有效。

当定时器T0工作在方式3时,将16位的计数器分为两个独立的8位计数器TH0和TL0。

当定时器T0工作在方式3时,定时器T1只能工作在方式0~2,并且工作在不需要中断的场合。

(二)中断系统

什么是中断,我们从一个生活中的例子引入。

你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。

这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。

仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。

第一、什么可以引起中断,生活中很多事件可以引起中断:

有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把可以引起中断的称之为中断源,单片机中也有一些可以引起中断的事件,8031中一共有5个:

两个外部中断,两个计数/定时器中断,一个串行口中断。

第二、中断的嵌套与优先级处理:

设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?

如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。

如果不是这两者(即不等电话,也不是等人上门),你可能会按你通常的习惯去处理。

总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。

优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。

考虑一下我们会怎么办吧。

第三、中断的响应过程:

当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):

电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。

计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。

具体地说,中断响应可以分为以下几个步骤:

1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。

2、寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。

以上工作是由计算机自动完成的,与编程者无关。

在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。

3、执行中断处理程序。

4、中断返回:

执行完中断指令后,就从中断处返回到主程序,继续执行。

键盘是一组按键组合的开关的集合,平时按键开关处于断开状态,当按下时它才闭合。

当键位没按下时输出为高电平,键位按下时输出低电平。

通常一个单片机系统用到的键盘都包含很多键位,这些键位都通过IO接口进行连接,按下一个键位后通过键盘接口电路就得到该键位的编码。

通常有两种方法进行编码。

一是用连接键盘的IO线的二进制组合进行编码。

二是顺序排列编码。

此处是用的共阳极的LED数码管,共阳就是7段的显示字码共用一个电源的正。

原理示意图:

 

从上图可以看出,要是数码管显示数字,有两个条件:

1、是要在VT端(3/8脚)加正电源;

2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。

这样才能显示的。

一般刚接触数码显示的网友搞不清字段和编码的关系,其实要看硬件的电路的组成的,本站的实验板上的数码显示是用P0口驱动的,原理图可以参阅实验板的网页,其计算的方法如下,供网友参考:

例:

如要显示“0”,则要 

a,b,c,d,e,f六个字段亮就显示“0”了,而g和dp字段不亮;

这样只要向P0口送出相应的代码即可,编码方法如下表:

程序使用时,只需将显示数字所对应的编码送P0口,然后打开相应的数码管显示位的电源控制即可显示相应的字符

一、这个时钟实际上并不精确,主要有几下几点原因:

1、定时T0中断服务程序暂停了定时计数器,这造成了一定的延迟,延迟时间是定时T0中断服务程序运行的时间。

2、即使定时T0中断服务程序不暂停定时计数器,定时计数器重置命令也会造成延迟(为几个机器周期)

MOVTL0,#0B0H

MOVTH0,#03CH

解决方案:

设定T0的初值时,减去以上延迟就可以了

二、功能改进

本设计是按下一次按键达20ms就使时针或者分针加1/减1。

可以通过修改代码实现当按键1s以上时,使指针在1s以上时指针快速增加/减小。

JNBP1.1,WAIT1;

去掉这句铵键等待,并增加以下代码

每次按键,时针自增一次

CJNEA,#18H,delay_key

delay_key:

mov7dh,#50

delay_key_:

lcallDL20MS;

延迟50*20ms=1s

dec7dh

mova,#0

cjnea,7dh,delay_key_

JBP1.1,KEYOUT;

1S后判断按键是否还按下,否则快速增加时针

WAIT12:

INC7AH;

1s后时针快速增加

CJNEA,#18H,Kk2

kk2:

LCALLDL20MS;

即时显示调整的结果,时针每60ms增加一次

LCALLDL20MS

JNBP1.1,WAIT12

编者注:

本文件为电子工程专辑网站编辑部原创,电子工程专辑享有本文章完全著作权,如需转载该文章,必须经过电子工程专辑网站编辑部同意。

联系电子工程专辑网站编辑部,请发信至eetcol@

单片机应用编程技巧100问

1.C语言和汇编语言在开发单片机时各有哪些优缺点?

答:

汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。

其主要优点是占用资源少、程序执行效率高。

但是不同的CPU,其汇编语言可能有所差异,所以不易移植。

C语言是一种结构化的高级语言。

其优点是可读性好,移植容易,是普遍使用的一种计算机语言。

缺点是占用资源较多,执行效率没有汇编高。

对于目前普遍使用的RISC架构的8bitMCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。

而且一些单片机厂家也不一定能提供C编译器。

而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。

所以在单片机开发中,我们还是建议采用汇编语言比较好。

如果对单片机C语言有兴趣,HOLTEK的单片机就有提供C编译器,可以到HOLTEK的网站()免费下载使用。

2.C或汇编语言可以用于单片机,C++能吗?

在单片机开发中,主要是汇编和

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

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1