导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:着急!求高手协助改进:16位A/D芯片与8051的连[阿伦]

 *第8028篇: 初学者:着急!求高手协助改进:16位A/D芯片与8051的连接方法及C51编程。

  
楼 主:阿伦 2003年2月8日23:04
 初学者:着急!求高手协助改进:16位A/D芯片与8051的连接方法及C51编程。
数据采集,选用ADS7825与8051进行数据采集(A/D转换)。
其中ADS7825的一些基本的参数:
16bit A/D,
4通道输入:通过A0(脚19)、A1(脚18)选择通道
8位数据线(D0-D7):脚21(BYTE)为低电位D0-D7输出高位(bit8-bit15MSB),为高电位时
D0-D7输出低位(bit0LSB-bit7)。
R/C!(脚22):置低位转换启动。
BUSY!(脚24):开始转换置低,转换完毕置高。用于探测转换完成。
我将
D0-D7接8051的P0口,
BYTE------->P2.7
A0--------->P1.0
A1--------->P1.1
R/C!------->P1.2
BUSY!------>P1.3
其余引脚均按照手册接好,P2.0-P2.6空着。用C51编程的片段:
#defind resulthigh xdate[0X7fff]   /*高位地址*/
#defind resultlow xdate[0Xffff]    /*高位地址*/
sbit A0=P1^0;
sbit A1=P1^1;
sbit convert=P1^2;
sbit BUSY=P1^3;

unit convertchanl1(void)             /*通道1的采样函数*/
{A0=0;A1=0;                          /*选择通道1*/
A0=A0;                                /*废语句,等待通道建立*/
convert=0;                           /*启动转换*/
convert=1;                          
while(busy==1);                     /*等待转换结束*/
return((uint)(resulthigh<<8)+resultlow);/*返还16位采样值*/
}

我总觉得我这样接引脚造成编程麻烦,不但4个通道要编4个采样函数,并且总觉得整个采样
过程可能不稳定。请各位大虾们帮着看一看,提一提意见。看有没有更好的方法。感激不
尽!

  
2楼:a12345678 2003年2月10日07:47
 只要能用就行.你可以采用多次测试并自动统计的办法判断
  
3楼:Kuang-chingTsui 2003年2月10日11:37
 参考:这样修改一下怎样?
unsigned char code addr_chan[ ]={0xfc,0xfd,0xfe,0xff};  /*四个通道地址*/
unsigned int xdata result[4];                           /*采样值缓冲区*/sbit 
sbit convert=P1^2;
sbit BUSY=P1^3;

void convertchanl1( )
{
int i;
for (i=0;i<4;i++)
   {
    P1=addr_chan[i]&0xff;      /*建立通道地址*/
     ; 
     convert=0;
     convert=1;                          
     while(busy==1);                                
     result[i] = (resulthigh<<8)+resultlow;   /*循环四次,完成四个通道采样*/
     }
}
如果你原来的程序可用的话,这样修改一下怎样?

  
4楼:Kuang-chingTsui 2003年2月10日11:51
 P1=addr_chan[i]&0xff;
P1=addr_chan[i]&0xff;改为:P1=P1&addr_chan[i];
还保留你原来的#define
  
5楼:Kuang-chingTsui 2003年2月10日11:59
 建议增加软件数字滤波
建议增加软件数字滤波函数以改善采样性能,不知你采样对象的物理参数所以没有具体提出数字
滤波方式。
  
6楼:Kuang-chingTsui 2003年2月11日08:49
 直接写P1=addr_chan[i]就行啦
P1=addr_chan[i]&0xff;改为:P1=P1&addr_chan[i];
直接写P1=addr_chan[i]就行啦

>>>>>>对该主题发表你的看法

本主题贴数6,分页: [第1页]


[上一篇主题]:初学者:如何用51汇编将5字节的二进制数转换成ASCII码 

[下一篇主题]:C51编程:诚聘软硬件高手