amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 326|回复: 2

STC8A8K64S4A12的ADC转换只有第一次是正确的,求指导

[复制链接]
发表于 2019-3-16 18:29:48 | 显示全部楼层 |阅读模式
代码如下:使用ADC2和ADC3,现在只调用函数每3秒查询一次ADC2,ADC3没调用,只有上电后的第一次转换结果是正确的,后面的结果就偏大很多

  1. /*----------------------------
  2. //初始化ADC
  3. ----------------------------*/
  4. void InitADC_Poll(void)
  5. {
  6.     P1M1 |=  ((1 << 2) | (1 << 3));
  7.     P1M0 &= ~((1 << 2) | (1 << 3)); //设置P1.2和P1.3为高阻输入
  8.    

  9.     EADC = 0;                   //禁止ADC转换中断
  10.    
  11.     ADCCFG = ADC_RESFMT | 0;    //设置ADC时钟为32个CPU时钟,转换结果右对齐
  12.    
  13.     ADC_CONTR = ADC_POWER | 2;    //ADC上电,选择ADC2

  14.     Delay_ms(10);
  15. }


  16. /*----------------------------
  17. //读取ADC结果12Bit
  18. //ch:ADC通道号0-14(P10-P17,P00-P06)
  19. ----------------------------*/
  20. u16 GetADCResult12Bit_Poll(u8 ch)
  21. {
  22.     u16 adc_result = 0;
  23.    
  24.     ADC_CONTR = ADC_POWER |ADC_START | ch;     //启动ADC转换
  25.     _nop_();                                    //等待2个NOP
  26.     _nop_();
  27.     _nop_();
  28.     _nop_();
  29.     while (!(ADC_CONTR & ADC_FLAG));            //查询ADC完成标志
  30.     ADC_CONTR &= ~ADC_FLAG;                     //清完成标志
  31.    
  32.     adc_result = ADC_RES;                       //读取ADC结果高8位
  33.     adc_result = (adc_result << 8) | ADC_RESL;  //读取ADC结果低8位

  34.     return adc_result;                          //返回ADC结果
  35. }
复制代码
发表于 2019-3-20 15:36:20 | 显示全部楼层
楼主可以向STC的技术支持索要16通道ADC测试程序。
发表于 2019-3-20 16:25:30 | 显示全部楼层
本帖最后由 国学芯用 于 2019-3-20 16:26 编辑

QQ截图20190320162645.png
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-8-19 02:30

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表