基于Proteus仿真51单片机外部中断实验
程序员文章站
2024-01-10 23:54:52
...
一、实验目的
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();
}
}
推荐阅读
-
基于Proteus与keil联合仿真的51单片机学习记录(六)(串口通信)
-
基于51单片机的交通信号灯(Proteus仿真+源码)
-
基于Proteus仿真51单片机外部中断实验
-
基于Proteus与keil联合仿真的51单片机学习记录(五)(使用T/C的工作方式0定时)
-
51单片机Proteus仿真+Keil工程-实验1-LED
-
51单片机Proteus仿真+Keil工程-实验2-按键-数码管
-
51单片机Proteus仿真+Keil工程-实验4-外部中断-步进电机驱动
-
基于51单片机的超声波避障小车设计(含Proteus仿真)
-
基于Proteus与keil联合仿真的51单片机学习记录(二)
-
51单片机Proteus仿真+Keil工程-实验2-按键-数码管