ADC0809汇编启动代码困惑

beiguonanjiang 2015-12-01 04:18:14
在ADC0809延时等待方式中,有代码如下
SAM1: MOV R1,#30H
MOV DPTR, #0BFF8H
MOV R7,#08H
LOOP: MOVX @DPTR, A ; 启动AD转换,P2.6=0
MOV R6,#04H
问题1:在以上代码中,AD启动的那行我看不明白,A之前没有被传送过值,怎么就能启动ADC。
问题2:在ADC中,并没有类似于8255中状态控制字那样的寄存器,那么ADC的工作状态,比如EOC,OE,START这些状态信息是保存在哪里,还是直接链接51对应接口,由51直接接收其状态量。

谢谢。



...全文
19840 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
墨了个醉 2015-12-17
  • 打赏
  • 举报
回复
第一个问题,为什么MOVX @DPTR,A 就启动AD转换,很简单,你看你的实验板电路图就知道了,单片机的WR 口跟AD相关的口相连, 只要给DPTR地址任意一个数字,WR就有信号,然后控制AD芯片的逻辑电路,就相当于打开AD了。 (PS)一定要仔细看看试验板的原理图再解读代码。。 至于第二个问题,那些数据存在哪里,其实是一个数电的常识,因为这种器件有类似触发器的内部结构,比如T触发器,有保持跟翻转两个状态,比如结束转换,触发器的输出就被设置为1或0然后就一直保持。 可以看成是存储吧! (PS,只是打个比方,具体的内部原理,还要楼主好好研究一下。看看芯片资料之类的。)
2014anewme 2015-12-14
  • 打赏
  • 举报
回复
引用 2 楼 zhujinqiang 的回复:
根据代码看,ADC0809的三个地址端A、B、C是与地址线的低三位P0.0 0.1 0.2相连 下面2行是有关联的

MOV   DPTR,  #0BFF8H ;高位地址在P2口,所以写地址的时候 BFH==P2.6=0 
;低位地址在P0口,F8H==P0.2 P0.1 P0.0为000,即CBA==000,选择通道0
;......
LOOP:        MOVX   @DPTR, A  ;   A的值可以任意,启动AD转换时,P2.6=0和WR做一下或非,得到1送给START来启动 
您好,我最近也在做ADC0808的实验,关于选通哪一个IN口的语句很是不解。 不知道程序里面的p2.7,p2.6和ADC有什么关系?还有就是,MOV DPTR, #0BFF8H ;低位地址在P0口,F8H==P0.2 P0.1 P0.0,理论上说每一次INC DPTR都会选择不同的IN口,可是我的仿真结果里面出来,ADDA.ADDB,ADDC是由ADC0808的OUT口决定的,我已经纠结两天毫无进展了,大神帮帮忙啊
zhujinqiang 2015-12-09
  • 打赏
  • 举报
回复
根据代码看,ADC0809的三个地址端A、B、C是与地址线的低三位P0.0 0.1 0.2相连 下面2行是有关联的

MOV   DPTR,  #0BFF8H ;高位地址在P2口,所以写地址的时候 BFH==P2.6=0 
;低位地址在P0口,F8H==P0.2 P0.1 P0.0为000,即CBA==000,选择通道0
;......
LOOP:        MOVX   @DPTR, A  ;   A的值可以任意,启动AD转换时,P2.6=0和WR做一下或非,得到1送给START来启动 
zhujinqiang 2015-12-07
  • 打赏
  • 举报
回复
连发了3个帖子啊 问题1: 启动不是由寄存器A的值。ST为转换启动信号。 三、ADC0809应用说明 1、(1). ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。 (2). 初始化时,使ST和OE信号全为低电平。 (3). 送要转换的哪一通道的地址到A,B,C端口上。 (4). 在ST端给出一个至少有100ns宽的正脉冲信号。 (5). 是否转换完毕,我们根据EOC信号来判断。 (6). 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。 2、ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。 CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ, VREF(+),VREF(-)为参考电压输入。(1). 进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,若完毕则把数据通过P0端口读入,经过数据处理之后在数码管上显示。(2). 进行A/D转换之前,要启动转换的方法: ABC=110选择第三通道 ST=0,ST=1,ST=0产生启动转换的正脉冲信号 . 3、ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。 ---问题2:EOC,OE 直接接51对应口,EOC是由51接收其状态;OE是51给0809的。 转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。 (1)定时传送方式 对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。 (2)查询方式 A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。因此可以用查询方式,测试EOC的状态,即可却只转换是否完成,并接着进行数据传送。 (3)中断方式 把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。 不管使用上述那种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以 信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。 不管使用上述那种方式,只要一旦确认转换结束,便可通过指令进行数据传送。所用的指令为MOVX 读指令,例 MOV DPTR , #FE00H MOVX A , @DPTR 该指令在送出有效口地址的同时,发出 有效信号,使0809的输出允许信号OE有 效,从而打开三态门输出,是转换后的数据通过数据总线送入A累加器中。 这里需要说明的是,ADC0809的三个地址端A、B、C可与地址线相连,也可与数据线相连,例如与D0~D2相连。这是启动A/D转换的指令与上述类似,只不过A的内容不能为任意数,而必须和所选输入通道号IN0~IN7相一致。

27,508

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧