外部中断,不要用函数延时
时间: 2024-03-27 16:40:02 浏览: 42
中断和定时器实验 外部中断0,触发一个延时过程,假定延时时间为1秒
4星 · 用户满意度95%
好的,我们可以使用外部中断来实现精确的延时,不需要使用函数延时。具体步骤如下:
1. 初始化外部中断,设置中断触发方式(上升沿、下降沿或者双边沿触发)和中断优先级。
2. 在外部中断服务函数中进行延时操作,可以使用一个全局变量来记录延时的时间,每次中断时将其减一,直到为0时结束延时操作。
以下是一个使用外部中断实现1000ms延时的示例代码:
```c
#include <reg52.h>
sbit button = P3^2; // 定义外部中断引脚
unsigned char count = 0; // 定义全局变量,表示延时时间为1000ms
void external_interrupt_init() // 初始化外部中断
{
IT0 = 1; // 设置中断触发方式为下降沿触发
EX0 = 1; // 开启外部中断0
EA = 1; // 开启总中断
}
void delay() // 延时函数,单位为毫秒
{
count = 1000; // 计数器设置为1000,表示延时1000ms
button = 1; // 使外部中断引脚为高电平,等待下降沿触发中断
while (count); // 等待延时结束
}
void external_interrupt0_isr() interrupt 0 // 外部中断0服务函数
{
count--; // 计时器减一
if (count == 0)
{
button = 0; // 使外部中断引脚为低电平,中断结束
}
}
void main()
{
external_interrupt_init(); // 初始化外部中断
while (1)
{
// 数码管显示
delay(); // 延时1000ms
}
}
```
在上面的代码中,我们使用外部中断来实现延时操作。在初始化外部中断时,我们设置中断触发方式为下降沿触发,并开启外部中断0。在延时函数中,我们将计数器设置为1000,表示延时1000ms,将外部中断引脚设置为高电平,等待下降沿触发中断。在外部中断服务函数中,每次中断时计数器减一,当计数器为0时,将外部中断引脚设置为低电平,中断结束。在主函数中,我们通过调用delay函数来进行延时操作。
阅读全文