qepuemc 发表于 2025-3-12 13:00:26

沿触发如何延时请教

// 外部中断函数声明
   IE0 = 0;   //外中断0标志位
    EX0 = 1;    //INT0 Enable
    IT0 = 0;    //IT0 = 0; INT0 上升,下降沿中断   
// 外部中断函数声明


// 外部中断函数声明
void INT0_int (void) interrupt 0      //进中断时已经清除标志
{
//这里面不可以发送串口数据(不可以正常用)
if(P32==0)
{ EA = 0;    //INT0 Enable
Delay7ms();
   if(P32==0)
   {   
   
    zd=1;

   }
EA = 1;    //INT0 Enable
}
   

}
// 外部中断函数声明


现在的问题就是想在按下遥控的时候zd=1才可以被赋值。通过延时7-9毫秒滤波。不过实际不管用。懂的麻烦说一下。

国芯人工智能 发表于 2025-3-12 13:03:00

要实现沿触发的延时功能,首先需要明确外部中断的触发条件及延时的具体需求。根据您提供的代码片段,外部中断0(INT0)配置为上升沿或下降沿触发。在中断服务程序(ISR)中,您希望在检测到特定条件后执行延时操作。<br><br>以下是优化后的代码及其解释:<br><br>c<br>void INT0_int(void) interrupt 0 {<br>    if (P32 == 0) {// 检测P32引脚状态<br>      EA = 0;      // 关闭全局中断,防止中断嵌套<br>      Delay7ms();// 执行7ms延时<br>      EA = 1;      // 重新开启全局中断<br>    }<br>}<br><br>### 关键点说明:<br>1. **中断触发条件**:IT0 = 0 表示INT0在上升沿和下降沿均触发中断。<br>2. **中断服务程序**:在ISR中,首先检测P32引脚状态。如果P32为低电平(P32 == 0),则关闭全局中断(EA = 0),执行7ms延时,最后重新开启全局中断(EA = 1)。<br>3. **延时函数**:`Delay7ms()` 是实现7ms延时的函数,需确保其精度和稳定性。<br><br>### 注意事项:<br>- **全局中断管理**:在ISR中关闭和开启全局中断(EA)是为了防止中断嵌套,确保延时操作的准确性。<br>- **延时函数实现**:`Delay7ms()` 的实现需根据具体硬件平台和时钟频率进行调整,以确保延时精度。<br><br>通过以上优化,您可以实现沿触发的延时功能,同时确保代码的稳定性和可维护性。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]

DebugLab 发表于 2025-3-12 13:16:29

不清楚您想实现什么功能,按键消抖?

jwd 发表于 2025-3-12 13:24:36

可以配置标志位,主程序查询,另外不建议在中断函数里面使用delay函数

qepuemc 发表于 2025-3-12 14:27:55

jwd 发表于 2025-3-12 13:24
可以配置标志位,主程序查询,另外不建议在中断函数里面使用delay函数

现在是打算设置好几个标志位。用来表示。已经正常接收到了遥控按键,如果不加上延时的话,我怕程序太快,进入中断,因为用分析仪看的话会多一倍的状态。所以加了延时滤波。

qepuemc 发表于 2025-3-12 14:32:27

DebugLab 发表于 2025-3-12 13:16
不清楚您想实现什么功能,按键消抖?

不是按键。是过滤波形。网上说433是20到24数据位。不过我看逻辑分析仪有更多的电平状态所以要过滤

DebugLab 发表于 2025-3-12 15:35:05

qepuemc 发表于 2025-3-12 14:32
不是按键。是过滤波形。网上说433是20到24数据位。不过我看逻辑分析仪有更多的电平状态所以要过滤 ...
433M遥控接收建议用带晶振的比如SYN480R,不要用那种分立元件模拟电路的,那种信噪比和带宽还有频飘不行,干扰还大
433遥控相关:
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=11330
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7455
页: [1]
查看完整版本: 沿触发如何延时请教