第一次搞双机通信,出了点问题,我都搞了好多天,怎么也搞不定,谁能帮帮我,谢谢!
过程:单片机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);
}
}
此帖出自
小平头技术问答
一周热门 更多>