微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口通信 sbuf的问题

串口通信 sbuf的问题

时间:10-02 整理:3721RD 点击:
今天试了一下串口通信、两个单片机。一个是发送端。产生流水灯。一个是接收端。接受发送端的流水灯信息、然后同步、
但是有问题出现了。
这个是发送代码;每100ms移动一次、同时发送一个信息给接收单片机
#include <reg52.h>
#include <intrins.h>
void sbufint()
{
  EA=1;
  TMOD=0X20;//定时器1;工作方式是2.常数自动转装载8位定时
  TH1=253;
  TL1=253;//初值
  SCON=0x50;//工作方式1,波特率9600bit/s,允许接收
  PCON=0x80;//模式控制
  TR1=1;//启动定时器
}
void Delay100ms()                //@11.0592MHz
{
        unsigned char i, j;
        i = 180;
        j = 73;
        do
        {
                while (--j);
        } while (--i);
}
unsigned char SEND(unsigned char senddat)
{
   SBUF=senddat;
  while(TI==0);
  TI=0;
  return(0);
}
void main()
{
  sbufint();
    P1=0xfe;
    while(1)
    {
      SEND(P1);
      Delay100ms();
      P1=_crol_(P1,1);
      //P1=~P1;
    }
}

这个是接受端代码;每150ms接受一次;
#include "reg52.h"
#include "intrins.h"
void sbufint()
{
  EA=1;
  TMOD=0X20;//定时器1;工作方式是2.常数自动转装载8位定时
  TH1=253;
  TL1=253;//初值
  SCON=0x50;//工作方式1,波特率9600bit/s,允许接收
  PCON=0x80;//模式控制
  TR1=1;//启动定时器
}
void Delay150ms()                //@11.0592MHz
{
        unsigned char i, j, k;
        _nop_();
        _nop_();
        i = 7;
        j = 78;
        k = 167;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

unsigned char rec()
{
  unsigned char recdat;
  recdat=SBUF;
  while(RI==0);
  RI=0;
  return(recdat);
}
void main()
{
    sbufint();
    while(1)
    {
        P1=rec();
        Delay150ms();
    }
}




但是实际上是这样子的。请看gif图

左边的那个是接收端,右边的那个是发送端’100ms流动一次;
但是情况是这样子的。
发送端:还是100ms移动一次。
接受端:流水灯不是100ms。这个可以肯定。,但是竟然没有出现跳变;;也就说。接受端还是流水灯。就是时间间隔比发送端长一点而已、、、
怎么会出现这样的情况呢;;;;;好奇怪的事情呀;;
难道是这样吗?


所以我就是想请教一下大家。
关于sbuf的问题。

1.sbuf里面的容量是8bit吗?
sbuf里面的值是每接受一次的话,是重新擦写一次的吗?比如0ms是dat1;100ms的时候立即吧dat1擦除,由dat2覆盖。200ms的时候dat3覆盖dat2?

还是dat1和dat2在100ms的是偶同时存在,然后200ms的时候dat1,dat2 dat3是一直存在的。?
谢谢。请指教。

接收端你试下用中断来控制,你这样读很难做到同步的。开机有先后,你做不到刚刚好同时开机,除非是程序控制。

主要问题不是说是不是同一个时间启动。而是说。左右两边都是流水灯。随着时间的推移。流水灯本来相差间隔就会越来越大。所以接收端 P1=sbuf就会出现跳位的,但是为什么接收端一直还是流水灯呢?我的问题是这个。我就是觉得。不应该是流水灯的呀,应该会调位的呀。,。

看看然后收藏。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top