一、实验目的与任务
实验目的:
1.掌握外部中断的工作原理;
2.学会中断程序设计。
任务:
1.运行Keil开发环境,完成外部中断响应软件编程;
2.外部中断接口分别接按键K1、K2设置为下降沿触发方式,自然优先级,观察中断响应效果。
二、实验内容
1.仿真电路设计;
2. 编写C51程序实现如下功能:开机后D1灭灯,LED1黑屏,随后单击K1→D1状态反转,单击K2 →LED1从0开始循环显示0~F字符。
三、实验内容
(1)软件实现:
实验步骤:
1.运行Keil uVision5 开发环境,按照“模块化单片机教学实验平台配套的实验指导书1.2.3 节”介绍的方法建立程esimlab5. uvproj,CPU 为AT89S51,包含启动文件STARTUP.A51。
2.输入源程序,在Keil uVision5 开发环境中,建立源程序esimlab5.c,将上述程序加入该程序文件。并将该文件加入工程esimlab5.uvproj。
3.设置工程esimlab5. uvproj 属性,将其晶振频率设置为12MHz,选择输出可执行文件(HEX 文件),仿真方式为“Use Simulator”。
4.构造(Build)工程esimlab5.uvproj。如果输入有误进行修改,直至构造正确,生成可执行程序 esimlab5.hex 为止。
(2)Proteus仿真:
实验步骤:
1.运行Proteus 开发环境,建立工程,新建原理图设计文件esimlab5. Pdsprj,参考图一。
图一 原理图实例
2.设置单片机属性,将其晶振频率设置为12MHz,载入KEIL生成的文件esimlab5.hex。
3.运行仿真并观察结果。
四、实验报告
esimlab5.c
#include <REGX51.H>
sbit D1=P0^0;
unsigned char Number[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char i;
void Delay(unsigned int t) //延时函数
{
unsigned char i, j;
while(t){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
t--;
}
}
void main(){
//中断初始化
EX0 = 1;//允许外部中断0中断
EX1 = 1;//允许外部中断0中断
IT0 = 1;//外部中断0为跳沿触发
IT1 = 1;//外部中断1为跳沿触发
IE0 = 0;//外部中断0的请求标志位
IE1 = 0;//外部中断1的请求标志位
EA = 1;//中断总允许
PX0 = 0;//外部中断0为低优先级
PX1 = 0;//外部中断1为高优先级
while(1){
P2 = 0x00;//数码管初始化
}
}
void Int0_Routine(void) interrupt 0 using 1//外部中断0中断服务函数
{
D1 = ~D1;//LED灯状态取反
}
void Int1_Routine(void) interrupt 2 using 2//外部中断1中断服务函数
{
unsigned char count = 3;
while(count != 0)//中断开始执行,数码管循环显示0~F 3次
{
for(i = 0;i<16;i++)
{
P2 = Number[i];
Delay(100);
}
count--;
}
}
仿真结果
文章来源:https://www.toymoban.com/news/detail-738700.html
单片机的中断是由单片机片内的中断系统来实现的。当中断请求源(简称中断源)发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断服务程序处理中断服务请求,处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。文章来源地址https://www.toymoban.com/news/detail-738700.html
到了这里,关于实验(五):外部中断实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!