3541|3

89

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

[原创]AD转化并串行输出的问题 [复制链接]

最近做一个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));
          }
     //显示通道的数据
     }
}

最新回复

printf("%d ",a); 记得这个打印变量最好是a是int、unsigned int的,如果直接用char,就会产生部分乱码。 改为:printf("%d\n",(unsigned int)(*(ADCdata+i))); 试试  详情 回复 发表于 2007-2-3 11:10
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
问题也有  原创

第一次
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
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转换结果

第二:这样延时来做转化结果很不可靠.
----------------------------------------------------------------
其它的问题再看看
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
printf("%d ",a);
记得这个打印变量最好是a是int、unsigned int的,如果直接用char,就会产生部分乱码。
改为:printf("%d\n",(unsigned int)(*(ADCdata+i)));
试试
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表