【蓝桥杯单片机】定时器和中断
实验开发板为CT107D蓝桥官方板,编译环境为MDK5
以下中断排列顺序为自然优先级排列顺序 :
- 外部中断0:INT0
- 定时/计数器0:TF0
- 外部中断1:INT1
- 定时/计数器1:TF1
- 串口中断:RI/TI
图片来源于21ic电子网@ohy3686
—————————————————————————————————————————————————
- 15单片机内有两组最高16位定时器
图片来源于21ic电子网@ohy3686
——————————————————外部中断———————————————————————————
#include<STC15F2K60S2.h>
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<STC15F2K60S2.h>
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);
}