#include //52系列单片机头文件 #define uchar unsigned char #define uint unsigned int #define SLAVE 0x02 /*从机地址*/ #define BN 16 uchar rbuf[16]; uchar code 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 { p=0; /* 清校验和 */ for(i=0;i