|
先贴程序:
#include <reg52.h>
sbit singal=P1^0; //信号输出端,就是图中蓝色波形
bit flag;
void delayms(unsigned int x)
{
unsigned int i,j;
for(i=x;i>0;i--)
{
for(j=110;j>0;j--);
}
}
void main()
{
EA=1;
EX0=1;
IT0=1; //外部中断下降沿触发
singal=1;
while(1)
{
if(flag==1)
{
singal=0; //产生外部中断后,把信号拉低
delayms(1); //延时一会
singal=1; //再拉高
flag=0; //置零等待下一次中断
}
}
}
void ex0()interrupt 0
{
flag=1;
}
图中,黄色波形是过零检测电路,低电平位置就是零点。
蓝色波形是信号输出,目的就是想检测到过零后把信号拉低,延时一会再拉高然后等待下一次过零。
可是实际效果却有的波形正确有的波形不争取,不正确的波形原因貌似比较简单,应该就是过零信号的上升沿也被认为是下降沿,
结果又执行了一次中断。
请问这是程序写得不好吗?有什么解决方法。
|
|