模仿I2C协议利用串口组网
先祭上代码
书上郭天祥的代码有点问题,没法进行通信,但是程序流程图是对的。
我百度过关于51单片机串口多机组网资料,除了郭天祥的代码目前没看到有其他的资料。
我在郭天祥的基础上再改进一下
单片机连接方式
主机通信流程图
主机代码
/***单片机串口组网
* 主机程序
* MASTER
*
***/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define SLAVE 0x02
#define BN 16
uchar rbuf[16];
uchar tbuf[16]={
"master transmit"};
void err(void)//发送复位信号
{
SBUF = 0xff;
while(TI!=1);
TI = 0;
}
uchar master(uchar addr,uchar command)
{
uchar aa,i,p;
while(1)
{
SBUF = SLAVE;//呼叫从机地址
while(TI!=1);
TI = 0;
while(RI!=1);//等待从机响应
RI = 0;
if(SBUF!=addr)//如果地址错误,发送复位信号
{
err();
}
else //发送完地址发送数据
{
TB8 = 0;//清除地址标志,变为数字标志
SBUF = command;//发命令
while(TI!=1);
TI = 0;
while(RI!=1);//等待从机响应
RI = 0;
//读取返回的数据
aa = SBUF; //接收从机返回的状态
if((aa&0x08)==0x08)//若命令未接收,发送复位信号
{
TB8 = 1;
err();
}
else
{
if(command==0x01)//是发送命令
{
//************
if((aa&0x01)==0x01)//从机准备好接收
{
do