/*
名称:C51之外部中断实验
说明:关于什么是中断这里就不说了。说说计算机中使用中断有什么好处吧。
(1)、实时处理。在计算机控制系统中,环境、参数的突然变化,可能需要
CPU立即做出相应或处理。
(2)、异常处理。计算机系统运行过程中,经常会出现断电、程序出错等问
题,这时就需要CPU对故障源进行处理。(从某种程度上说,第二点和第一点
差不多)。
(3)、提高效率。由于外设和CPU的速度不同,采用中断技术可以大大提高C
PU的运行效率。
再来谈谈C51单片机的中断使用。对于C51来说,其中断的内容还是比较简单的,一般而言,C51单片机有5个中断源(2个外部中断、2个定时器中断和一个串口
中断)。对中断的配置操作,主要通过控制三个寄存器就可以(中断允许寄存器IE)、定时器控制寄存器(TCON)和中断优先级寄存器(IP)。有关这三个寄存器挺简单,就不说了。
还有中断服务函数,在CPU接收到中断后,会执行相应中断的中断服务函数。而C51的中断服务函数也很简单,和普通的函数很像(函数名括号后面加上interrupt 和标志号)。据我估计,这个标志号就是类似于高级芯片中的中断向量表。中断服务函数存储的位置,应该都是固定的(方便系统查找)。
再来说说程序:
本实验是外部中断实验。程序的主要部分执行数码管数字的循环显示(0-F),配置了两个外部中断,外部中断服务的功能是数码管重新开始显示。并且外部中断0可以抢占外部中断1。
*/
中断部分:
//中断初始化
void Interrupt_eint()
{
EX0 = 1; //开启外部中断0
IT0 = 1; //设置外部中断0触发模式:下降沿触发
EX1 = 1; //开启外部中断1
IT1 = 1; //设置外部中断1触发模式
//
EA = 1; //开启总中断
PX0 = 1; //将外部中断的优先级提高
}
//外部0中断服务函数
void int0() interrupt 0
{
uchar j = 0;
for(j = 0;j<=3;++j)
{
DisplayNum(j);
delay_ms(1000);
}
}
//外部1中断服务函数
void int1() interrupt 2
{
uchar j = 0;
for(j = 0;j<=5;++j)
{
DisplayNum(j); //数码管循环显示0-5
delay_ms(1000);
}
}
有关于数码管显示部分的代码就不说了,以前的博客中有的。
2832





