关于下降沿中断 发现一个很奇怪的现象 用下降沿(由5V变为0的信号)触发中断,该中断为void EInt1_OnInterrupt(void),如下所示。中断发生后iNum++,还有其他一些工作。 这时候,如果先把一个5V的信号加到该管脚(pad0,9s12hz64的pin45),然后在断开该信号,这时候引起一个中断,iNum加一。 但是,如果用一根金属丝触发该管脚,这时候,这个中断会连续的发生,iNum不断递增,知道把该金属丝移开。这是怎么回事呢?难道金属丝还会产生下降沿吗?还有,如果用示波器的探头放到该管脚,这时候并不触发中断。大家说是不是由于示波器探头有去耦处理?于是我并联一个小电容在管脚和地之间,却不能触发中断了。这是什么原因呢? 这个中断我是用PE做的。版本是4.7
/* MODULE Events */
#include "Cpu.h" #include "Events.h"
#pragma CODE_SEG DEFAULT
extern char
sFlag;//进样器动作前的标志位 extern int iNum;//当前第几个试管 extern int j;//当前第几个高(低)电平 extern int jMP1;//电机1已经正转的次数 extern int jMP2;//电机2已经正转的次数 extern int jMP3;//电机3已经正转的次数 extern int jMN1;//电机1已经反转的次数 extern int jMN2;//电机2已经反转的次数 extern int jMN3;//电机3已经反转的次数 extern int iTx;//控制X方向电机M1转动的方波周期 extern int iTy;//控制X方向电机M2转动的方波周期
extern int iTz;//控制X方向电机M3转动的方波周期
extern int imT;
extern void PerPulse(int mP); //通过延迟产生控制电机转动的周期 unsigned int iTT,time1,time2;//
//int ii=0; /*
word result;
word myreturn,oldData;
float one_loop_us;
//char isTwo;//判读是不是连续两次发生中断*/ /* ** =================================================================== **
Event
:
EInt1_OnInterrupt (module Events) ** **
From bean
:
EInt1 [ExtInt] **
Description : **
This event is called when an active signal edge/level has **
occurred. **
Parameters
: None **
Returns
: Nothing ** =================================================================== */ //PAD0外部信号下降沿触发
// 在第2.5",1号泵通电,继电器输出5V电平.这里触发外部中断的,就是这个信号的变化 void EInt1_OnInterrupt(void) { iNum++;
/* place your EInt1 interrupt procedure body here */
FC161_Enable(); // IEE1_SetWord(0x808,iNum); // IEE1_GetWord(0x808,&result); // oldData=result;
//ii++;
//IEE1_SetWord(0x808,0xAA);
//IEE1_GetWord(0x808,&result);
//myreturn=result;
sFlag='T'; //for (iTT = 0; iTT < 60000; ++iTT); /* for-cycle */
//FC161_GetTimeUS(&time1);
/* get measured time of whole for-cycle */
FC161_Reset(); /* reset the counter */ } |