打印
[技术问答]

新唐MS51FB9AE用ADC功能一直停在while(ADCF == 0)

[复制链接]
1770|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
YOUTHFUL|  楼主 | 2020-10-19 11:47 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
最近用新唐MS51FB9AE芯片ADC功能在Keil5仿真时,有时程序运行ADC程序采样正常OK,但有时很随机的会一直停在while(ADCF == 0)死循环跳不出来,一时找不出问题原因,请大家帮忙指点,下面是仿真ADC子程序
uint16 ReadAdcValue(void)
{
  uint16 AdcTemp;

  ADCCON1|=0X30;
  ADCCON2|=0X0E;
  AUXR1|=SET_BIT4;

  clr_ADCF;
  set_ADCS;
  while(ADCF == 0);
  AdcTemp = ADCRH;
  AdcTemp <<= 4;
  AdcTemp |= ( ADCRL & 0x0F);
  Disable_ADC;
  return AdcTemp;
}

void CheckBattAdc (void)
{  
  uint16 AdcTemp;

  Enable_ADC_AIN5;
  AdcTemp=ReadAdcValue();
  


}

使用特权

评论回复
沙发
YOUTHFUL|  楼主 | 2020-10-20 02:59 | 显示全部楼层
w321 发表于 2020-10-19 19:51
一般开启ADC后,加点延时会好些!  可以试下!

谢谢,开启ADC后加了20-1000US延时分别调试,问题还是一样存在,主要ADC采样时一直停在while(ADCF == 0)死循环问题是随机发生,开始运行正常,运行几分钟或十几分钟出现问题,这时查看ADCCON0、ADCCON1、ADCCON2的ADC控制寄存器都是0X00,也无法修改赋值

使用特权

评论回复
板凳
YOUTHFUL|  楼主 | 2020-10-20 03:05 | 显示全部楼层
天灵灵地灵灵 发表于 2020-10-19 20:46
delay一下看看

谢谢,加delay试了,ADC随机死机问题还是一样

使用特权

评论回复
地板
YOUTHFUL|  楼主 | 2020-10-20 03:07 | 显示全部楼层
wahahaheihei 发表于 2020-10-19 22:58
参考官方的例子试试。

谢谢,ADC程序就是参考官方的例子

使用特权

评论回复
5
YOUTHFUL|  楼主 | 2020-10-20 09:43 | 显示全部楼层
ADC程序参考官方的例子,开启ADC后也加了不同时间延时分别调试,还是同样问题,主要ADC采样时一直停在while(ADCF == 0)进入死循环是随机发生,开始运行正常,运行几分钟或十几分钟后出现ADC死机,这时查看ADCCON0、ADCCON1、ADCCON2几个ADC控制寄存器都是OX00,就是说程序给的值都没有写进去,加指令运行查看进入死机断点后给其赋值也不能修改,加break强行跳出后又能运行正常,看断点还会随机出现同样问题,换MS51FB9AE和N76E003仿真都有ADC采样突然死机问题,看样子应该不是个例,大家碰到这个问题是怎么解决的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

1

粉丝