请教大家一个问题:一条乘法指令导致MCU复位的原因是什么
调试一个ai8051u+电流传感器_ACS712ELCTR-05B-T程序,使用P1.7脚对ACS712ELCTR-05B-T的输出电压进行AD转换后计算电流。程序采用8bit。根据ACS712ELCTR-05B-T手册,电流在0-5A时,其输出电压:2.5V+-0.925V,输出灵敏度:185mV/A。
程序主要检测方法是20MS的时间内连续对ACS712ELCTR-05B-T的输出电压进行20次采样,通过冒泡法查找到电压的最大值后,再换算成检测电流值。AD转换程序参考了擎天柱例程中的09.ADC采样NTC数据-软件防抖-过采样使用-串口1返回结果程序。
在换算时,包含以下语句:
const float K=Vref/4096/0.185/1.414; //计算常数
float Current_temp=0.0;
Current_temp = (adc - 2048)*K; //换算出电流值,ADC为ADC采样值
调试程序时,用电位器对5V电源分压后接入P1.7脚进行模拟。由于是模拟,当AD输入电压低于2.5V时,冒泡法查找到电压的最大值就会小于2048 ,(adc - 2048)就会变成负数,此时导致程序复位。
请教一下大家在这条语句中,为什么(adc - 2048)变成负数后会导致MCU复位呢?
下面是电流换算的程序:
/******************** 计算电流 *********************/
#define Vref 5.0
#define Sensitvity0.185
#define Zero_point2.5
float CalculationCurrent(u16 adc)
{
//电流传感器_ACS712ELCTR-05B-T
//量程:5A
//输出灵敏度:185mV/A(对应5A电流时输出约925mV)
//精度:±1.5%
//工作电压:4.5V~5.5V
//输出电压:2.5V+-0.925
const float K=Vref/4096/0.185/1.414; //计算常数
float Current_temp=0.0; //电流计算结果
Current_temp = (adc - 2048)*K; //Zero_point理论值为2048,对应采样电压2.5V
return Current_temp;
}
下面附上用到的8位擎天柱例程:09.ADC采样NTC数据-软件防抖-过采样使用-串口1返回结果
上传的代码里未见问题函数调用,并且复制这个函数到例程中调用未见复位异常:
上传可复现问题工程看看
页:
[1]