实验2AT89C51单片机定时.docx

上传人:b****5 文档编号:30050061 上传时间:2023-08-04 格式:DOCX 页数:12 大小:1.25MB
下载 相关 举报
实验2AT89C51单片机定时.docx_第1页
第1页 / 共12页
实验2AT89C51单片机定时.docx_第2页
第2页 / 共12页
实验2AT89C51单片机定时.docx_第3页
第3页 / 共12页
实验2AT89C51单片机定时.docx_第4页
第4页 / 共12页
实验2AT89C51单片机定时.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验2AT89C51单片机定时.docx

《实验2AT89C51单片机定时.docx》由会员分享,可在线阅读,更多相关《实验2AT89C51单片机定时.docx(12页珍藏版)》请在冰豆网上搜索。

实验2AT89C51单片机定时.docx

实验2AT89C51单片机定时

实验2INT0中断与AT89C51单片机定时/计数器应用技术仿真实验

一、实验目的

1.学习外部中断技术的基本使用方法。

2.学习中断处理程序的编程方法。

3.初步了解C51芯片来驱动动态数码管计数原理。

二、实验器材

计算机,windows7旗舰版,keiluVision4,,所需元件清单有:

AT89C51,普通电容,电解电容,晶体振荡器,电阻,数码管排阻及按键。

三、实验原理

MCS-51是一个多中断源的单片机,以8051为例,有三类共五个中断源,分别是外部中断两个,定时器中断两个和串行中断一个(其中断控制字在后面实验中详细讲到)。

外部中断是由外部原因引起的,共有两个中断源,既外部中断0和外部中断1。

它们的中断请求信号分别由引脚()和()引入;外部中断请求信号有两种,既低电平有效方式和脉冲后沿负跳有效方式。

中断开放和屏蔽-IE寄存器

其作用是用来对各中断源进行开放或屏蔽的控制,各位定义如下:

位地址

AF

AE

AD

AC

AB

AA

A9

A8

位符号

EA

/

/

ES

ET1

EX1

ET0

EX0

?

EA—中断允许总控制位

EA=0中断总禁止,禁止所有中断。

EA=1中断总允许。

EX0(EX1)--外部中断允许控制位

EX0(EX1)=0禁止外中断。

EX0(EX1)=1允许外中断。

ET0(ET1)--定时/计数中断允许控制位

ET0(ET1)=0禁止定时/计数中断。

ET0(ET1)=1允许定时/计数中断。

ES–串行中断允许控制位

ES=0禁止串行中断。

ES=1允许串行中断。

中断优先级控制寄存器(IP)

|

地址为B8H,位地址为BFH-B8H,各位定义如下:

位地址

BF

BE

BD

BC

BB

BA

B9

B8

位符号

/

/

/

PS

PT1

PX1

PT0

PX0

PX0—外部中断0优先级设定位

"

PT0—定时中断0优先级设定位

PX1--外部中断1优先级设定位

PT1—定时中断1优先级设定位

PS—串行中断优先级设定位

为0的位优先级为低;为1的位优先级为高;

中断优先级是为中断嵌套服务的,MCS-51中断优先级的控制原则是:

(1)低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。

(2)如果一个中断请求已被响应,则同级的其它中断响应将被禁止。

(3)如果同级的多个中断请求同时出现,则按CPU查询次序确定哪个中断请求被响应。

其查询次序为:

外部中断0—定时中断0—外部中断1—定时中断1—串行中断。

1.数码管

:

数码管是一种半导体发光器件,其基本单元是发光二极管。

(1)数码管的分类

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;

  按发光二极管单元连接方式分为共阴极数码管和共阳极数码管(图1)。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

(2)led数码管的结构

led数码管(LEDSegmentDisplays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。

led数码管常用段数一般为7段有的另加一个小数点,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。

颜色有红,绿,蓝,黄等几种。

led数码管广泛用于仪表,时钟,车站,家电等场合。

下面将介绍常用LED数码管内部引脚图(图2)

LED数码管引脚定义:

每一笔划都是对应一个字母表示DP是小数点.(图3)

图1共阴极数码管和共阳极数码管

 图2引脚定义

图37段两位带小数点10引脚的LED数码管

(3)10引脚的LED数码管

①驱动方式

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码。

  数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

~

2.INT0中断计数

用AT89C51及电阻、电容、晶闸管、数码管、排阻等实现中断计数。

INTO中断计数,每次按下计数键时触发INTO中断,中断程序累加计数,计数值显示在静态数码管上,按下清零键时数码管清零。

用单片机的A8-AD14端口接其中一组数码管的七个端口,接数码管的的端口,AD6接数码管的的端口。

每次按下计数键时触发INTO中断,中断程序累加计数,计数值显示在静态数码管上,按下清零键时数码管清零。

实验原理图

四、实验过程

1、定时/计数器的仿真

(1)工程建立

①先建立一个该工程的文件夹,保存到要存放的路径,如放在E:

\keil工程。

②打开Keil软件,先新建一个工程文件,点击“Project->New Project…”菜单。

会弹出工程创建对话框。

选择工程文件要存放的路径选择将工程安装在我们创建的E:

\keil工程文件夹下面,并给该工程命名输入工程文件名,如INT0最后单击保存。

③在弹出的对话框中选择CPU厂商及型号,选择好Atmel公司的AT89C51后,单击确定。

在接着出现的对话框中选择“OK”。

④新建一个C51文件,单击左上角的NewFile,保存新建的文件,单击SAVE。

⑤在出现的对话框中输入保存文件名(注意后缀名必须为.C如),再单击“保存”。

⑥保存好后把此文件加入到工程中方法如下:

用鼠标在SourceGroup1上单击右键,然后再单击左键选择AddFilestoGroup‘SourceGroup1'。

选择要加入的文件,找到你所保存的.C文件后(后缀名为.C的文件),单击Add,然后单击Close。

⑦在编辑框里输入代码即可。

至此我们已将程序代码生成Proteus仿真图和单片机芯片可利用的.hex文件(后缀名为.hex的文件)。

.

(2)Proteus仿真

①按照原理图在Proteus中画图,首先找出元器件。

 

②将各元器件接入后,要对其相关参数进行调整。

③画完图后,在Proteus仿真图中双击89C51芯片,在出现的对话框中的programFile一栏中选择生成的文件并确定,再运行之,观察现象。

若与预期的实验现象相符,则表示实验可以成功

打开开关后,运行结果如下:

点击红色圈圈中的按钮(即按下计数建)时触发INTO中断,中断程序累加计数,计数值显示在数码管上,如下图:

 

2、INT0中断计数实验

在keil中创建中断PROJECT时,其步骤与计时定时器一样。

只是把工程命名为“中断”。

编译的是C语言程序,所以在保存文件时,后缀为.c。

在Proteus中画图时,保存为“中断.dsn”。

在画完图后,同样双击AT89C51,选择“中断.hex”。

Play以后,点击第三个按钮,每按下一次,计数器增加1.如下图:

 

五、实验总结

1.在编译汇编语言程序时,在build时出现了错误,有好多都是undefined,这是因为在编写源程序时,程序中的逗号是中文的,所以把这些改过来后就没有错误了。

但是程序还是有三个警告,但这些警告可以忽视,因为它们没有妨碍Proteus的仿真调试。

2.在画图过程中,其中出现了duplicate和simulationfailedduetonetlistcompiler的错误,这是因为我们在放置pullup电阻时重复命名为R2了,我们经过排查,由于电阻的名称hide了,所以我们删除修改了它。

然后我们在重新play了,结果是正确显示计时器的变化。

3在仿真中断的实验时,计数器有时候不亮。

我们选择在keil程序中重新编译build了源程序,生成“.hex”文件,然后在Proteus中选择一下“.hex”的文件。

结果计数器的仿真成功了。

 

.

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

当前位置:首页 > 农林牧渔 > 农学

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

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