AD转换问题

[复制链接]
3424|22
 楼主| zyf部长 发表于 2013-4-9 19:18 | 显示全部楼层 |阅读模式
在AD转换时没出现问题,后来要求加个串口,于是我加上了串口程序,一仿真,发现AD转换部分只转换一次便不动了,需要重新开始仿真才会出现第二次结果
kangzj 发表于 2013-4-9 19:19 | 显示全部楼层
串口部分有问题
houcs 发表于 2013-4-9 19:21 | 显示全部楼层
把串口部分程序屏蔽掉试试
 楼主| zyf部长 发表于 2013-4-9 19:21 | 显示全部楼层
试了,再仿真结果就是循环转换了,不知道怎么回事
liuzaiy 发表于 2013-4-9 19:21 | 显示全部楼层
以前呢?把你代码贴上来看看
liuzaiy 发表于 2013-4-9 19:21 | 显示全部楼层
以前做的时候也是这样,只不过那时不需要循环多次
yinxiangh 发表于 2013-4-9 19:22 | 显示全部楼层
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar i;

uchar disbuf[]={'0','0','0',0x00};
sbit rs=P2^0;
sbit en=P2^1;
sbit rw=P2^2;
sbit OE=P2^3;
sbit EOC=P2^4;
sbit ST=P2^5;
sbit CLK=P2^6;

void delay(uint z)
{
     uint x,y;
         for(x=z;x>0;x--)
                 for(y=110;y>0;y--);
}

void command(uchar com)
{
         rs=0;
         delay(5);
         P1=com;
         en=1;
         delay(5);
         en=0;
}

void figure(uchar figure)
{
         rs=1;
         delay(5);
         P1=figure;
         en=1;
         delay(5);
         en=0;
}

void write_first(uchar *s)
{
         command(0x80);
         while(*s)
         {
                 figure(*s);
                 s++;
                 delay(20);
         }
}

void write_second(uchar x)
{
          command(0xc0);
          disbuf[0]=x/100+0x30;
          disbuf[1]=x%100/10+0x30;
          disbuf[2]=x%10+0x30;
          for(i=0;i<3;i++)
          {
                  figure(disbuf);
                  delay(5);
          }
}

void init()
{        
         rw=0;
         TMOD=0x22;
         SCON=0X50;
         PCON=0;
         TH1=TL1=0XFD;        
           TH0=(256-4)/256;
         TL0=(256-4)%256;                                                   
         command(0x38);
         command(0x0c);
         command(0x06);
         command(0x80);
}

void main()
{
          uchar temp,i;
          uchar *p;         
         init();
          p="ADconvert result";;
          write_first(p);
          EA=1;
          ET0=1;
          TR0=1;
          TR1=1;
          while(1)
          {         
                 ST=0;ST=1;ST=0;
                  delay(5);
                  while(EOC==0);  
                  OE=1;
                  temp=P0;  
                  write_second(temp);  
                  OE=0;
                  i=0;
                  while(disbuf!=0x00)
                  {
                         SBUF=disbuf;
                         while(TI==0);
                         TI=0;
                         i++;
                         delay(5);
                  }
                  while(RI==0);
                  RI=0;
                  while(TI==0);
                  TI=0;
         }
}

void timer0() interrupt 1
{
       CLK=~CLK;
}
pangb 发表于 2013-4-9 19:23 | 显示全部楼层
pangb 发表于 2013-4-9 19:24 | 显示全部楼层
AD转换部分大致不会有错,只有看串口部分了
 楼主| zyf部长 发表于 2013-4-9 19:25 | 显示全部楼层
可能有些长,不知道可能是哪里的问题
chenjunt 发表于 2013-4-9 19:26 | 显示全部楼层
可以分部分来调试吗
ousj 发表于 2013-4-9 19:27 | 显示全部楼层
你下载些现成的程序参考下啊
morrisk 发表于 2013-4-9 19:28 | 显示全部楼层
.
.
.
while(RI==0);
RI=0;
while(TI==0);
TI=0;
---------
最大的问题在这里。
小小猫咪 发表于 2013-4-9 19:28 | 显示全部楼层
同意楼上的, 应该删除掉这部分, 否则程序会听在那里
kangzj 发表于 2013-4-9 19:30 | 显示全部楼层
while(RI==0);
                  RI=0;
                  while(TI==0);
                  TI=0;
以后要少些这样的语句,编译器不会明白你的意思
kangzj 发表于 2013-4-9 19:30 | 显示全部楼层
它会一直在那里循环,做无用功!
 楼主| zyf部长 发表于 2013-4-9 19:31 | 显示全部楼层
多谢大家
 楼主| zyf部长 发表于 2013-4-9 19:31 | 显示全部楼层
豁然开朗啊~~~
liqingmcu 发表于 2013-4-10 10:22 | 显示全部楼层
while循环真的是,我也碰到过,后来我都不敢用了!
aixiaodiao 发表于 2013-4-10 10:46 | 显示全部楼层
学习了、、
您需要登录后才可以回帖 登录 | 注册

本版积分规则

694

主题

7102

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部