CT107D竞赛板外部中断的基础应用

发布时间 2024-01-12 22:04:39作者: 跃升体

外部中断的含义

外部中断是单片机实时地处理外部事件的一种内部机制。
当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,
转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去。

使用前将J5并到2,3脚,即S5按键接到P32/INT0,S4按键接到P33/INT1

使用方法

  1. 中断源
  2. 掌握特殊寄存器
  3. 中断模板

中断源

该板有5个中断源 中断优先级从0~4
中断号 中断源名称 编号
0 外部中断0 INT0
1 定时/计数器0 TF0
2 外部中断1INT1
3 定时/计数器1 TF1
4 串口中断 R1/T1

掌握特殊寄存器掌握特殊寄存器

image

image
使用方法寄存器使用方法(一般放在中断初始化函数)
使用中断0时,在IE寄存器要将EA(总开关)使能 还要将EX0使能
然后在TCON寄存器选择触发方式
若要调整优先级就需使用IP寄存器
image

中断模板中断模板

image
中断服务函数内要少放驱动程序否则会影响实时性

具体代码:

点击查看代码
#include<STC15F2K60S2.H>

sbit L1 =P0^0;
sbit L8 =P0^7;

void Delay(unsigned int t)
{
	while(t--);
	while(t--);
	while(t--);
}

void SelectHC573()
{
	P2 = (P2 & 0x1f) | 0x80;
}

void Working()
{
	SelectHC573();
	L1 = 0;
	Delay(60000);
	L1 = 1;
	Delay(60000);
}

//====================================
void Init_INT0()
{
	IT0 = 1;
	EX0 = 1;
	EA =1;
}

void ServiceINT0() interrupt 0
{
	L8 =0;
	Delay(60000);
	Delay(60000);
	Delay(60000);
	Delay(60000);
	Delay(60000);
	Delay(60000);
	L8 =1;
}
//====================================
void main()
{
	Init_INT0();
	while(1)
	{
		Working();
	}
}

减少中断函数的写法

点击查看代码
#include<STC15F2K60S2.H>

sbit L1 =P0^0;
sbit L8 =P0^7;

void Delay (unsigned int t)
{
while(t--);
while(t--);
while(t--);
}

void SelectHC573 ()
{
	P2 = (P2 & 0xaf) | 0x80;
}

void Working ()
{
	SelectHC573 ();
	L1 = 0;
	Delay(60000);
	L1 = 1;
	Delay(60000);
	
}
unsigned char hao = 0;
//============================
void Init_INT0 ()
{
	IT0 = 1;//外部中断触发方式选择
	EX0 = 1;//IE寄存器使能
	EA = 1;//总中断开关
}

void ServiceINT0 () interrupt 0
{
	hao =1;
}
void LED ()
{
	if(hao == 1)
	{
		L8 = 0;
		Delay(60000);
		Delay(60000);
		Delay(60000);
		Delay(60000);
		Delay(60000);
		Delay(60000);
		L8 = 1;
	}
	hao = 0;
}
//============================
void main ()
{
	Init_INT0 ();
	while(1)
	{
		Working ();
	  LED ();
	}
}