[原创]AD转化并串行输出的问题

xinqrs   2007-2-2 16:16 楼主
最近做一个AD转化并且串行传输到PC的设备
   使用C51编写了下边的程序
   不知道为什么,显示出来的是不正常的结果。

#include
#include

unsigned char xdata *ADC;       //定义ADC0809端口指针
unsigned char data  *ADCdata;   //定义ADC0809数据缓冲器指针
unsigned char i;                //定义8路通道
unsigned char tmp;

void main(void)
{
  unsigned int a;   //等待时间变量

  /* 进行AD转换 */
  ADC=0x7fff;      //定义ADC0809
  ADCdata=0x70;    //定义数据缓冲器地址

  for(i=0;i<8;i++)
  {
       *ADC=i;           //启动ADC0809
       for(a=0; a<50000; a++); //延时一段时间

       tmp=*ADC;       //读取A/D转换结果
       *ADCdata=tmp;   //结果值存储到数据缓冲器
       ADCdata++;      //数据缓冲器指针地址加1

       for(a=0; a<50000; a++); //延时一段时间
   }


  /* 进行串口传输 */
  SCON=0x50; //串口方式1,允许接受
  TMOD=0x20; //定时器1定时方式2
  TCON=0x40;//设定时器1开始计数
  TH1=0xE6;//12MHZ1200波特率
  TL1=0xE6;
  TI=1;
  TR1=1;//启动定时器

  ADCdata=0x70;    //定义数据缓冲器地址
  while(1)
     {
     
     for(a=0; a<50000; a++); //延时一段时间
     for(a=0; a<50000; a++); //延时一段时间

     printf("各个通道数据如下所示:\n");
     
      for(i=0;i<8;i++)
        {
       printf("%d\n",*(ADCdata+i));
          }
     //显示通道的数据
     }
}

回复评论 (3)

问题也有  原创

第一次
点赞  2007-2-2 16:26
unsigned char xdata *ADC;       //定义ADC0809端口指针
unsigned char data  *ADCdata;   //定义ADC0809数据缓冲器指针

  ADC=0x7fff;      //定义ADC0809
  ADCdata=0x70;    //定义数据缓冲器地址
----------------------------------------------------------------
第一:我从来没这样用过指针,这样的用法会降低代码的可移植性...这样用我也不知道会不会出问题

----------------------------------------------------------------
       *ADC=i;           //启动ADC0809
       for(a=0; a<50000; a++); //延时一段时间

       tmp=*ADC;       //读取A/D转换结果

第二:这样延时来做转化结果很不可靠.
----------------------------------------------------------------
其它的问题再看看
点赞  2007-2-2 19:45
printf("%d ",a);
记得这个打印变量最好是a是int、unsigned int的,如果直接用char,就会产生部分乱码。
改为:printf("%d\n",(unsigned int)(*(ADCdata+i)));
试试
点赞  2007-2-3 11:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复