内容来自小蜜蜂老师~
中断系统
外部中断0 INT0 、0(中断号)
定时计数器0 TF0、1
外部中断1 INT1、2
定时计数器1 TF1、3
串口中断 RI/TI、4
与中断相关的寄存器
中断系统结构
中断函数编写规则
1.相关配置初始化 2.中断功能执行函数
中断函数框架
void 函数名() interrupt 中断号
{
}
中断的优先级:
外部中断0 > 定时/计数器0 >外部中断1 > 定时/计数器1 >串口中断
题目要求:

直接在中断函数中延时
#include "reg52.h"
sbit L1 = P0^0;
sbit L8 = P0^7;
void Delay(unsigned int t)
{
while(t--);
}
void HC138(unsigned char n)
{
switch(n)
{
case 4: P2 = P2 |0x1f; P2 = 0x80; break;
case 5: P2 = P2 |0x1f; P2 = 0xa0; break;
case 6: P2 = P2 |0x1f; P2 = 0xc0; break;
case 7: P2 = P2 |0x1f; P2 = 0xe0; break;
}
}
void Init_INT0()
{
EX0 = 1; //使能外部中断0
IT0 = 1; //下降沿触发
EA = 1; //中断总开关
}
void ServerINT0() interrupt 0
{
L8 = 0;
Delay(60000);
L8 = 1;
Delay(60000);
}
void LED1_Work(void)
{
L1 = 0;
Delay(60000);
L1 = 1;
Delay(60000);
}
void Initsystem()
{
HC138(5);
P0=0x00;
HC138(4);
P0=0xff;
}
void main()
{
Init_INT0();
Initsystem();
while(1)
{
LED1_Work();
}
}
在外部执行延时
#include "reg52.h"
sbit L1 = P0^0;
sbit L8 = P0^7;
void Delay(unsigned int t)
{
while(t--);
}
void HC138(unsigned char n)
{
switch(n)
{
case 4: P2 = P2 |0x1f; P2 = 0x80; break;
case 5: P2 = P2 |0x1f; P2 = 0xa0; break;
case 6: P2 = P2 |0x1f; P2 = 0xc0; break;
case 7: P2 = P2 |0x1f; P2 = 0xe0; break;
}
}
void Init_INT0()
{
EX0 = 1; //使能外部中断0
IT0 = 1; //下降沿触发
EA = 1; //中断总开关
}
unsigned char stat_int = 0;
void ServerINT0() interrupt 0
{
stat_int = 1;
}
void LEDINT()
{
if(stat_int == 1)
{
L8 = 0;
Delay(60000);
L8 = 1;
}
stat_int = 0;
}
void LED1_Work()
{
L1 = 0;
Delay(60000);
L1 = 1;
Delay(60000);
}
void Initsystem()
{
HC138(5);
P0=0x00;
HC138(4);
P0=0xff;
}
void main()
{
Init_INT0();
Initsystem();
while(1)
{
LED1_Work();
LEDINT();
}
}
本文介绍了如何在Atmel AVR单片机中利用中断系统INT0实现延时,包括中断配置、中断函数编写规则,并展示了如何结合LED控制进行实战示例。
1474

被折叠的 条评论
为什么被折叠?



