【蓝桥杯单片机】定时器和中断

实验开发板为CT107D蓝桥官方板,编译环境为MDK5

以下中断排列顺序为自然优先级排列顺序

  1. 外部中断0:INT0
  2. 定时/计数器0:TF0
  3. 外部中断1:INT1
  4. 定时/计数器1:TF1    
  5. 串口中断:RI/TI

图片来源于21ic电子网@ohy3686

【蓝桥杯单片机】定时器和中断_第1张图片

【蓝桥杯单片机】定时器和中断_第2张图片

—————————————————————————————————————————————————

  • 15单片机内有两组最高16位定时器

图片来源于21ic电子网@ohy3686

【蓝桥杯单片机】定时器和中断_第3张图片

——————————————————外部中断———————————————————————————

#include

typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned long u32;

u8 Flag_INT0 = 0;

void delay(u16 t)
{
	while(t --);
	while(t --);
	while(t --);
}

void Select573(u8 i)
{
	switch(i)
	{
		case 4:
			P2 = (P2 & 0x1F) | 0x80;
		break;
		
		case 5:
			P2 = (P2 & 0x1F) | 0xA0;
		break;
		
		case 6:
			P2 = (P2 & 0x1F) | 0xC0;
		break;
		
		case 7:
			P2 = (P2 & 0x1F) | 0xE0;
		break;
		
	}
}

void InitSystem()
{
	Select573(5);
	P0 = 0x00;
	Select573(4);
	P0 = 0xFF;
}

void Led()
{
	Select573(4);
	P0 = 0xFE;
	delay(60000);
	P0 = 0xFF;
	delay(60000);
}

//======================================

void Init_INT0()
{
	EA = 1;		//使能总中断
	EX0 = 1;	//使能外部中断1
	IT0 = 1;	//选择中断模式
}

void INT0() interrupt 0
{
		Flag_INT0 = 1;
}

//======================================

void Scan_INT0()
{
	if(Flag_INT0 == 1)
	{
		P0 = 0x7F;
		delay(60000);
		delay(60000);
		delay(60000);
		P0 = 0xFF;
		Flag_INT0 = 0;
	}
}

void main()
{
	InitSystem();
	Init_INT0();
	while(1)
	{
		Led();
		Scan_INT0();
	}
}

————————————————————定时器——————————————————————————

#include

typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned long u32;

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


u8 count = 0;

void Select573(u8 i)
{
	switch(i)
	{
		case 4:
			P2 = (P2 & 0x1F) | 0x80;
		break;
		case 5:
			P2 = (P2 & 0x1F) | 0xA0;
		break;
		case 6:
			P2 = (P2 & 0x1F) | 0xC0;
		break;
		case 7:
			P2 = (P2 & 0x1F) | 0xE0;
		break;
	}
}

void InitSystem()
{
	Select573(5);
	P0 = 0x00;
	Select573(4);
	P0 = 0xFF;
}

//================================

void Timer0()
{
	TMOD = 0x01;
	TH0 = (65535 - 50000) / 256;		//延时50ms
	TL0 = (65535 - 50000) % 256;
	TR0 = 1;
	EA = 1;
	ET0 = 1;
}

void Timer0_I() interrupt 1
{
	count ++;
	if(count % 10 == 0)
	{
		L1 = ~L1;
	}
	if(count == 100)
	{
		L8 = ~L8;
		count = 0;
	}
}

//================================

void main()
{
	InitSystem();
	Timer0();
	while(1);
}

 

你可能感兴趣的:(蓝桥杯单片机)