单片机实验六-中断系统实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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所示:

相关文档
最新文档