实验二 外部中断应用

设计要求:

自行设计实验线路并编制程序:要求在无外部中断时最右一位发光二极管点亮。请编程实现:当外部中断0请求中断时发光二极管左移;当外部中断1请求中断时发光二极管闪烁。

单片机实验说明<二>外部中断基本使用_单片机

电路设计:

单片机实验说明<二>外部中断基本使用_#define_02

软件代码:

/*****************************************************************************
* 头文件 *
*****************************************************************************/
#include "hml/hml.h"
#define LSA P1_5
#define LSB P1_6
#define LSC P1_7
void EXINT0() __interrupt 0;
void EXINT1() __interrupt 2;
/*****************************************************************************
* 初始化和功能函数 *
*****************************************************************************/
void sys_init(void)
{
LSA=0;
LSB=0;
LSC=0;
IT0=0;
IT1=0;
EA=1;
EX0=1;
EX1=1;
}
void Up2Down(int x)
{
int i, j;
unsigned char sel=0x7f;
for(i=0;i<x;i++)
{
for(j=0;j<8;j++)
{
P0 = sel;
sleep(125);
sel=sel>>1|0x80;
}
sel=0x7f;
}
}
void EXINT0() __interrupt 0
{
Up2Down(1);
}
void EXINT1() __interrupt 2
{
P0=0xFF;
sleep(125);
P0=0x7F;
sleep(125);
P0=0xFF;
sleep(125);
}
/*****************************************************************************
* 主函数 *
*****************************************************************************/
void main(void)
{
sys_init();
while(true)
{
P0=0x7F;
}
}

思考题:

1.51 单片机的中断系统由哪几个特殊功能寄存器组成?

2.中断函数与函数调用有何不同?

3.如果 INT0 和 INT1 的优先级都设置成 0,但我们知道中断号越小,优先级越高,即 INT0 的自

然优先级高于 INT1,请修改程序,先按下 KEY1,在 LED 的闪烁过程中按下 KEY0,看能否打断 LED

的闪烁?原因是什么?