71

帖子

0

TA的资源

一粒金砂(初级)

41
 
谢谢大家给我这么多好的建议。我测试的时候发现有时PC机接收到的数据远远多于我发送到PC机上的数据。我想问一下,PC机接收完单片机发来的数据,串口里还有数据吗?如果还让PC机接收,应该接收到什么?是为0的数据还是随机的数据?

回复

75

帖子

0

TA的资源

一粒金砂(初级)

42
 
外部中断的代码如下:
/*按键中断程序*/
void Int0() interrupt 0
{
  Uint i;
  Uchar Ptem1;
  Uchar Ptem2;
  EX0=0;                                  //禁止外部0中断
  Ptem1=P1;                               //读取端口的地址是否先给它全部置1
  Ptem1=Ptem1&0x3c;                       //00111100  荧光仪中这种方式判别
  for(i=0;i<1250;i++);                    //6M延时越10ms去抖
  Ptem2=P1;
  Ptem2=Ptem2&0x3c;                       
  if(Ptem1!=Ptem2)
    {EX0=1;
     return;
    }

if(Ptem1==0x38)                        //探头选择按键: p1.2  pin3
   {setinput();
    return;
   }  
if(Ptem1==0x34)                        //p1.3:pin4,设置刷新时间按键:5秒或者一分钟
   {settime();
    return;
   }  
if(Ptem1==0x2c)                        //测量按键:   p1.4=0   pin5  
   { measure();   
     return;  
   }
if(Ptem1==0x1c)                        //重复显示按键: p1.5  pin6
   {displaydata();
    EX0=1;
    return;
   }  
  else
   {EX0=1;                              //允许外部0中断  在测量完毕再允许中断
    return;
   }
}
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

43
 
同意23楼
在中断程序中把所有的延时全部去掉。
中断程序应该越短越好,避免接收没有完下一数又到了。
楼主这个程序的确很乱!还要开按键中断等.
实验时也不能两个数一样,0X41也好一点.
while(!TI);    //等待数据发送完毕
这局话更差
清理思路,重新写一个.出错可以解决,思路不改问题更大.
中断程序是用于快速处理,不是解决其他问题的.
  Uchar tmp;
  Uchar i;
  Uchar SendN;

void serial() interrupt 4
{

if(RI){
     RI=0;                                    //清除接收中断标志
     tmp=SBUF;         
     if(tmp==0x24)                          //判断是否为call
          {     
        SBUF=0x24;                            //为call则回复应答信号
            FlaMeasEnd=0;                      //发送完数据,清除测量完毕标志
        return;
          }
     else if((tmp==0x25)&&(FlaMeasEnd==1))    //判断是否为发送数据请求标志及是否本次测量结束,如果都符合则发送数据
          {        
    /*传送计数值*/
        SendN=0;
        SBUF=buf[SendN];
        SendN++;
            FlaMeasEnd=1;
        }
    }
else {/*ti=1)
     TI=0;
     if(FlaMeasEnd)
        if(SendN<16)
                {
                SBUF=buf[SendN];
                SendN++;
                }
        else FlaMeasEnd=0;
     }

}
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

44
 
基本上是波特率问题,发0x55,用示波器看波形。。。

引用 40 楼 cunllp 的回复:
谢谢大家给我这么多好的建议。我测试的时候发现有时PC机接收到的数据远远多于我发送到PC机上的数据。我想问一下,PC机接收完单片机发来的数据,串口里还有数据吗?如果还让PC机接收,应该接收到什么?是为0的数据还是随机的数据?
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

45
 
自己发,自己收,看看。比如你一直发一个固定的数,在中断接收,如果不是这个数了,那就出错了,跳出。把rxd和txd短接。
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

46
 
我把发送那部分改成主动发送了,不在中断里边,结果错误就没有了。大家的每个建议都让我受益匪浅,真的很感动!非常感谢大家对我的帮助!谢谢!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

47
 
引用 24 楼 vc8fans 的回复:
你用屏蔽线没有,TXD,RXD,GND 三根线要用有金属屏蔽层线,抗干扰...

高手啊,这个帖子我收藏
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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