51单片机串行口接收数据编程问题

发布网友 发布时间:2022-04-20 04:00

我来回答

5个回答

热心网友 时间:2022-05-31 14:55

51单片机串行口是独立的硬件,对其设置完之后,它就独立工作了。
如果REN=1,它会自动检测RXD,当它收齐了一帧数据,就自动将数据放到(接收)SBUF,然后在RI置一。

CPU的中断系统,如果已经开放了串口中断,CPU就会自动转到0023H去执行程序。

上述过程,都是硬件自动进行的,不需要我们编写程序来控制。

热心网友 时间:2022-05-31 14:55

串口之间是有协议的,有起始位和停止位,中间是数据。当发送方检测到接收方空闲,就会发起数据发送,先有起始位,然后是数据,最好是停止位。接收方在接受数据的时候是一个串入并出的一个寄存器。当最后一个停止位到达时,寄存器输出到SBUF,并置位RI,引起串口中断。这个时候SBUF中就是刚收到的数据。
接收函数一般都是在中断中处理(有些情况也可以在main函数中轮询)

发送数据的时候,促发串口发送的指令是 MOV SBUF,A 也就是说给SBUF赋值即可触发串口发送数据,发送完毕后硬件将TI置位。需要手动清除。
发送函数可以参考以下:
void putc_to_SerialPort(uchar c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}

热心网友 时间:2022-05-31 14:56

能不能发一下你的图片,你采纳那个回答有一点漏洞。那就串口分四种模式,其中有一种是先触发再去处理数据的接受和发送。此时还没有进入寄存器sbuf。你可以看看寄存器版本的c51去具体看看那四种模式工作方式。

热心网友 时间:2022-05-31 14:56

你的问题补充里面说的对,但是存入SBUF是需要有一句代码的,比如:SBUF=i;其中i就是所谓的数据了

热心网友 时间:2022-05-31 14:57

不需要一直检测,只要中断置位了就会进入中断程序,但需要你手动将中断位RI清0。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com