沿触发如何延时请教
// 外部中断函数声明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毫秒滤波。不过实际不管用。懂的麻烦说一下。
要实现沿触发的延时功能,首先需要明确外部中断的触发条件及延时的具体需求。根据您提供的代码片段,外部中断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>[本文内容由国芯人工智能辅助生成,仅供参考] 不清楚您想实现什么功能,按键消抖? 可以配置标志位,主程序查询,另外不建议在中断函数里面使用delay函数 jwd 发表于 2025-3-12 13:24
可以配置标志位,主程序查询,另外不建议在中断函数里面使用delay函数
现在是打算设置好几个标志位。用来表示。已经正常接收到了遥控按键,如果不加上延时的话,我怕程序太快,进入中断,因为用分析仪看的话会多一倍的状态。所以加了延时滤波。 DebugLab 发表于 2025-3-12 13:16
不清楚您想实现什么功能,按键消抖?
不是按键。是过滤波形。网上说433是20到24数据位。不过我看逻辑分析仪有更多的电平状态所以要过滤 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]