|
先貼程序:
#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;
}
圖中,黃色波形是過零檢測電路,低電平位置就是零點。
藍色波形是信號輸出,目的就是想檢測到過零后把信號拉低,延時一會再拉高然后等待下一次過零。
可是實際效果卻有的波形正確有的波形不爭取,不正確的波形原因貌似比較簡單,應該就是過零信號的上升沿也被認為是下降沿,
結果又執行了一次中斷。
請問這是程序寫得不好嗎?有什么解決方法。
|
|