在51单片机中,有2路外部中断输入INT0(P3.2)和INT1(P3.3);2路中断触发信号:低电平触发和下降沿触发。
中断允许寄存器IE(0:禁止中断;1:使能中断)
定时/计数器中断控制寄存器TCON寄存器
TF1:定时/计数器T1溢出中断请求标志位(0:无中断请求;1:有中断请求)
TR1::定时/计数器T1启动位(0:停止:定时/计数器;1:启动:定时/计数器)
TF0:定时/计数器T0溢出中断请求标志位
TR0:定时/计数器T0启动位0
IE1:外部中断1请求标志位
IT1:外部中断1触发方式控制位(0:低电平触发;1:高电平触发)
IE0:外部中断0请求标志位
IT0:外部中断0触发方式控制位
在开发板上完成以下任务:
- 启动后,灯L11闪烁,其他LED灯熄灭
- S4按键,即引脚外部中断INT1设置为下降沿触发
- 设计中断服务函数,外部中断响应后,将L12灯的开关状态翻转
#include "reg52.h"
//关闭外设
void Cls_Peripheral(void)
{
P0 = 0xFF;
P2 = P2 & 0x1F | 0x80; // P27~P25清零,再定位Y4C
P2 &= 0x1F; // P27~P25清零
P0 = 0;
P2 = P2 & 0x1F | 0xA0; // P27~P25清零,再定位Y5C
P2 &= 0x1F; // P27~P25清零
}
sbit L11=P3^0;
sbit L12=P3^1;
void Delay (unsigned int t) //具体延时的长度可以通过参数传递
{
while(t--);
}
void led_shan() //L11灯闪烁函数
{
L11=0;
Delay(40000);
L11=1;
Delay(40000);
}
// 系统初始化
void Sys_Init(void)
{
IT1 = 1; // 边沿触发方式(下降沿)
EX1 = 1;
EA = 1; // 开启总中断
}
//中断服务函数
void isr_intr_1(void) interrupt 2
{
L12=~L12; //S4按下,LED灯状态翻转
}
//主函数
void main()
{
Cls_Peripheral();
Sys_Init();
while(1)
{
led_shan();
}
}