最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

用Proteus学习51单片机之AD转换

来源:动视网 责编:小OO 时间:2025-10-03 09:47:18
文档

用Proteus学习51单片机之AD转换

用Proteus学习51单片机之AD转换现实中的很多量,都是模拟量,如温度,压力等,单片机要去了解它们,首先就要把这些量进行数字化,AD转换即把模拟量转变为数字量。这次书上介绍的AD芯片为ADC0804,8位并行AD转换芯片。ADC0804的使用,比前面用过的锁存器74LS573难用得多,主要是读写数据都要根据时序图,进行电位的变化,而且芯片的接法也相对麻烦一点。下面记录一下引脚定义:VIN(+),VIN(-):待测量的模拟信号输入DB0~DB7:测量结果输出AGND:模拟信号地DGND:数字
推荐度:
导读用Proteus学习51单片机之AD转换现实中的很多量,都是模拟量,如温度,压力等,单片机要去了解它们,首先就要把这些量进行数字化,AD转换即把模拟量转变为数字量。这次书上介绍的AD芯片为ADC0804,8位并行AD转换芯片。ADC0804的使用,比前面用过的锁存器74LS573难用得多,主要是读写数据都要根据时序图,进行电位的变化,而且芯片的接法也相对麻烦一点。下面记录一下引脚定义:VIN(+),VIN(-):待测量的模拟信号输入DB0~DB7:测量结果输出AGND:模拟信号地DGND:数字
用Proteus学习51单片机之AD转换

现实中的很多量,都是模拟量,如温度,压力等,单片机要去了解它们,首先就要把这些量进行数字化,AD转换即把模拟量转变为数字量。这次书上介绍的AD芯片为ADC0804,8位并行AD转换芯片。ADC0804的使用,比前面用过的锁存器74LS573难用得多,主要是读写数据都要根据时序图,进行电位的变化,而且芯片的接法也相对麻烦一点。下面记录一下引脚定义:

VIN(+),VIN(-):待测量的模拟信号输入

DB0~DB7:测量结果输出

AGND:模拟信号地

DGND:数字信号地

CLK:时钟信号输入端

CLKR:内部时钟发生器的外接电阻端,与CLK端配合可由芯片自身产生时钟脉冲,其频率为1/(1.1RC)

CS:片选信号,低电平有效

WR:写信号输入,低电平启动A/D转换

RD:读信号输入,低电平有效

INTR:A/D转换结束信号,低电平表示本次转换已经完成

VREF/2:参考电平输入,决定量化单位(可以调节该电平,调节最终准确度)

VCC:电源输入

 

关于时钟:如果使用内部时钟的话,官方的建议是用10K电阻和150pF电容,如上图;

模拟地和数字地一般直接接地即可。参考电平在2.5V左右,我试了一下,调到2.55的时候比较准确。关于待测量的模拟信号,如电压,可以向上图一样连接,负直接接地即可。

这里没有用到INTR,即没用中断,而是直接用延时的方法,等待A/D转换完成后,读取DB0~DB7的值。

--------------------------------------------------------------------

读写芯片都要根据芯片的时序来,其写时序如下:

可以看到,首先要使片选信号置低电平,然后写信号下降,上升后,芯片开始A/D转换,转换完成后INTR置低电平通知已经完成。

 

读时序如下:

可以看到,转换完成后,选使片选有效,然后使读引脚下降,再上升,即可读取数据。

由于不管读写,都要使片选有效,即CS脚置低,所以CS脚置一次低就可以了。

 

 

view sourceprint?

1voidmain()
{
    uchar val = 0;
 //允许AD芯片
    ad_cs = 0;
  while(1)
    {
       ad_write = 0;//WR脚置低
        _nop_();
        ad_write = 1;//WR脚置高,完成时序,转换开始
      delay(50);//稍等后转换会完成,由于没用中断,所以采用延时50毫秒
      P1 = 0xff;//先把数据端口全部置1,避免原先数据影响
     ad_read = 0;//RD脚置高
     _nop_();
        val = P1;//把数据存入临时变量
        ad_read = 1;//RD脚置低
     show((val>>4)*0.32 + (val&0x0f)*0.02);//根据换算规则,把数据换算成实际电压
 }       
}

 

 

换算的规则是,8位数据的高四位,相当于每单位0.32V,低四位,相当于每单位0.02V,所以总电压就是:

(val>>4)*0.32 + (val&0x0f)*0.02)

 

这次没有使用中断,直接采用延时读取,实在是有些不爽,有时间的话,把程序改一下,改成使用中断通知的。

文档

用Proteus学习51单片机之AD转换

用Proteus学习51单片机之AD转换现实中的很多量,都是模拟量,如温度,压力等,单片机要去了解它们,首先就要把这些量进行数字化,AD转换即把模拟量转变为数字量。这次书上介绍的AD芯片为ADC0804,8位并行AD转换芯片。ADC0804的使用,比前面用过的锁存器74LS573难用得多,主要是读写数据都要根据时序图,进行电位的变化,而且芯片的接法也相对麻烦一点。下面记录一下引脚定义:VIN(+),VIN(-):待测量的模拟信号输入DB0~DB7:测量结果输出AGND:模拟信号地DGND:数字
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top