89C51使用ADC0808模数转换 您所在的位置:网站首页 单片机ad转换实验程序 89C51使用ADC0808模数转换

89C51使用ADC0808模数转换

2024-07-16 01:46| 来源: 网络整理| 查看: 265

89C51使用ADC0808模数转换 1、基本要求简介:1.1、采用中断方式,利用ADC0808实现8路模拟输入信号依次进行A/D转换。1.2 、采用查询方式,利用ADC0808实现8路模拟输入信号依次进行A/D转换。 2、ADC0808简介3、中断/查询方式3.1 、采用中断方式3.1.2、电路原理图3.1.3、代码3.1.4 、效果图 3.2、 采用查询方式3.2.1、电路原理图3.2.2、代码3.2.3 、效果图

1、基本要求简介: 1.1、采用中断方式,利用ADC0808实现8路模拟输入信号依次进行A/D转换。

  要求:采用线选法规定其端口地址,用单片机的P2.7引脚作为片选信号,因此端口地址为7FFFH。片选信号和WR信号一起经或非门产生ADC0808的启动信号START和地址锁存信号ALE;片选信号和RD一起经或非门产生ADC0808输出允许信号OE。EOC信号经反相后接到8051的INT1引脚,用于产生中断请求信号。ADC0808芯片的3位模拟量输入通道地址码输入端A、B、C分别接到8051的P0.0、P0.1、P0.2。8路输入信号的转换结果存储在内部数据存储器首地址为30H开始的单元内,并将第0路转换结果送到P1口显示。

1.2 、采用查询方式,利用ADC0808实现8路模拟输入信号依次进行A/D转换。

  要求:8051单片机P2.7引脚作为片选信号,ADC0808芯片3位模拟量输入通道地址码输入端A、B、C分别接8051最低3位地址线,8个通道地址为7F00H~7F07H。需要分别对这8个地址进行写操作来启动A/D转换。ADC0808 EOC信号接8051的P3.3引脚,通过查询P3.3引脚电平状态来判断A/D转换是否完成。

2、ADC0808简介

  ADC0808 是含8 位A/D 转换器、8 路多路开关,以及与微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。ADC0808的精度为 1/2LSB。在AD 转换器内部有一个高阻抗斩波稳定比较器,一个带模拟开关树组的256 电阻分压器,以及一个逐次通近型寄存器。8 路的模拟开关的通断由地址锁存器和译码器控制,可以在8 个通道中任意访问一个单边的模拟信号。 ADC0808芯片有28条引脚,采用双列直插式封装,各引脚功能如下:

1~5和26~28(IN0~IN7):8路模拟量输入端。   8、14、15和17~21:8位数字量输出端。   22(ALE):地址锁存允许信号,输入,高电平有效。   6(START): A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。   7(EOC): A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。   9(OE):数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。   10(CLK):时钟脉冲输入端。要求时钟频率不高于640KHZ。   12(VREF(+))和16(VREF(-)):参考电压输入端   11(Vcc):主电源输入端。   13(GND):地。   23~25(ADDA、ADDB、ADDC):3位地址输入线,用于选通8路模拟输入中的一路

在这里插入图片描述 来源百度百科。

3、中断/查询方式 3.1 、采用中断方式 3.1.2、电路原理图

在这里插入图片描述

3.1.3、代码 #include #include #define uchar unsigned char #define ADC 0x7fff //定义ADC0808端口地址 uchar data ADCDat[8] _at_ 0x30; uchar i = 0; //主函数 main() { EX1 = 1;IT1 = 1;EA = 1; XBYTE[ADC] = i; //启动ADC第0通道 while(1) { P1 = ADCDat[0];//0通道转换结果送P1显示 } } //中断服务 int1() interrupt 2 using 1 { ADCDat[i] = XBYTE[ADC]; //读取ADC转换结果 i++; XBYTE[ADC] = i; if(i==8) { i = 0; XBYTE[ADC] = i; //重新启动ADC第0通道 } } 3.1.4 、效果图

LED灯显示转换的数据。 在这里插入图片描述

3.2、 采用查询方式 3.2.1、电路原理图

查询方式多了一个译码器。 在这里插入图片描述

3.2.2、代码 #include #include #define uchar unsigned char #define uint unsigned int uchar data ADCDat[8] _at_ 0x30; uchar i = 0; uint ADC = 0x7f00; //定义ADC0808端口地址 sbit EOC = P3^3; //读取ADC结果 void ADC_Read() { ADCDat[i] = XBYTE[ADC] ;//读取ADC0808转换结果 ADC++; i++; XBYTE[ADC] = i; if(i==8) { i = 0; ADC = 0x7f00; XBYTE[ADC] = i; //重启ADC0808 第0通道 } } //主函数 main() { XBYTE[ADC] = 0x00; //启动ADC第0通道 while(1) { if(EOC==1) //根据EOC查询状态 读取ADC { ADC_Read(); } P1 = ADCDat[0]; //0通道数据显示 } } 3.2.3 、效果图

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有