打印
[技术问答]

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

[复制链接]
1564|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();
  


}

使用特权

评论回复
沙发
w321| | 2020-10-19 19:51 | 只看该作者
一般开启ADC后,加点延时会好些!  可以试下!

使用特权

评论回复
板凳
天灵灵地灵灵| | 2020-10-19 20:46 | 只看该作者
delay一下看看

使用特权

评论回复
地板
wahahaheihei| | 2020-10-19 22:58 | 只看该作者
参考官方的例子试试。

使用特权

评论回复
5
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,也无法修改赋值

使用特权

评论回复
6
YOUTHFUL|  楼主 | 2020-10-20 03:05 | 只看该作者
天灵灵地灵灵 发表于 2020-10-19 20:46
delay一下看看

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

使用特权

评论回复
7
YOUTHFUL|  楼主 | 2020-10-20 03:07 | 只看该作者
wahahaheihei 发表于 2020-10-19 22:58
参考官方的例子试试。

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

使用特权

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

使用特权

评论回复
9
yygdzjs| | 2020-10-20 16:51 | 只看该作者
通过你描述的问题:  你的仿真 ( 电脑 与 单片机 通过专用的仿真器完成);
如果是电脑软件问题 要原厂帮忙,一般这个情况很少,不影响产品,有难解决;
仿真器问题 ,接口与电平转换问题比较多点,你自己试   单片机不同电压 配仿真器上接口的电平转换.
1.
首先 不用电脑与仿真器   试一下正不正常(排除电脑 专用仿真通信问题),可以插入LED闪烁程序查看;
2.
如果单片机程序问题, ADC转换有个采样速度问题,可以减速;
3.
还有是不是程序的多个中断问题影响,关闭部分中断测试 ADC。
4.
关于ADC控制寄存器 有些频繁操作加延时,模块功能开启 也需要延时等待模块稳定. 转换开启一般都会加点延时.
5.
硬件电源的稳定等问题.

使用特权

评论回复
10
jasontu| | 2020-10-21 07:58 | 只看该作者
本帖最后由 jasontu 于 2020-10-21 08:10 编辑

可以试看看把最佳化设成0。更新NULINK 到最新版

使用特权

评论回复
11
taobaofarmer| | 2022-1-17 23:09 | 只看该作者
唉,终于找到同仁了,我也是同样的经历,在用 MS51FB9AE 和 MS51EC0AE,遇到的问题一模一样,楼主是2020年10月份遇到的问题,我是这两个月遇到的,因为才开始用了两个月,怎么改软件也解决不了,跟楼主一样,总是在等待 ADCF 置位的时候等不到,我现在深深地怀疑是 ADC 模块的BUG,不知道楼主有没有解决这个问题

使用特权

评论回复
12
david-lau| | 2022-1-21 09:36 | 只看该作者
ADCF处于ADCCON0寄存器,地址为E8H页0。
所以你需要检查下软件中是否有切换页的动作,把页切换到页1了,而去读页0的ADCF

使用特权

评论回复
13
qzuser233| | 2022-4-8 13:23 | 只看该作者
2022.04.08:使用ms51pc0ae遇到相同问题,一直卡死在while(ADCF==0);

使用特权

评论回复
14
chineseboyzxy| | 2022-4-10 22:32 | 只看该作者
while(!(ADCCON0&0x80));这样就不会卡死,我也直接用ADCF这个位标志名称试过,程序运行不过去。

使用特权

评论回复
15
xn45862060| | 2022-4-22 11:05 | 只看该作者
用N76E003查询ADCF这个位可以,而MS51FB9AE不行;MS51FB9AE要查询ADCCON0.6

使用特权

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

本版积分规则

1

主题

8

帖子

1

粉丝