双机通信问题

2019-03-25 19:42发布

第一次搞双机通信,出了点问题,我都搞了好多天,怎么也搞不定,谁能帮帮我,谢谢!

过程:单片机1设置3位数码管值,同时把设置值传送给单片机2,单片机2有4位数码管显示采集的温度(用MAX6675采集数据大概要0.2s),我按下面的程序

       两边数码管都要闪烁的现象.

问题:发送和接收到都要等待的话,单片机2在采集数据完后才能接收(此时单片机1就在不停的等待).请问如何做到单片机1一直发送而不用等待,单片机2到时间就接受,是不是要用到异步通信的中断,该如何实现呢?

单片机1:

void send_usart()
{
  TXEN=1;//发送允许
  CREN=1;//接收允许
  for(k=0;k<3;k++)
  {
  TXREG=send[k];
  while(1)
    {
    if(TXIF==1)break;//等待发送完成

       }

       while(1)
      {
     if(RCIF==1)break;//等待接收完成

       }

       RCREG=RCREG;//读响应字节,清RCIF

     }
     }

void main(void)
{
uint m;
TRISA=0x38;  
ANSEL=0;     
TRISC=0xC0; //RC6 RC7输入

sciint();
di();
while(1)
{
for(m=0;m<100;m++)  //数码管显示
{
send[0]=temp1(send[0]);      //按键1返回值
send[1]=temp2(send[1]);       //按键2返回值
send[2]=temp3(send[2]);       //按键3返回值
disp(10,send[0],send[1],send[2]);//数码管显示
}
send_usart();
}
}

单片机2:

main()
{
uint m;
uchar a1,a2,a3,a0;
uint settemp;
TRISC=0xe0;
TRISB=0x00;
PORTB=0xff;
ANSELH=0;
SCK=0;
CS=1;
sciint(); //SCI部件初始化
di();
CREN=1; //接收允许
TXEN=1; //发送允许
delayms(500);

while(1){
for(k=0;k<3;k++ ){
while(1){
if(RCIF==1) break;
} //等待接收数据
rec[k]=RCREG; //读取接收数据,同时清掉RCIF
TXREG=rec[k]; //发送接收到的数据
while(1){
if(TXIF==1) break;
} //等待写入完成
}
settemp=100*rec[0]+10*rec[1]+rec[2];  //设置温度值  

P_Temp=Re_Convert();  //采集温度值      

if(P_Temp>settemp)
    a0=11;
  else a0=10;
a1=P_Temp/100;
a2=P_Temp%100/10;
a3=P_Temp%10;         

for(m=0;m<100;m++)  //数码管显示
disp(a0,a1,a2,a3);


}
}

单片机2

main()
{
uint m;
uchar a1,a2,a3,a0;
uint settemp;
TRISC=0xe0;
TRISB=0x00;
PORTB=0xff;
ANSELH=0;
SCK=0;
CS=1;
sciint(); //SCI部件初始化
di();
CREN=1; //接收允许
TXEN=1; //发送允许
delayms(500);

while(1){
for(k=0;k<3;k++ ){
while(1){
if(RCIF==1) break;
} //等待接收数据
rec[k]=RCREG; //读取接收数据,同时清掉RCIF
TXREG=rec[k]; //发送接收到的数据
while(1){
if(TXIF==1) break;
} //等待写入完成
}
settemp=100*rec[0]+10*rec[1]+rec[2];  //设置温度值  

P_Temp=Re_Convert();  //采集温度值      

if(P_Temp>settemp)
    a0=11;
  else a0=10;
a1=P_Temp/100;
a2=P_Temp%100/10;
a3=P_Temp%10;         

for(m=0;m<100;m++)  //数码管显示
disp(a0,a1,a2,a3);


}
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
chunyang
1楼-- · 2019-03-26 01:11
楼主可以通过232电平转换芯片用PC来监看你的MCU串口输出是否正确,对初学者而言,一个串口监视器是很有用的工具。
先确定发送方是否有问题,再去调试接受方。
哎就一个字
2楼-- · 2019-03-26 06:47
 精彩回答 2  元偷偷看……

一周热门 更多>