基于51单片机的adc0832程序编写的学习

adc0832程序编写


前言

基于C51单片机项目的传感器数据采集,由于传感器是模拟输出,单片机接收传感器需要将模拟信号转换为数字信号才能读取数据,所以需要adc0832模数转换器的程序编写!


提示:以下是本篇文章正文内容,下面案例可供参考

一、ADC0832是什么?

ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求

二、执行代码

代码如下:

unsigned char Adc0832(unsigned char channel)     //ADת»»£¬·µ»Ø½á¹û
{
    uchar i=0;
    uchar j;
    uint dat=0;
    uchar ndat=0;

    if(channel==0)channel=2;
    if(channel==1)channel=3;
    ADDI=1;
    _nop_();
    _nop_();
    ADCS=0;//À­µÍCS¶Ë
    _nop_();
    _nop_();
    ADCLK=1;//À­¸ßCLK¶Ë
    _nop_();
    _nop_();
    ADCLK=0;//À­µÍCLK¶Ë,ÐγÉϽµÑØ1
    _nop_();
    _nop_();
    ADCLK=1;//À­¸ßCLK¶Ë
    ADDI=channel&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//À­µÍCLK¶Ë,ÐγÉϽµÑØ2
    _nop_();
    _nop_();
    ADCLK=1;//À­¸ßCLK¶Ë
    ADDI=(channel>>1)&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//À­µÍCLK¶Ë,ÐγÉϽµÑØ3
    ADDI=1;//¿ØÖÆÃüÁî½áÊø 
    _nop_();
    _nop_();
    dat=0;
    for(i=0;i<8;i++)
    {
        dat|=ADDO;//ÊÕÊý¾Ý
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//ÐγÉÒ»´ÎʱÖÓÂö³å
        _nop_();
        _nop_();
        dat<<=1;
//        if(i==7)dat|=ADDO;
    }  
    for(i=0;i<8;i++)
    {
        j=0;
        j=j|ADDO;//ÊÕÊý¾Ý
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//ÐγÉÒ»´ÎʱÖÓÂö³å
        _nop_();
        _nop_();
        j=j<<7;
        ndat=ndat|j;
        if(i<7)ndat>>=1;
    }
    ADCS=1;//À­µÍCS¶Ë
    ADCLK=0;//À­µÍCLK¶Ë
    ADDO=1;//À­¸ßÊý¾Ý¶Ë,»Øµ½³õʼ״̬
    dat<<=8;
    dat|=ndat;
    return(dat);            //return ad k
}

总结

adc0832有两个转换通道,可以同时使用,在读取数据之前需要软件拉高拉低两三次时钟线,然后一位一位读取数据,并保存到变量dat中。

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,以下是基于51单片机ADC0832的采样程序示例: 首先,需要设置ADC0832的引脚连接: ``` sbit ADC_CS = P1^0; // CS引脚连接到P1.0 sbit ADC_CLK = P1^1; // CLK引脚连接到P1.1 sbit ADC_DI = P1^2; // DI引脚连接到P1.2 sbit ADC_DO = P1^3; // DO引脚连接到P1.3 ``` 然后,需要进行初始化操作: ``` void ADC_Init() { ADC_CS = 1; // 初始化CS引脚为高电平 ADC_CLK = 0; // 初始化CLK引脚为低电平 ADC_DI = 0; // 初始化DI引脚为低电平 } ``` 接下来,可以编写采样函数,示例代码如下: ``` unsigned char ADC_Read(unsigned char channel) { unsigned char value; ADC_CS = 0; // 使能ADC0832 ADC_CLK = 0; // 将CLK置为低电平 ADC_DI = 1; // 向ADC0832发送起始位 ADC_CLK = 1; ADC_DI = 1; // 向ADC0832发送单端输入、通道号 ADC_CLK = 0; ADC_DI = channel; ADC_CLK = 1; ADC_DI = 0; // 向ADC0832发送无效位 ADC_CLK = 0; ADC_DI = 0; ADC_CLK = 1; value = 0; for (int i = 0; i < 8; i++) // 读取8位转换结果 { ADC_CLK = 0; ADC_DO = 1; ADC_CLK = 1; value = (value << 1) | ADC_DO; } ADC_CS = 1; // 禁止ADC0832 return value; } ``` 其中,ADC_Read函数接收一个参数channel,表示要采集的通道,可以是0~7之间的整数。采集过程中,首先向ADC0832发送起始位,然后发送单端输入、通道号和无效位,最后读取8位转换结果。采集完成后,需要将CS引脚拉高,表示采样结束。 调用ADC_Read函数即可进行采样: ``` unsigned char channel = 0; // 采集0号通道 unsigned char value = ADC_Read(channel); // 进行采样 ``` 这样就完成了ADC0832的采样程序编写。需要注意的是,在实际使用中,需要根据参考电压和分辨率等参数进行相应的配置,以保证采集的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值