|
先貼程序:
#include <reg52.h>
sbit singal=P1^0; //信號(hào)輸出端,就是圖中藍(lán)色波形
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; //外部中斷下降沿觸發(fā)
singal=1;
while(1)
{
if(flag==1)
{
singal=0; //產(chǎn)生外部中斷后,把信號(hào)拉低
delayms(1); //延時(shí)一會(huì)
singal=1; //再拉高
flag=0; //置零等待下一次中斷
}
}
}
void ex0()interrupt 0
{
flag=1;
}
圖中,黃色波形是過零檢測電路,低電平位置就是零點(diǎn)。
藍(lán)色波形是信號(hào)輸出,目的就是想檢測到過零后把信號(hào)拉低,延時(shí)一會(huì)再拉高然后等待下一次過零。
可是實(shí)際效果卻有的波形正確有的波形不爭取,不正確的波形原因貌似比較簡單,應(yīng)該就是過零信號(hào)的上升沿也被認(rèn)為是下降沿,
結(jié)果又執(zhí)行了一次中斷。
請(qǐng)問這是程序?qū)懙貌缓脝幔坑惺裁唇鉀Q方法。
|
|