1,2个单片机全双工通信一定要握手协议吗?我可不可以这样:用主机的定时器定一个较长的时间,时间到了后先往SBUF里赋值发送数据,然后等待接收从机给主机发送的数据;而从机也按照这样的方法,从而使这2个单片机完成不需要握手协议也可以进行全双工通信的目的?但是主机接收到的数据也在SBUF里放着,这样会不会导致发送与接收冲突?
2,单片机发送的数据在SBUF里,接收到的数据放在哪里?我收到数据了,在proteus仿真却发现SBUF里没有数据?
3,在keic51里,
我定义了一个字符数组char data[7]和
data2[0]=0xA5;
data2[1]=0x88;
data2[2]=0xC6 ;
data2[3]=0xF7;
上面4个数据相加溢出结果为0x62,但是下面的几条语句有问题
data2[5]=data2[0]+data2[1]+data2[2]+data2[3];//编译错误
data2[4]=(data2[0])+(data2[1])+(data2[2])+(data2[3]);//可以编译但是结果不是0x62?
data2[4]=0xA5+data2[1]+0xC6+0xF7;结果为0x62
1.你用的是不是51单片机啊?你的双工通信是不是用异步串口实现的啊?
2.如果是异步串口,发送和接收都会有相应的SBUF来储存数据的。
3.你的data2[]有定义吗?
"全双工通信握手协议"
握手和协议是2个概念。
协议是应用层的,它是说双方按一定的格式收发数据。
而握手,通常是流控制的概念,属于链路层(DLL),实现方法分:硬握手(串口的CTS,RTS,DSR,DTR)。
软握手有xon,xoff等。
引用: 引用 1 楼 ymhsss 的回复:
1.你用的是不是51单片机啊?你的双工通信是不是用异步串口实现的啊?
2.如果是异步串口,发送和接收都会有相应的SBUF来储存数据的。
3.你的data2[]有定义吗?
是51的,也是异步串口,data2[]有定义的,相应的SBUF?SBUF不是一个单片机只有一个吗?我知道发送的时候数据还要放到ACC里,但是接收的时候我就不知道了
SBUF不是一个,而是发送一个,接受一个,不过名称相同
SBUF是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。两个缓冲器只用一个字节地址99H.
也就是说对SBUF的操作,读就是接收缓冲,写就是发送缓冲。
用汇编语言表示就是
发送数据mov sbuf,a,a的内容到发送寄存器
接收数据mov a,sbuf,接收寄存器的内容到a