打印
[其它应用]

中颖AD操作

[复制链接]
21493|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaoqi000|  楼主 | 2021-6-22 23:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#define                ADC_DIS                0
#define                ADC_ENB                1


//ADC通道号定义
#define                ADC_Chanel0                        (unsigned char)(0x00<<1)
#define                ADC_Chanel1                        (unsigned char)(0x01<<1)
#define                ADC_Chanel2                        (unsigned char)(0x02<<1)
#define                ADC_Chanel3                        (unsigned char)(0x03<<1)
#define                ADC_Chanel4                        (unsigned char)(0x04<<1)
#define                ADC_Chanel5                        (unsigned char)(0x05<<1)
#define                ADC_Chanel6                        (unsigned char)(0x06<<1)
#define                ADC_Chanel7                        (unsigned char)(0x07<<1)

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

}


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

AD值
// 入口参数:要转换的AD通道号
// 出口参数:无
/***************************************/
void AdcSwitch(uint8 Chanel)
{       
        uint8 i = 0 ;

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

        return ;
}

//*************************************
// 函数名称:INIT_AD
// 函数功能: AD初始化
// 入口参数:要转换的AD通道号
// 出口参数:无
/***************************************/

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

//*************************************
// 函数名称:ReadAD
// 函数功能: 读AD
// 入口参数:要转换的AD通道号
// 出口参数:无
/***************************************/
uint16 ReadAD(void)
{
        AdcSwitch(ADC_Chanel0) ;//选择通道0 并进行AD转换
        return (uint16)(ADDH<<8+ADDL);//返回AD值
       
}


使用特权

评论回复
沙发
tpgf| | 2024-6-4 16:42 | 只看该作者
ad采集的不同模式有什么具体的区别吗

使用特权

评论回复
板凳
renzheshengui| | 2024-6-4 17:17 | 只看该作者
在什么情况下用什么模式的采样呢

使用特权

评论回复
地板
keaibukelian| | 2024-6-4 18:01 | 只看该作者
示例代码是使用的单通道采样的模式?

使用特权

评论回复
5
heimaojingzhang| | 2024-6-4 18:33 | 只看该作者
如果采集的信号的频率是变化的 这个如何处理呢

使用特权

评论回复
6
guanjiaer| | 2024-6-4 19:05 | 只看该作者
程序操作的ad是多少位的啊

使用特权

评论回复
7
paotangsan| | 2024-6-5 08:01 | 只看该作者
使用的是中断模式还是等待模式进行采集呢

使用特权

评论回复
8
Henryko| | 2024-6-27 15:46 | 只看该作者
等待模式比较占用cpu资源吧

使用特权

评论回复
9
LEDyyds| | 2024-6-27 15:47 | 只看该作者
写的有点简单了

使用特权

评论回复
10
药无尘| | 2024-6-28 13:40 | 只看该作者
代码看起来很简洁

使用特权

评论回复
11
狄克爱老虎油| | 2024-7-22 13:42 | 只看该作者
能实现功能就是好代码

使用特权

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

本版积分规则

50

主题

741

帖子

0

粉丝