实验四动态数码管显示外部中断计数
一、实验目的
1.熟悉keil仿真软件、proteus仿真软件的使用和单片机外部中断的使用。
2.了解并熟悉51单片机中中断的概念,中断处理系统的工作原理。
3.理解51单片机中断管理系统处理五种中断源,特别是对外部中断的设置与控制方法。
4.熟悉中断处理特别是外部中断处理的过程,掌握中断处理子程序的书写格式和使用方法。
二、实验器材
C51单片机开发板(含动态数码管) 1块
8PIN排线2根
数据线1根
三、实验原理
1.实验仿真原理图如下所示:
2.实验的源程序:
#include<reg51.h>
unsigned char i;
unsigned char code
tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
yanshi(void) interrupt 2 //中断处理函数 2表示对应的中断源为外部中断1
//按键按下时发出中断请求,引起外部中断
{i++;
if(i==9)
i=0;
}
void main()
{IT1=1; //IT1=1,选择下降沿触发
i=0;
EA=1; // EA=1,CPU开中断
EX1=1; //EX1=1,允许INT1中断
while(1)
P0=tab[i]; //从0显示到8
}
3.中断控制的有关寄存器
(1)中断的允许和禁止——中断控制寄存器IE
EA:中断总控开关,是CPU是否响应中断的前提。
EA=1,CPU开中断; EA=0, CPU关中断。
ES:串行口中断允许位,ES=1,允许串行口发送/接收中断;ES=0
,禁止串行口中断。
ET1:定时器T1中断允许位,ET1=1,允许T1计数溢出中断;ET1=0,禁止T1中断。
ET0:定时器T0中断允许位,ET0=1,允许T1计数溢出中断; ET0=0,禁止T0中断。
EX1:外部中断INT1允许位,EX1=1,允许INT1中断; EX1= 0,禁止INT1中断。
EX0:外部中断INT0允许位, EX0=1,允许INT0中断; EX0= 0,禁止INT0中断。
(2)中断请求标志及外部中断方式选择寄存器TCON
说明:
1. IT0和IT1为外中断INT0 和INT1中断触发方式选择,若选下降沿触发则相应位置1;若选低电平触发,IT相应位置0。
2.某中断源有中断请求,该中断标志置1,无中断请求,该中断标志置0
3.TR0 和 TR1 为定时器T0和T1 工作启动和停止控制。
4. 数码管:
按发光二极管数码管是一种半导体发光器件,其基本单元是发光二极管。
数码管的分类:
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单
元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;
按发光二极管单元连接方式分为共阴极数码管和共阳极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
共阴极数码管和共阳极数码管如下图所示:
GND
a
b
c
d
e
f
g
dp
g
f
e
d
c
b
a
(a)(b)
5. INT1中断计数
用AT89C51及电阻、电容、晶振、1位动态数码管、排阻、按钮等实现中断计数。
INT1中断计数,每次按下计数键时触发INT1中断,中断程序累加计数,计数值显示在动态数码管上。
用单片机的P0.0-P0.7端口接动态数码管的端口,P3.3作为外部中断输入端口。
每次按下计数键时触发INT1中断,中断程序累加计数,计数值显示在动态数码管上。
四、实验操作步骤
1.接线方法
如下图所示将P0与J12 、P3与JP5分别用8PIN排线连接,用数据线将单片机开发板与笔记本连接好。
P0:输入输出端口(即I/O )
P3:输入输出端口(即I/O )
J12:用来控制共阳极动态数码管
JP5:用来控制8位独立按键
P3.3做为外部中断输入,每按一下P3.3所连接的独立按键K4,动态数码管就累计加1一次。
2. 工程建立
①先建立一个该工程的文件夹,保存到要存放的路径,如放在D:\keil。
②打开Keil软件,先新建一个工程文件,点击“Project->New Project…”菜单。
会弹出工程创建对话框。
选择工程文件要存放的路径选择将工程安装在我们创建的D:\keil工程文件夹下面,并给该工程命名输入工程文件名,如zhongduan最后单击保存。
③在弹出的对话框中选择CPU厂商及型号,选择好Atmel 公司的AT89C51后, 单击确定。
在接着出现的对话框中选择“OK”。
④新建一个C51 文件, 单击左上角的New File,保存新建的文件,单击SA VE。
⑤在出现的对话框中输入保存文件名(注意后缀名必须为.C如zhongduan.c),再单击“保
存”。
⑥保存好后把此文件加入到工程中方法如下:用鼠标在Source Group1上单击右键, 然后再单击左键选择Add Fi les to Group ‘Source Group 1'。
选择要加入的文件, 找到你所保存的.C 文件后(后缀名为.C的文件),单击Add, 然后单击Close 。
⑦在编辑框里输入代码,然后编译链接,程序编译成功如下图所示:
至此已经生成了单片机芯片可利用的zhongduan.hex文件,如下图所示:
3、Proteus仿真
(1)在元件模式时,从元件库里找出本次实验需要用到的元器件,其元件名称和英文简写对应如下:
① 51芯片 AT89C51
②数码管 7SEG-COM-CATHODE
③按钮 BUTTON
④晶振 CRYSTAL
⑤电阻 RES
⑥排阻 RESPACK-8
(2)在终端模式时,从元件库里找出本次实验需要用到的元器件,其元件名称和英文简写对应如下:
①地 GROUND
②电源 POWER
(3)在Proteus仿真图中双击89C51芯片,在出现的对话框中的program File一栏中选择生成的.hex文件并确定,再运行之,观察现象如下图所示:
每次按下图中红框按钮时触发INT1中断,中断程序累加计数,计数值显示在数码管上:
4. 烧录程序
先打开烧录软件,再打开单片机电源,点击烧录软件窗口中的打开文件,选中已在Keil软件下生成的hex文件,然后点击下载程序,若软件上显示“数据下载成功,程序下载完毕”字样,则表示烧录成功。
5.观察结果:程序下载成功后,点击数次P3.3所连接的独立按键K4,并观察单片机开
发板上静态数码管的变化。
若数码管每次加1,则表示实验成功。
否则,实验失败,检查实
验过程并分析失败的原因。
实验成功后,记录实验结果并分析产生的原因。
五、实验小结
⑴通过实验熟悉keil仿真软件、proteus仿真软件的使用和单片机外部中断的使用。
了解并熟悉51单片机中中断的概念,中断处理系统的工作原理。
理解51单片机中断管理系统处理五种中断源,特别是对外部中断的设置与控制方法。
熟悉中断处理特别是外部中断处理的过程和中断处理子程序的书写格式和使用方法。
⑵中断处理过程分为四个阶段:中断请求,中断响应,中断处理、中断返回。
⑶使用MCS-51的中断,要为使用到的中断源编写中断服务程序。
C51为中断服务程序的编写提供了方便的方法。
C51的中断服务程序是一种特殊的函数,它的说明形式为:void 函数名(void) interrupt n using m
{ 函数体语句 }
这里,interrupt和using是为编写C51中断服务程序而引入的关键字,interrupt表示该函数是一个中断服务函数,interrupt后的整数n表示该中断服务函数是对应哪一个中断源。
⑷每次按下计数键K4时能够触发INT1中断,P3.3口(即INT1口)由高电平变为低电平,此时在单片机的内部会产生一个中断计数,并使P0口的电平发生变化,通过排线将P0口的电平信息传到数码管(数码管根据A BCDEFG各段的高低电平决定各发光二极管的亮与不亮)
⑸因为实验使用的是共阴数码管(所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上),当按下计数键(K4)时触发INT1中断,中断程序累加计数显示不同的LED 的字模,根据数码管A BCDEFG各段的高低电平决定各发光二极管的亮与不亮(某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮),显示出不同的数值。