单片机与单片机串口通信问题; 发送数据时,不能把数据存储到SBUF里,什么原因?求教:程序如下 补充

串口设置OK,波特率OK.

void Serial(void) interrupt 4 using 1
{
TI=0;RI=0;
////////////////////////////////////////////////////////////////////

switch(Moden)
{

case 1:
{
switch(Recive)
{
case 0:{if(RB8==1&&SBUF==0)Recive=1;return;}

case 1:{if(RB8==0){Num=SBUF;Recive=0;return;}else Recive=0;}
default:Recive=0;return;
}
break;}
case 2:
{
switch(Drive)
{
case 0:{Drive=1;TB8=1;SBUF=0;return;}

case 1:{Drive=0;TB8=0;if(Num>5){Num=0;}delay(200);return;}
default:Drive=0;return;
}
break;}
default :break;
}
}

void colorm()
{
switch(Num)
{
case 0:Red=Green=1;break;
case 1:Red=1;Green=0;break;
case 2:Red=0;Green=1;break;
case 3:Red=1;Green=0;break;
case 4:Red=0;Green=1;break;
//case 5:Red=Green=1;break;
default :Red=Green=0;Num=0;break;
}

SBUF = Num;//把Num给SBUF,**********************************
delay(500);
if(Moden==2){Num++;}
delay(65500);
delay(65500);
delay(65500);
}

中断函数不宜过长,特别是不应包括有延时函数。

收到一字节后,设置一个标志位,立刻就退出函数。
在主函数里面,循环检测各个标志位,出现什么标志就处理什么问题。追问

怎么设置标志位呢?我想SBUF=Num; Num初始为0,Num++,不停的发送Num的新值,该怎样设计,求教

追答

我想SBUF=Num; Num初始为0,Num++,不停的发送Num....
----
这样有规律的数据,发给谁?
对方要是单片机,让它自己加,这里发送一个启动命令,即可。

发送这样有规律的数据,并无意义。
======
另外:
void Serial(void) interrupt 4 using 1
{
TI=0;RI=0;  --在这里,都清零了,往下,怎么知道是发送中断,还是接收中断?
///////////////////////--不论发送、接收,往下,都执行一样的程序?

追问

对方是单片机 我要保证发送的数据与对方接受的数据时刻保持同步,比如主机先开机,走了一个程序以后,从机在开机,慢了一步 。 我要保证接收方跟主机同步,

追答

一个一个的,都是有效数据,没有校验数据。
万一,传输中出现差错,对方就无法判断正误,会造成误操作。

追问

主机发送的时候不接收任何数据 从机接受数据的时候不发送 怎么设计比较合理

追答

参考一下:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/4b0c0e1e9c479c16314e1515.html
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/daded23e6bb0a4f555e723de.html

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-20
SBUF = Num;//把Num给SBUF,**********************************
这句以前你要确定RI寄存器的值。当SBUF里面接收到数据的时候,RI硬件自动置1.你接收完数据后,软件置0.你可以加上下面这句。同时TI寄存器的用法是差不多的。
while(!RI);
第2个回答  2012-02-23
神啊 你程序有发送吗
相似回答