打印
[MCU]

发现AD转换部分只转换一次便不动了

[复制链接]
337|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaoxqi|  楼主 | 2020-1-17 22:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在AD转换时没出现问题,后来要求加个串口,于是我加上了串口程序,一仿真,发现AD转换部分只转换一次便不动了

使用特权

评论回复

相关帖子

沙发
heweibig| | 2020-1-17 22:25 | 只看该作者
串口部分有问题

使用特权

评论回复
板凳
jiahy| | 2020-1-17 22:28 | 只看该作者
把串口部分程序屏蔽掉试试

使用特权

评论回复
地板
zhaoxqi|  楼主 | 2020-1-17 22:31 | 只看该作者
试了,再仿真结果就是循环转换了,不知道怎么回事

使用特权

评论回复
5
jiahy| | 2020-1-17 22:34 | 只看该作者
以前呢?把你代码贴上来看看

使用特权

评论回复
6
zhaoxqi|  楼主 | 2020-1-17 22:39 | 只看该作者

以前做的时候也是这样,只不过那时不需要循环多次

使用特权

评论回复
7
zhaoxqi|  楼主 | 2020-1-17 22:43 | 只看该作者

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;
}

使用特权

评论回复
8
heweibig| | 2020-1-17 22:46 | 只看该作者
0809啊

使用特权

评论回复
9
lizye| | 2020-1-17 22:50 | 只看该作者
AD转换部分大致不会有错,只有看串口部分了

使用特权

评论回复
10
zhaoxqi|  楼主 | 2020-1-17 22:53 | 只看该作者
可能有些长,不知道可能是哪里的问题

使用特权

评论回复
11
shimx| | 2020-1-17 22:57 | 只看该作者
可以分部分来调试吗

使用特权

评论回复
12
jiahy| | 2020-1-17 23:00 | 只看该作者
你下载些现成的程序参考下啊

使用特权

评论回复
13
liliang9554| | 2020-1-17 23:03 | 只看该作者

.
.
.
while(RI==0);
RI=0;
while(TI==0);
TI=0;
---------
最大的问题在这里。

使用特权

评论回复
14
午夜粪车| | 2020-1-17 23:07 | 只看该作者
同意楼上的, 应该删除掉这部分, 否则程序会听在那里

使用特权

评论回复
15
huangchui| | 2020-1-17 23:09 | 只看该作者
只要程序运行到那里就停住,不止ADC采一次,串口也不能用

使用特权

评论回复
16
jiajs| | 2020-1-17 23:12 | 只看该作者
应该是串口的标志位未清除   

使用特权

评论回复
17
heweibig| | 2020-1-17 23:16 | 只看该作者
看来是串口中断的影响了。。

使用特权

评论回复
18
lizye| | 2020-1-17 23:19 | 只看该作者


这个就分开进行操作的,先进行AD采集的,然后进行串口发送数据的就可以啦,如此循环的呗。

使用特权

评论回复
19
shimx| | 2020-1-17 23:23 | 只看该作者
进行AD数据采集的时候就关闭串口的通讯功能,相反一样。

使用特权

评论回复
20
jiaxw| | 2020-1-17 23:25 | 只看该作者
嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈

使用特权

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

本版积分规则

808

主题

10636

帖子

4

粉丝