代码如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void serialportinit()
{
TMOD=0x20;//定时计数器1,8位自动装载计数器
SCON=0x70;//串口使用工作模式1,8位UART
PCON|=0x00;
TH1=0xfd;//设置串口波特率为9600bps;
TR1=1;//定时计数器1开启
}
void main()
{
uchar ch,x=1;
serialportinit(); //串口初始化
while(1)
{
if(RI)
{
RI=0;
ch=SBUF;
SBUF=ch;
while(!TI);
TI=0;
SBUF=x;
while(!TI);
TI=0;
}
}
}
我的问题是:
1,为什么从串口工具给MCU发送abc时,从MCU发送回串口工具的数据是 61 01 62 01 63 01; 但是从串口工具中发送的数据变成abcd,为什么从mcu发送回串口工具中的数据还是不变,依然是 61 01 62 01 63 01?
2, 就以上代码中出现的问题,即接收一个字符后连续发送两个字符问题 描述下 串口接收和发送数据的时间顺序是怎样的?即哪些时候是在同一时间操作,关于时间间隔。。。需不需要延时......等会出错的问题。
PS:操作起串口才发现,串口并不是教程,书本上面说得那么简单,要熟练操作、甚至精通串口,真的不简单啊感觉,所以恳请大侠们帮下忙,因为学习过程中这个问题困扰了一周,都没有人说个明白,感谢了。
此帖出自
小平头技术问答
第二个是发送abcd却还是只返回六个字节的数据,原因可能是MCU还没有来得及处理c,但是d已经收到了,发生了接收溢出,导致d这个数据被丢弃,所以还是只返回了6个字节
厉害,太感谢太感谢了。这个问题困惑了好久,网上找了好多资料,几乎要没心机了。
那请问您“MCU还没来得及处理c,但是d已经收到,发生 接收溢出,导致d被丢弃”是什么意思?
我的思考:
1 是已经收到了c,然后对它进行处理期间数据d也收到,但是d被丢弃,请问新收到的d不会将数据c替换吗?
2 那请问您,什么原因会造成这种接收数据时产生的溢出和数据丢弃呢? 有人说,接收数据和发送数据的时间是一样长?那是因为发送两个字节用时 比接收一个字节 用时长造成的吗?
3 最后再麻烦请教您,这种问题,或者对串口编程时避免这类问题的良好习惯是什么呢??
嗯嗯,是的,单片机是STC89C52RC 时钟是11.0592MHz 串口波特率是9600bps ,串口助手是ECOM串口助手V2.8
好的,明天再去分析一下
一周热门 更多>