‘壹’ adc0809转换的一些问题(与51单片机配合)
1 、地址是人为定义的,在51单片机中P0口是低位地址8位与数据口8位分时复用,所有连接在地址总线上的器件,都必须有一个地址区间(地址块),例如,RAM 62256需要32Kbyte,0000H--7FFFH,就是一个片选信号。
ad转换器需要一个,经过地址译码器,译码后的“区间”,即储存器的片选信号,译码器可以分成1,2,4,8块----,1就是单一地址,必须译码器;看自己需要选定,选定一块,如果需要,这一块还可以用译码器再次译码,原则上可以到单个地址,ADC0809需要8个地址,用低位地址线A0,A1,A2三根,和上面所述的片选信号线,完成对该器件8路ad转换器的选择,低位地址线可以共用,片选线不能与其它器件共用。
2、外部数据输入到P0口是需要有相应的器件被选择,需要读写信号线控制的,这里用 /RD 读信号,它不是单一发出,它与地址线共同完成对器件的读写操作。
这个例子中,需要选择这个ADC器件(片选),还需要选择由哪一路转换器输出(A0,A1,A2)。
data=P0这条指令和data=P1一样,没有地址输出,没有/RD输出,就是没有选择到需要的器件。
‘贰’ 51单片机程序问题 stc12c5a60s2 的a/d转换问题..
好吧,先声明我也正在学单片机,回答可能不专业,因为AD问题我只接触过一次。以下结论来着STC12的手册。
1.转换的引脚由ADC_CONTG的低3位CHS2、CHS1和CHS0控制,三位二进制能表示0~7八个数,与P1口一一对应。ADC的结构决定了它一次只能转换一个口,但是STC的转换速度达到10万次/秒,依次转换P1.0和P1.1与同时转换差别不大。设置P1.0时,ch=0x00.设置P1.1时,ch=0x01.
2.是按照一个字节读的,直接读ADC_RES的话只能读到数据的高八位。只用8位ADC转换的话,读ADC_RES就可以了。要想得到10位数据必须加上SendData(ADC_LOW2);
3.既然send函数提到了SBUF,那么说明转换结果是通过串口传到电脑上,用STC下载工具的串口调试应该可以看到转换结果。
4.连续读取可以用函数循环或定时器循环来调用转换函数。例子嘛,定时器我还不会用而你给的值定时器中断法。所以我说下函数的方法,大概是这样:
void main{
InitADC();//初始化ADC
while(1){//死循环
adc_isr();//转换函数
delay(xx);//延时一段时间,否则转换太快,数据量太大。
}
}
5.UART是一种通用串行数据总线,在这里是用于与电脑进行串口通信的。
‘叁’ 51单片机有外部数据存储器的时候怎么开始AD转换
movx @dptr,A,开启AD转换会与外部数据存储器发生冲突做兄,那是因为DPTR中的地址没有指向AD转换器的端口地址,或扰行者AD端口地址与外部数据存储器的地址重复了。没有具体电路,真正原因不好确缓胡哗定。
单片机可采用端口模式与AD转换器连接比较好,见下图。
‘肆’ 51 AD转换,用ADC0804,数据接P1.0-1.7,例子要求读取数据前先用P1=0Xff将P1口写1,什么原因为何不写0
51的P1口可输入可输出。
那么哪条指令让它作为输入口,怎么样才能让它作为输入口呢?
每个口上都有一个锁存器,锁住之前写的值。
比如,口上只是接一个上拉电阻,这个口作为输入应该是高电平吧。
那你往口里写一个0,口会输出0,这个口就成了低电平了。此时,你读这个IO口,也会是低电平。
如果不改写为1,锁存器内就一直是0,也就是输出0 ,程序读这个口上的电平也是0。
改写为1后,这个口上的电平才会1,或者说,不会把这个口拉低。
作为输入口时,要事先写1,也可以不用每次都写,只要里面不是0就成。
简单的来说就是:因为单片机的构造(上拉了电阻),需要将P1口写1,使之成为高电平,能够作为输入口。
‘伍’ 请问如何用51单片机生成频率可调的方波请给出方案或者修改我的方案(如下)
P0 口,应该加上上拉电阻。山瞎
AD 转换的结果,应该是:0~255。
使用真实的硬件,结果是多少?
可以在 P2 口,接上八个 LED,当场显示出来看看。
另外,对于这一批数据,你所期望得到的频逗族空率范围,究穗丛竟是多少?
还有,采用软件定时,并不准确。