程序再运行一段时间后会异常跑飞,通过在线调试,发向程序再disassembly里一直是在0xA000000 jim 0xA000000,出现问题的操作是:
LED_Ctrl(CTRL_24V,ON);
Get_M26_Volt();
LED_Ctrl(CTRL_24V,OFF);
当只有Get_M26_Volt();时不跑飞,当只有LED_Ctrl时也不回跑飞,但是当同时执行时就会跑飞
另外补充一点,中断使可以正常进入的(定时器中断和IO中断)
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
程序再运行一段时间后会异常跑飞,通过在线调试,发向程序再disassembly里一直是在0xA000000 jim 0xA000000,出现问题的操作是:
LED_Ctrl(CTRL_24V,ON);
Get_M26_Volt();
LED_Ctrl(CTRL_24V,OFF);
当只有Get_M26_Volt();时不跑飞,当只有LED_Ctrl时也不回跑飞,但是当同时执行时就会跑飞
另外补充一点,中断使可以正常进入的(定时器中断和IO中断)
void Get_M26_Volt(void)
{
u8 i=0;
u32 average;
u16 AD_value[8][5]; //AD_value[N][M] N:通道 M:次数
ADC12CTL0|=ADC12ENC; //ADC12使能
Delay_ms(1000);
//AD采集 采集5次,求平均值
for(i=0;i<5;i++)
{
ADC12CTL0 |= ADC12SC; //启动转换
while (!(ADC12IFG & BIT7));
AD_value[0][i] = ADC12MEM0;
AD_value[1][i] = ADC12MEM1;
AD_value[2][i] = ADC12MEM2;
AD_value[3][i] = ADC12MEM3;
AD_value[4][i] = ADC12MEM4;
AD_value[5][i] = ADC12MEM5;
AD_value[6][i] = ADC12MEM6;
AD_value[7][i] = ADC12MEM7;
}
ADC12CTL0 &= ~ADC12ENC; //ADC12失能
for(i=0;i<8;i++)
{
//计算平均值
average= (AD_value[i][0]+AD_value[i][1]+AD_value[i][2]+AD_value[i][3]+AD_value[i][4])/5;
gParam.run_Param.analog[i] = (u16)((average*VREF)/4095);
}
}
void LED_Ctrl(unsigned char name,unsigned char on_off)
{
/************判断输入参数有效性************************/
if(name > 2)
{
return;
}
if(on_off!=0 && on_off!=1)
{
return;
}
if(on_off == 0)
{
switch (name)
{
case 0:
P9OUT &= ~BIT2;
break;
case 1:
P6OUT &= ~BIT3;
break;
case 2:
P4OUT &= ~BIT3;
break;
default:
break;
}
}
else
{
switch (name)
{
case 0:
P9OUT |= BIT2;
break;
case 1:
P6OUT |= BIT3;
break;
case 2:
P4OUT |= BIT3;
break;
default:
break;
}
}
}
以上是这两个函数的代码
下面是ADC初始化的代码
void ADC_Init(void)
{
ADC12CTL0&=~ADC12ENC; //ADC12设置为初始状态,只有ENC为0时才能修改器参数
REFCTL0 &= ~REFMSTR; // Reset REFMSTR to hand over control to
ADC12CTL0 |= ADC12ON + ADC12MSC + ADC12SHT0_2 + ADC12SHT1_2; //内置ADC打开 选择多路采样模式 ADC采样保持时间
ADC12CTL0 |= ADC12REFON+ADC12REF2_5V; //内置参考电压开,内置参考电压2.5V
ADC12CTL1 = ADC12SHP+ADC12SSEL_3+ADC12CONSEQ_1; //取样信号来源,AD采样时钟 序列通道单次转换模式
ADC12MCTL0 = ADC12SREF_1+ADC12INCH_7; //内置参考负电压,AD通道选择
ADC12MCTL1 = ADC12SREF_1+ADC12INCH_6; //内置参考负电压,AD通道选择
ADC12MCTL2 = ADC12SREF_1+ADC12INCH_5; //内置参考负电压,AD通道选择
ADC12MCTL3 = ADC12SREF_1+ADC12INCH_4; //内置参考负电压,AD通道选择
ADC12MCTL4 = ADC12SREF_1+ADC12INCH_15; //内置参考负电压,AD通道选择
ADC12MCTL5 = ADC12SREF_1+ADC12INCH_14; //内置参考负电压,AD通道选择
ADC12MCTL6 = ADC12SREF_1+ADC12INCH_13; //内置参考负电压,AD通道选择
ADC12MCTL7 = ADC12SREF_1+ADC12INCH_12+ADC12EOS; //内置参考负电压,AD通道选择 序列结束
}