完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
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 = 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端口地址 ***it EOC = P3^3; //读取ADC结果 void ADC_Read() { ADCDat = 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 、效果图 |
|
|
|
只有小组成员才能发言,加入小组>>
4508个成员聚集在这个小组
加入小组3334 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4262 浏览 1 评论
4289 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:37 , Processed in 0.518768 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号