基于Proteus仿真51单片机外部中断实验

一、实验目的 
1.进一步熟悉利用 PROTEUS、Keil uVision5 等软件的使用方法。 
2.理解单片机的中断、中断优先级原理及中断过程,掌握中断服务子程序的编写方法。
 
3.熟悉数码管的显示原理。 
二、实验任务 1.基本任务 
已知单片机的 P0 口接了一位七段数码管,当无外部中断(外部中断 0)时,数码
管按 a~g 段依次点亮,不断循环显示;当有外部中断(按钮被按下,P3.2 有下降沿电
压)时,数码管显示状态改为“8”亮灭闪烁显示,亮灭闪烁显示 8 次后,返回主程序
继续按段顺序点亮。请在 Proteus 中画出电路原理图,并编写程序仿真实现上述功能。 
2.拓展任务(若未做,则实验报告也无需体现,以保证实验视频和实验 报告的一致性!)
 
在以上基本任务的基础上,加入一个声光报警器和外部中断 1,当有外部中断 1 时,
系统会产生声光报警。假设外部中断 1 的优先级高于外部中断 0。请在 Proteus 中画出
电路原理图,并编写程序仿真实现上述功能。 


 

#include "stc15.h"  //单片机头文件
#include "intrins.h"  //延时函数左右移函数头文件
unsigned char i;  //定义字符i
void Delay1000ms()		//@11.0592MHz 1000ms延时函数
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 43;
	j = 6;
	k = 203;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
void main()
{ 
	P0=0x00; //单片机自启动时为高电平,需先对P0端置0
	IE0=0;  //防止启动时自动进行一次中断
	IE1=0;  //防止启动时自动进行一次中断
	P0M0=0x00;  //准双向口配置
	P0M1=0x00;  //准双向口配置
	EA=1;  //全局中断使能位使能
	EX0=1;  //外部中断位0中断位使能
	EX1=1;  //外部中断位1中断位使能
	IT0=1; //设置中断0为下降沿触发
	IT1=1;  //设置中断1为下降沿触发
	PX0=0;  //外部中断源0低优先级
	PX1=1;  //外部中断源1高优先级
		while(1)  //死循环
	{
		for(i=0;i<7;i++)  //循环7次使a~g依次点亮
		{    
			Delay1000ms();
		P0=_crol_(0x01,i); //左移函数从0x01开始左移循环7次
		}
	}
}
void INT0_ISR(void) interrupt 0  //外部中断源0的中断服务函数
{   
   Delay1000ms();  //消抖
	 for(i=0;i<8;i++)   //亮灭循环8次
	{
		P0 = 0x7f;  //配置字形8的段码为7f
		Delay1000ms();
		P0 = 0x00;   //使字形8熄灭
		Delay1000ms();
	}
}
void INT1_ISR(void) interrupt 2  //外部中断源1的中断服务函数
{   
	 Delay1000ms();  //消抖
	{
		P07 = 1;  //配置P07端口使声光报警启动
		Delay1000ms();
	}
}


 

猜你喜欢

转载自blog.csdn.net/u010356933/article/details/106931488