中断系统被用来处理随即突发事件。
中断分为两种:
外部中断源INT0,INT1
内部终端源T0,T1,串行I/O口中断
本节我学习的是外部中断源的使用方法。
P3.0,P3.1口作为串口通信使用,在本节用不到
P3.2INT0输入端
P3.3INT1输入端
P3.4T0定时器输入端
P3.5T1定时器输入端
P3.6,P3.7作为普通I/O口使用。
查询传送:传送前,一方先查询另一方的状态,准备好时传送,否则一直处于等待状态。
中断方式:一方通过申请中断与另一方进行数据传送
因为该寄存器可以直接使用位寻址,所以可以直接为其赋值。
EA为总中断控制位,当EA=1时,中断才可以使用,当EA=0时,屏蔽一切中断申请。
因为我这次只用到了外部中断源,所以只用考虑B0口,B2口。
TCON寄存器
IE0=1 INT0请求中断
IE0=1 INT1请求中断
IT0=0 INT0低电平触发,IT0=1,INT0下降沿触发。
// 代码头文件
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^0;//使用独立按键,按下后进入中断
sbit key2=P3^7;//提供一个下降沿,触发中断
// 延迟函数,用于按键消抖
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
//中断初始化
void int11()
{
EA=1; //开总中断
EX1=1;//开外部中断1
IT1=1;//设置触发方式为下降沿
}
//中断函数
void int1() interrupt 2
{
P1=~P1;//中断时LED取反
}
中断格式如上,自定义函数名后,要加上中断号
外部中断0 :中断号为0;中断标志为IE0;
定时器0 :中断号为1;中断标志为TF0;
外部中断1 :中断号为2;中断标志为IE1;
定时器1 :中断号为3;中断标志为TF1;
串行口 :中断号为4;中断标志为R1或T1.
void main()
{
int11();//中断初始化
P1=0X01;//点亮LED
while(1)
{
if(key1==0)//按下独立按键
{
delay(10);//按键消抖
if(key1==0)
{
key2=1;
key2=0;//设置下降沿
while(!key1);//松手检测
}
}
}
}
将单片机的P3.3与P3.7通过杜邦线连在一起,当按下按键后,程序进入中断,需要通过下降沿触发中断响应。
此时P3.7作为一个普通I/O口,通过赋值设置下降沿,输入到P3.3中,使中断响应。
此时,小灯亮七个,再按一下,再次进入中断,取反,小灯泡亮一个。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)