我的单片机,在单个机器运行时一切正常。
但当我接入两个机器时,向A机发信息,再向B机发信息,此时B机会收到不正常信号,就是开头会多一个字符,如:我发一个CMD123456,它会收到CCMD123456,多了一个 'C ',这是怎么回事?我在单机时是正常的。
当我向A发,再向B机发,再向A机发,此时A机就会收到正常。
请高手帮忙看看,
这好像是软件问题是吧?
通讯部分的程序
#include <reg52.h>
#include "servermainframe.h "
#define uchar unsigned char
#define uint unsigned int
#define ILEN 96 /* size of serial receiving buffer */
idata unsigned char inbuf[ILEN];
unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置
unsigned char idata *getlast=inbuf; //最后取走的字节位置
bit inbufsign; //接收缓冲区非空标志 有=1
bit inbufful; //输入缓冲区满标志 满=1
unsigned char _NewstringIN;//1 there is new string,0 there is none.
//*****************************
//放入一个字节到发送缓冲区
putbyte(char c){
ES=0; //暂停串行中断,以免数据比较时出错?
TI = 0;
SBUF=c; //未发送完继续发送
while(!TI);
TI=0;
ES=1;
}
//***************************************
//发送一个定义在程序存储区的字符串到串口
putstring(unsigned char *puts){
COMENABLE=SENDENABLE;
for (;*puts!=0;puts++) //遇到停止符0结束
putbyte(*puts);
COMENABLE=RECEIVEENABLE;
}
//*************************************
//从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
uchar getbyte (void){
char idata c ;
while (!inbufsign); //缓冲区空等待
ES=0;
c= *getlast; //取数据
getlast++; //最后取走的数据位置加一
inbufful=0; //输入缓冲区的满标志清零
if (getlast==inbuf+ILEN)
getlast=inbuf; //地址到顶部回到底部
if (getlast==inlast)
inbufsign=0; //地址相等置接收缓冲区空空标志,再取数前要检该标志
ES=1;
return (c); //取回数据
}
//*****************************************
//接收一行数据,必须定义放数据串的指针位置和大小 del=0x7f,backspace=0x08,cr=0x0d,lf=0x0a
void getline (uchar idata *line)
{ unsigned char cnt = 0; //定义已接收的长度