完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #define uchar unsigned char #define IN0 XBYTE[0x7ff8] /*设置AD0809的通道0地址*/ \不明白的地方1 ***it ad_busy = P3^3; /*即EOC状态*/ void ad0809(uchar idata * x) /*采样结果放指针中的A/D采集函数*/ { uchar i; uchar xdata * ad_adr; ad_adr = &IN0; for(i=0;i<8;i++) /*处理8通道*/ { *ad_adr = 0; /*启动转换*/ //不明白的地方2 i = i; /*延时等待EOC变低*/ i = i; while(ad_busy == 0); /*查询等待转换结束*/ x = *ad_adr; /*存转换结果*/ ad_adr++; /*下一通道*/ } } int main(void) { static uchar idata ad[10]; ad0809(ad); /*采样AD0809通道的值*/ return 0; } 问题: 不明白的地方1:为什么IN0的地址是这一个? 不明白的地方2:指针指向的是IN0的地址,*ad_adr指的是IN0这个地址的内容?具体指的是什么?为什 么启动转换可以转化成这种形式?START的启动不是低电平—高电平—低电平吗? 电路图片:
|
|
相关推荐
4个回答
|
|
你要选中0809就要有地址线和读写信号的配合,你看看那个oe端怎么才能选中呢?
|
|
|
|
不明白的地方1:为什么IN0的地址是这一个?
从原理图看,要使0809动作,P2.7必须为0,同时通道地址由P0以写数据的方式在P0.[2:1]送出,所以-WR和P2.7经门电路运算后同时给0809的ALE和START高电平,锁存通道地址,并启动转换; 所以,IN0 不一定非要==0x7FF8;只要bit15(输出到P2.7)为0、bit[2:0](作为数据在P0[2:0]输出)为0,都可以作为ADC通道地址(没有其他设备用其他地址位作为片选时);仅就你提供的这个电路图,0也可以作为IN0的地址; 不明白的地方2:指针指向的是IN0的地址,*ad_adr指的是IN0这个地址的内容?具体指的是什么?为什 么启动转换可以转化成这种形式?START的启动不是低电平—高电平—低电平吗? ‘*ad_adr指的是IN0这个地址的内容’,正确,具体指的是这个地址的数据,写时是通道地址,并且写信号同时会启动转换过程; 后面的为什么请你查阅一下MCS51总线时序、0809时序和基本逻辑门电路,就明白了 |
|
|
|
关于不明白地方二:你的意思是不是当单片机执行语句*ad_adr = 0的时序给了AD0809 启动(START)的一个启动时序? |
|
|
|
是,正确。 并且同时也将通道地址也锁存进了0809 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
479 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
229 浏览 0 评论
334 浏览 0 评论
165 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
496 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11972 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 11:27 , Processed in 0.768674 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号