单片机实验六-中断系统实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息工程系实验报告
课程名称:单片微型计算机与接口技术
实验项目名称:实验六 中断系统实验 实验时间:2013-12-02 班级:电信*** 姓名:*** 学号:110706
实 验 目 的:
熟悉keil 仿真软件、proteus 仿真软件的使用和单片机外部中断的使用。了解并熟悉51单片机中中断的概念,中断处理系统的工作原理。理解51单片机中断管理系统处理五种中断源,特别是对外部中断的设置与控制方法。熟悉中断处理特别是外部中断处理的过程,掌握中断处理子程序的书写格式和使用方法。
实 验 原 理:
现代的计算机都具有实时处理功能,能对外部发生的事件如人工干预、外部事件及意外故障做出及时的响应或处理,这是依靠计算机的中断系统来实现的。
51单片机内部有一个中断管理系统,它能对内部的定时器事件、串行通信的发送和接收事件及外部事件(如键盘按键动作)等进行自动的检测判断,当有某个事件产生时,中断管理系统会置位相应标志通知CPU ,请求CPU 迅速去处理。CPU 检测到某个标志时,会停止当前正在处理的程序流程,转去处理所发生的事件(针对发生的事件,调用某一特定的函数,称为该事件的中断服务函数),处理完以后,再回到原来被中断的地方,继续执行原来的程序。
外部中断 内部 定时
外部中断 内部 定时内部
T
源允
总允
允许中断寄存中断优先级
中断源
中断源
高优中断
中断
低优中断
中断T —发送
I
I
查询
成 绩:
指导教师(签名):
MCS-51单片机最典型的有5个中断源(外部中断0、1,内部定时器中断0、1,串口中断),具有两个中断优先级。两个外部中断:(— INT0、— INT1)上输入的外部中断源,低电平或负跳变有效,置位TCON中的IE0和IE1中断请求标志位。通过外部中断源触发方式控制位IT可以使外部中断为电平触发方式(=0)或边沿触发方式(=1)。另外控制中断允许寄存器IE可以开放中断。
使用MCS-51的中断,要为使用到的中断源编写中断服务程序。C51为中断服务程序的编写提供了方便的方法。C51的中断服务程序是一种特殊的函数,它的说明形式为:
void 函数名(void) interrupt n using m
{ 函数体语句 }
这里,interrupt和using是为编写C51中断服务程序而引入的关键字,interrupt表示该函数是一个中断服务函数,interrupt后的整数n表示该中断服务函数是对应哪一个中断源。
实验环境:
硬件:微机、单片机仿真器、单片机实验板、连线若干
软件:KEIL C51单片机仿真调试软件,proteus系列仿真调试软件
实验内容及过程:
一、利用外部中断INT1控制数码管显示0到9。
二、利用外部中断INT1控制两个数码管显示00到99。
1、打开Proteus,绘制电路图,如图6-1,6-2所示:
图6-1实验1整体电路图
图6-2实验2整体电路图
2、开启keil并在project中选择New Project,新建项目,然后在File中选择New…。
3、保存为,选择,选择,点击确定,弹出一个对话框选择“否”。
4、在新建的空页中编写程序,并保存为,。然后编译,加载,运行调试。
5、双击Target1出现Source Group 1点击鼠标右键选择Add files to group ‘Source Group 1’,选中lesson1-1,lesson1-2点击Add击Close
6、点击如图1-3作
图6-3
点击运行,如果显示无错误就编译成功
7、双击AT89C51点击选择hex文件点击OK点击左下角的运行。
实验结果及分析:
一、单个数码管显示中断实验代码如下:
#include<>
#define uchar unsigned char
#define uint unsigned int
unsigned char code tabdu[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};
int i=0;
void led() interrupt 2
{
i++;
if(i==10)
i=0;
P2=tabdu[i];
}
void main()
{
EA=1;
EX1=1;
IT1=1;
P2=tabdu[i];
while(1);
}
实验结果如下图6-4所示:
图6-4
二、两个数码管显示中断实验代码如下:
#include<>
#define uchar unsigned char
#define uint unsigned int
unsigned char code
tabdu[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D
,0x07,0x7F,0x6F};
void delay(uint x)
{
uint y;
for(x;x>0;x--)
for(y=130;y>0;y--);
}
int i=0;
int n,m;
void led() interrupt 2
{
EA=0;
i++;if(i==100) i=0;
EA=1;
}
main()
{
EA=1;
EX1=1;
IT1=1;
n=i/10;
m=i%10;
P2= 0xbf;
P0= tabdu[n];
delay(2);
P2=0x7f;
P0=tabdu[m];
delay(2);
while(1)
{
n=i/10;
m=i%10;
P2= 0xbf;
P0= tabdu[n];
delay(2);
P2=0x7f;
P0=tabdu[m];
delay(2);
}
}
实验结果如下图6-5所示: