对于51单片机的串口:从逻辑上来说,SBUF独有一个,它既表示发送寄存器,又表示接管寄存器,具有同一个单元地址99H。但在物理构造上,则有两个完全独立的SBUF,一个是发送缓冲寄存器SBUF,另一个相对应的就是接管缓冲寄存器SBUF。假如CPU写SBUF,数据就会被送入发送寄存器准备发送;假如CPU读SBUF,则读入的数据一定来自接管缓冲器。即CPU对SBUF的读写,其实是分别访问上述两个不同的寄存器。 a = SBUF; SBUF = a;也就是说:51单片机的sbuf寄存器是以字节为单位进行接管和发送的,一次只能接管一个字节。
我们整个程序的逻辑就是:
51单片机端每收到一个字节就发送一个字节到电脑。也就是数据全部原样返回。
电脑端是直接调用API进行底层的字节数组写入,先写入一堆字符串。然后延时500ms,然后再从串口中读取单片机返回的数据。我的猜想是电脑的串口也和51单片机的串口应该类似,有专门接管的寄存器或者其它存储格式,然后有个缓冲的字节数组进行字节缓冲。电脑直接从缓冲数组读取过来即可。
然后先来看51单片机端的代码:
#include
#define uchar unsigned char
#define uint unsigned int
uchar num;
void UART_init()
{
TMOD = 0x20; //T1工作模式2 8位自动重装
TH1 = 0xfd;
TL1 = 0xfd; //比特率9600
TR1 = 1;//启动T1定时器
SM0 = 0;
SM1 = 1; //串口工作方式1 10位异步
REN = 1;//串口允许接收
EA = 1;/