今天测试了一段代码,在主程序中开启看门狗,蜂鸣器快速报警几声之后,进入while循环,在大循环中不断喂狗,定时器中开启关断蜂鸣器,蜂鸣器较之前变慢。上电后,运行正常。但加入较强的电磁干扰后,程序出现死机,一直未复位。我用的单片机是飞思卡尔的MC9S12XHY128,程序如下:
void main(void)
{
unsigned int cnt=0,i=0;
CPMU_PEE_32MHz();
COPCTL_WCOP=0; // 开启看门狗
COPCTL_RSBCK=0;
COPCTL_CR=7;
DDRP_DDRP0=1; //蜂鸣器IO口设为输出模式
BUZZ=1;
Delay(50000);
BUZZ=0;
Delay(50000);
BUZZ=1;
Delay(50000);
BUZZ=0;
Delay(50000);
BUZZ=1;
Delay(50000);
BUZZ=0;
Delay(50000);
Time_Config();
EnableInterrupts;
for(;;)
{
_FEED_COP(); //喂狗指令
}
}
interrupt 42 void timer1_2_ISR(void) // 50ms 中断
{
word Counter_Value;
static char CNT=0;
TIM1_T标志寄存器1_C2F=1; //Clear channel 2 flag
TIM1_TC2 = (word)(Counter_Value + 50000);
if(CNT>=15) // 750ms 定时到
{
BUZZ=!BUZZ;
CNT=0;
}
}
|