打印

我的adc0816怎么采集不到数据啊,大家帮看看好吗?

[复制链接]
1844|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjchen|  楼主 | 2007-4-18 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是将adc0816采集的数据,经过8251扩展的串口传送到电脑显示出来,(其中8251的程序绝对正确)但是16通道采集的结果竟然一样
以下是我的程序,在程序中我采集了16个通道的数据,现在我传送进电脑的是0通道.
#define _TEST_C_
#include "reg52.h"
#include "stdlib.h"
#include "absacc.h"
#include "intrins.h"
#include "test.h"
#include "math.h"
#define uchar unsigned char
#define uint  unsigned int
#define COM8251 XBYTE[0x8601]
#define DAT8251 XBYTE[0x8600]

#define IN0   XBYTE[0x8000]
uchar  data data_temp[6]={0x52,0x53,0x54,0x55,0x00,0x58};
uchar   temp[6]={52,0x53,0x54,0x55,0x00,0x58};
uchar k;  
 uchar data a;
static uchar idata ad[16];

void  initmcu(void);
void  wait(uchar p,q);
void  init8251();

void  ad0816(uchar idata *x);

void Trans8251(void)  interrupt 1 using 1
{
       TH0  = 0XFF;
       TL0  = 0XFF;
       ad0816(ad);//在8251中断中采集16通道数据
         for(a=0x5A;a>0x30;a--)
    {
          while((COM8251&0x01)==0);
        {
              DAT8251=ad[0];//把0通道值传入电脑中
        }
    
    }
      
    for(k=0;k<6;k++)//注意在串口调试助手中一定要赋值,否则这里的程序将不会运行。
    {
          while((COM8251&0x02)==0);
        {
            temp[k]=DAT8251;//串口调试助手不能写成0x54样式,否则收不到 
        }
        
    }
    
     
}
void main(void) 
{  
    
    EA = 0;
    initmcu();
    EA = 1;
    init8251();
    
    //ad0816(ad);
  
}

void  init8251()
{
    //wait(11,82);//8251工作速度慢,每送一个控制字,等待一会儿延时2ms
    COM8251 = 0x00;
    DAT8251 = 0x00;
    DAT8251 = 0x00;
    COM8251 = 0x40;//以上为8251复位部分
    wait(11,82);
    COM8251 = 0x4e;//9600baud,1停止位,无校验,8位数据,X16
    wait(11,82);
    COM8251 = 0x35;  
    wait(11,82);
}

void  initmcu(void)
{
     TMOD = 0x06;     //9600波特11.0592MHz,方式2
     TL0  = 0XFF;    TH0 = 0XFF;    
     IP  = 0x02; ET0 = 1;TR0 = 1;
}


void  ad0816(uchar idata *x)
{
   uchar i;
   uchar xdata *ad_adr;
   ad_adr=&IN0;
   for(i=0;i<16;i++)
   {
     *ad_adr=0;           //启动转换从0通道开始
      _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
      _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
      x=*ad_adr;
      ad_adr++;
   }
}

void  wait(uchar p,q)
{
   uchar  i,j;                //(2*j+3)*i+4
   for (i=p;i>0;i--)
      for (j=q;j>0;j--);
}

相关帖子

沙发
ccjchen|  楼主 | 2007-4-19 11:05 | 只看该作者

现在能采集了,不过不能实时显示啊!

当我改变输入的模拟信号时(0到5伏的电压),输出对应的值维持原来的转换值一段时间后,才变为当前的采集的值,不知道是采集频率太快呢,还是怎么回事,我的adc0816时钟信号为:921.4KHz,不知到这个频率怎么样,大虾们帮指点一下.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

粉丝