蓝桥杯单片机调试异常问题解决

①:温度传感器读取温度为零,但是可以肯定代码没有问题,那么拔掉电源,重新上电即可,具体原因不知;
②:i++;
if(i==500)//或者等于更大的数
{
}
永远都不没完成if里面的功能,那么十有八九是i溢出,计数器建议都定义成int型,不要用char或unsigned char型(容易溢出),同时要注意int型最大正数值是2^15-1=32767,而不是65536;
③:ds1302时间读取不正确,小时超过23,分钟和秒钟超过60,大概率是没有及时写保护位或者BCD码与10进制码的转换错误(也可能根本没有转换);
④:定时器定时时间在微秒级,主函数频繁关闭中断再开启中断导致定时不准确,相当于在定时器中断里插入了一个时间执行需要很长的一段代码,就比如100微秒的定时时间,插入一段1毫秒的代码,定时肯定不正确;
⑤:long temp;
unsigned char vol = 1;
temp = vol << 16;
结果为temp=0。
原因vol << 16运算的位宽为8位,与vol一致,可以改成temp = vol * 65536;
⑥:eeprom连续写入时,每次需要延时3~5毫秒,等待写入完成;
⑦:电压读取一般0.1-0.3秒一次,刚上电要等待一会才会读取第一次电压值,再这之前存电压的变量vol的值为初始化的值,为初始化一般为0。因此如果有判断电压是否超过阈值或低于阈值时要在定时器中断打开之前读一次电压,防止电压判断的逻辑出错,如果不这样,vol刚开始的值为0,肯定低于阈值,这样会导致误触发;

你可能感兴趣的:(蓝桥杯单片机,bug记录)