irpas技术客

ADC0808确定地址及查询方式示例_煤炭的奇妙漂流_adc0808代码

大大的周 5623

地址高8位是P2口,0x7F 地址低8位是P0口,0xF8 因为P2.7控制读写端口WR、RD,0的时候选中芯片,因此必须P2.7必须是0, 因为P0.0、P0.1、P0.2连接的是ADC0809的地址端口ADDA、ADDB、ADDC,当译码选中IN0通道的时候是000 而其他引脚无用,默认是1,因此结果就是 P2 P0=0 111 1111 1111 1 000(0x7FF8)

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

查询方式多了一个译码器。

3.2.2、代码 #include <reg52.h> #include <absacc.h> #define uchar unsigned char #define uint unsigned int uchar data ADCDat[8] _at_ 0x30; uchar i = 0; uint ADC = 0x7ff8; //定义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 、效果图

4.多路扫描 void main(){ //主函数 IT1=1;//INT1边沿触发 IP=0x04;//INT1高优先级 EA=1;//CPU开中 while(1){ i=0;//无限循环(A-D并显示),置A-D通道序号0 XBYTE[0x7ff8+i]=i;//启动通道0 EX=1;//INT1开中 while(EX1!=0);//等待8通道A-D结束 for(i=0;i<8;i++) disp(i);//8通道循环显示} void int1() interrupt 2(//INT1中断函数 a[i]=XBYTE[0x7ff8+i];//读A-D转换值,并存入数组a i++;//指向下一A-D通道 if(i==8) EX1=0;//若8路通道A-D完成,INT1禁中 XBYTE[0x7ff8+i]=i;//8路通道A-D未完,启动下一通道A-D 5.结束

那些我难以启齿的,不作声响的,暗自消化的各种情绪,才是我真正的生活。 ??? – 德卡先生

本文参考链接:https://blog.csdn.net/weixin_45488643/article/details/107093201


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #adc0808代码 #P00 #111 #1111 #1