实验2AT89C51单片机定时.docx
《实验2AT89C51单片机定时.docx》由会员分享,可在线阅读,更多相关《实验2AT89C51单片机定时.docx(12页珍藏版)》请在冰豆网上搜索。
实验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”的文件。
结果计数器的仿真成功了。
.