搜索

[资源共享] 填坑,接上个帖子,官方例程改错(二)ADC单通道篇

[复制链接]
199|1
 楼主 | 2020-3-25 08:49 | 显示全部楼层 | 奖励家园币|阅读模式
忘了是哪里错了,可能是引脚配置错了,也可能是没错!
  1. /**
  2. *   ************************************************************************************
  3. *                                                                上海芯圣电子股份有限公司
  4. *                                                                    www.holychip.cn
  5. *        ************************************************************************************
  6. *        @Examle Version                V1.0.4.0
  7. *        [url=home.php?mod=space&uid=1102]@demo[/url]         Version                V1.0.4.0
  8. *        @Date                                2019.07.22
  9. *        ************************************************************************************
  10. *                                                                         模块性能介绍
  11. *        1、MCU提供10/12位ADC检测,拥有11路外部输入通道以及2路内部输入通道
  12. *        2、参考电压可选择内部Vref(VDD、2V、3V、4V)以及外部Vref,转换后的数据可选择数据位
  13. *           数和对齐方向
  14. *        ************************************************************************************
  15. *                                                                         应用注意事项
  16. *        1、在掉电模式下,ADCEN强制为0,ADC失能。
  17. *        2、为保证ADC转换精度,建议ADC转换时钟频率在2MHz及2MHz以下。
  18. *        3、内部参考电压选择2V时,VDD工作电压须高于2.7V。内部参考电压选择3V/4V时,VDD工作电
  19. *           压须高于内部参考电压0.5V以上。
  20. *        4、启动ADC转换时,需要关闭ADC省电唤醒功能。使能ADC模块或者切换通道后,为保证精度建
  21. *      议延时20us再启动转换。
  22. *        5、启动转换时,ADCIF需要先软件清0,ADCIF位为1时,置ADCST不能启动新的转换。在转换过
  23. *           程中,若ADCST位软件清0将终止转换。
  24. *        6、在进行内部通道选择时,外部通道选择XCHS[3:0]应配置为1111,否则可能会造成内部通道
  25. *           和外部通道同时打开的情况。
  26. *        7、芯片进入掉电模式时将ADCC0中的INREF_S寄存器设置为非VDD电压,可以进一步降低电流。
  27. *        ************************************************************************************
  28. *                                                                         客户服务
  29. *        感谢您使用我们的单片机,若发现错误或对函数的使用存在疑问。请添加上海芯圣电子官方QQ群
  30. *        ****************************技术支持群:201030494***********************************
  31. *   ************************************************************************************
  32. **/

  33. #define        ALLOCATE_EXTERN
  34. #include "HC89S003F4.h"

  35. void Delay_2us(unsigned int fui_i);                //延时函数
  36.                        
  37. unsigned int gui_AdcValue = 0;                          //用于存放ADC的值

  38. /***************************************************************************************
  39.   * @实现效果        对P00口的ADC通道0进行AD转换
  40. ***************************************************************************************/
  41. void main()
  42. {
  43. /************************************系统初始化****************************************/
  44.         WDTCCR = 0x00;                                                //关闭看门狗
  45.                                             //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
  46.         CLKSWR = 0x51;                                                //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
  47.         CLKDIV = 0x01;                                                //Fosc 1分频得到Fcpu,Fcpu=16MHz
  48. /**********************************相关配置初始化**************************************/
  49.         P0M0 = P0M0&0xF0|0x08;                //P00设置为推挽输出
  50. /************************************ADC初始化*****************************************/
  51.         P0M0 = P0M0&0x0F|0x30;                //P01设置为模拟输入
  52.         ADCC0 = 0x80;                                                  //打开ADC转换电源
  53.         Delay_2us(10);                                                 //延时20us,确保ADC系统稳定
  54.         ADCC1 = 0x01;                                                  //选择外部通道1
  55.         ADCC2 = 0x4D;                                                  //转换结果12位数据,数据右对齐,ADC时钟16分频

  56.         while(1)
  57.         {
  58.                 ADCC0 |= 0x40;                                        //启动ADC转换
  59.                 while(!(ADCC0&0x20));                //等待ADC转换结束
  60.                 ADCC0 &=~ 0x20;                                        //清除标志位
  61.                 gui_AdcValue = ADCR;                 //获取ADC的值

  62.                 if(gui_AdcValue <= 0x10)
  63.     {
  64.                     P0_0 = 1;
  65.                    }
  66.                 else
  67.      {
  68.                     P0_0 = 0;
  69.                    }
  70.         }
  71. }

  72. /**
  73.   * @说明          延时函数
  74.   * @参数          fui_i : 延时时间
  75.   * @返回值 无
  76.   * @注         Fcpu = 16MHz,fui_i = 1时,延时时间约为2us
  77.   */
  78. void Delay_2us(unsigned int fui_i)
  79. {
  80.         while(fui_i--);       
  81. }
复制代码
代码,直接覆盖!

使用特权

评论回复
 楼主 | 2020-3-25 20:06 | 显示全部楼层 | 奖励家园币

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表