Ⅰ ADC0809与51单片机连接,请看下图
这个电路,是《三总线》形式。
P0,又要输出地址低八位,又要输入/输出数据。
P0,忙不过来,需要外接一个 74LS373,锁存住先输出的地址低八位。
这就是 74L373 在那里,所起的作用。
74LS373,输出的低八位地址,只用到了三位,送到了 ADC0809。
对 0809 写入,再启动它,需要的信号,就由单片机和几个门电路完成。
细节,说起来太麻烦。
看书吧,有时序波形。
Ⅱ 8051单片机连接adc0809,采用多少的晶振啊
ADC0809对单片棚伍机晶振频率没有什么要求,或者塌羡,确定晶振频率不需考虑0809。
通常晶振频率选12M,如果用串口收/发数链衫或据,就选11.0592M。
Ⅲ 单片机、ADC0809电压转换的问题。
uint choosechanl()
{
if(S1==0)
{
delay(5);
if(S1==0)
{
while(!S1);
NUM++;
if(NUM==7)
{
NUM=0;
}
}
}
return(NUM); // 放在昌兆这里返回,要不平时没有按键时,是没有返回值的,调用处返回伏迅正的不知道是个什么值。
}
NUM是个全局变量,这个函数都不需要返回,主程序中直接用 NUM替换掉缺悔R,R是个多余的。(精简程序可以考虑下)
中断只是 定时100的话,可以考虑用自动重载模式,8位的定时器,足够了。
Ⅳ ADC0809与单片机相连是,为什么MOVX @DPTR,A就启动A/D转换
51单片机与0809连接时,实际上有两类接法。
一是将0809连接为51的一个外扩存储器。执行MOVX指令时端口时序恰好能够满足0809要求。
启动A/D转换,以及模拟通道实际上分别占用了51的外扩存储器的一个地址。
另一种是利用51端口来模拟0809时序,指令用MOV,SET bit,和CLR bit等。这种接法软件上复杂,但不占用存储地址,如果外扩存储器的话可以采用。
不管哪种接法,只要时序满足,都是可以的。
Ⅳ 单片机外设0809的绝对地址如何确定
0809地址 是根据0809地址译码引脚 (A、B、宴巧C)和输出 信号允许端(OE)的接法确定的。一般A、B、C接单片机的A0、A1、A2三个脚 ,以选通IN0~IN7中的一个通晌誉键道 。OE接P2.0~P2.7的任一脚 ,且低电平有效。假设OE接在虚卖P2.7(即单片机的A15),那么地址就是0111 1111 1111 1000 = 7FF8H 。再假设,OE接在P2.0,则地址为1110 1111 1111 1000 = EFF8H
Ⅵ 关于单片机与模数转换器 A/D0809的问题,在线等
地址的问题主要是和硬件电路的地址译码相关.因此要参照电路设计才能知道地址范围.实际工作中的地址安排需要根据整个系统肢斗的外接设备的数量性质综合考虑.
模拟量给0809后就转换成8位数字量,51读入的就是转换后的数字.参考电压根据系统最大数值留出富裕量,并考虑精度后设置.0.8-3V的输入量就如果特别的要求按5V基准设计就可以.5V对应数字量是255,3V对应的就是153.
电压是3V可能是因为脉冲电压.建议使用示波器检查.如果电平确实不对就可能是因为7404的负载有问题,或者本身有问题.
补充:
如果没有特别的要求按5V基准设计就可以.
5V对应数字量是255,3V对应的历孝磨就是153.
ADC0809是8位A/D芯片,数字量表示最大为16进制#FFH.也就是10进制的255.5V对应的是255数字量.3V就是 255* 3/5. 每个数字量表慎正示的模拟量为5/255V,约0.02V.也就是说精度(最小分辨率)为0.02V
如果想提高精度,可以适当降低基准电压.例如降为3V,精度就可以达到0.0118V.但是超过3V的就没有办法表示了.
Ⅶ 哪个可以详细解释一下。单片机与ad0809的程序问题
#include<reg52.h>
#include <intrins.h>///包含了_nop_()//////
#define VREF 5.0//基准电压///
#define GETLIGHT P2///获取0809数据口为P2口////
//////////////定义0809控制端口
sbit st_ale=P0^0;
sbit oe=P0^1;
sbit eoc=P0^2;
sbit clk=P0^3;
////肢返闹//////////////////////////
unsigned char get_val;//用于单片机获取0809转化数值/////
int t;//中间变量
float light;///中间变量
void adc0809()
{
st_ale=0;///实际上0809的ST脚和ALE脚相连了//////
st_ale=1;///产生转化脉冲//////
st_ale=0;
while(eoc==0);
oe=1;//output enable as ture
get_val=GETLIGHT;
oe=0;//output enable as false
light=((get_val*1.0*VREF)/256)*1000;
t=light;
sentmsg2[0]=t/1000+0x30;
sentmsg2[1]=t%1000/100+0x30;
sentmsg2[2]=t%1000%100/10;
}
main()
{
SCON=0x50;/*方式一*/
TMOD=0x01;/*定时器0工作于方式一*//
TH0=(65536-2)/256;////初始化T0的计数寄存器,2uss溢出申请中断////////
TL0=(65536-2)%256;
st_ale=0;////初始化0809控制端口/////
oe=0;
EA=1;//打开总中断/////
ET0=1;///打开定时器零中断////////
TR0=1;//暂不启动T0////历罩//
while(1)
{
adc0809();////调用函数获取0809转化数值
}
}
void t0(void) interrupt 1///定时世裂器0溢出中断//////
{
TH0=0xff;
TL0=(65536-2)%256;
clk=~clk;
}
Ⅷ 单片机51和adc0809进行模数转换,还有显示(0---255)程序,同时用51产生500kHZ的脉冲给0809,怎么实现
呵呵 为你解答
单片机51和adc0809进行模数转换,如何产生500kHZ的脉冲给0809的实现方法:
adc0809的时钟频率一般都很高,可选用500KHZ,都是靠89s51单片机的ALE地址锁存信号
做为adc0809的时钟,ALE地址锁存信号的频率为89s51单片机振荡频率的1/6,如果单片机
的振荡频率=3MHZ,则ALE地址锁存信号的频率=500KHZ.
如果单片机的振荡频率=6MHZ,则ALE地址锁存信号的频率=1MHZ. 要通过一个2分频器后,将频率变为500KHZ.再做adc0809的时钟使用。
呵呵 靠单片机编程来提供500KHZ时钟信号很难做到。 显示电路就自己设计吧,其它的含返判就没世迅什么难度了。
记着,别忘给俺加分啊。谈改
Ⅸ 单片机扩展一片adc0809芯片,ale作ad时钟,问单片机时钟有何要求
单片机晶振只能用6M,因为0809时钟频率最大为500K,但实际上用1M没问题。ALE为6 分频,即为1M。电压值=4.9/255*(70H)