[其它应用] 中颖AD操作

[复制链接]
21838|10
 楼主| xiaoqi000 发表于 2021-6-22 23:19 | 显示全部楼层 |阅读模式

  1. #define                ADC_DIS                0
  2. #define                ADC_ENB                1


  3. //ADC通道号定义
  4. #define                ADC_Chanel0                        (unsigned char)(0x00<<1)
  5. #define                ADC_Chanel1                        (unsigned char)(0x01<<1)
  6. #define                ADC_Chanel2                        (unsigned char)(0x02<<1)
  7. #define                ADC_Chanel3                        (unsigned char)(0x03<<1)
  8. #define                ADC_Chanel4                        (unsigned char)(0x04<<1)
  9. #define                ADC_Chanel5                        (unsigned char)(0x05<<1)
  10. #define                ADC_Chanel6                        (unsigned char)(0x06<<1)
  11. #define                ADC_Chanel7                        (unsigned char)(0x07<<1)

  12. //*************************************
  13. // 函数名称:Init_AD
  14. // 函数功能:对AD初始化,开启或关闭ADC电路
  15. // 入口参数:ADC电路使能参数
  16. // 出口参数:无
  17. /***************************************/
  18. void Init_AD(uint8 Mode)
  19. {
  20. //     0  1  2  3  4  5   6   7 对应转换时钟为
  21. //Fsys/2 /4 /6 /8 /12 /16 /24 /32
  22.         Bank0;
  23.         if(Mode == ADC_ENB)
  24.         {
  25.                 ADCON = 0X80 ;         //打开ADC模块
  26.                 ADT = 0 ;
  27.                 ADT |= (2<<5) ; //Fsys/6 转换时钟
  28.                 ADT |= 5 ; //采样时间设置 0-15
  29.         }
  30.         else
  31.         {
  32.                 ADCON &= ~0x80 ; //关闭ADC模块
  33.         }       

  34. }


  35. //*************************************
  36. // 函数名称:AdcSwitch
  37. // 函数功能: 在单通道模式下转换某一通道的AD值
  38. //                                         在(扫描模式下)连续转化1-Chanel的

  39. AD值
  40. // 入口参数:要转换的AD通道号
  41. // 出口参数:无
  42. /***************************************/
  43. void AdcSwitch(uint8 Chanel)
  44. {       
  45.         uint8 i = 0 ;

  46.         for(i=20;i>0;i--) ;
  47.         Bank0; ;
  48. //        ADCON = 0X80 ;         //打开ADC模块
  49.         ADCON = (ADCON & ~(7<<1)) | Chanel ; //选择通道
  50.         ADCON |= 0x01 ; //开始转换AD
  51.         while(ADCON & 0x01); //等待转换结束

  52.         return ;
  53. }

  54. //*************************************
  55. // 函数名称:INIT_AD
  56. // 函数功能: AD初始化
  57. // 入口参数:要转换的AD通道号
  58. // 出口参数:无
  59. /***************************************/

  60. void INIT_AD(void)
  61. {
  62.         Init_AD(ADC_ENB) ;
  63.         ADCH = (SETB0) ;        //P4.1作为AD输入
  64. }

  65. //*************************************
  66. // 函数名称:ReadAD
  67. // 函数功能: 读AD
  68. // 入口参数:要转换的AD通道号
  69. // 出口参数:无
  70. /***************************************/
  71. uint16 ReadAD(void)
  72. {
  73.         AdcSwitch(ADC_Chanel0) ;//选择通道0 并进行AD转换
  74.         return (uint16)(ADDH<<8+ADDL);//返回AD值
  75.        
  76. }


tpgf 发表于 2024-6-4 16:42 | 显示全部楼层
ad采集的不同模式有什么具体的区别吗
renzheshengui 发表于 2024-6-4 17:17 | 显示全部楼层
在什么情况下用什么模式的采样呢
keaibukelian 发表于 2024-6-4 18:01 | 显示全部楼层
示例代码是使用的单通道采样的模式?
heimaojingzhang 发表于 2024-6-4 18:33 | 显示全部楼层
如果采集的信号的频率是变化的 这个如何处理呢
guanjiaer 发表于 2024-6-4 19:05 | 显示全部楼层
程序操作的ad是多少位的啊
paotangsan 发表于 2024-6-5 08:01 | 显示全部楼层
使用的是中断模式还是等待模式进行采集呢
Henryko 发表于 2024-6-27 15:46 | 显示全部楼层
等待模式比较占用cpu资源吧
LEDyyds 发表于 2024-6-27 15:47 | 显示全部楼层
写的有点简单了
药无尘 发表于 2024-6-28 13:40 | 显示全部楼层
代码看起来很简洁
狄克爱老虎油 发表于 2024-7-22 13:42 | 显示全部楼层
能实现功能就是好代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

821

帖子

0

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