TI中文支持网
TI专业的中文技术问题搜集分享网站

点对多点通信时主机不能接收从机数据

#include "msp430x24x.h"
#include "intrinsics.H"
char i;
char j;
int addr;
char RES;
void delay (char t)
{
for(i=100;i>0;i–)
{
for(j=100;j>0;j–);
}
}
void PUTCHAR()
{
while(!(IFG2&UCA0TXIFG)); UCA0TXBUF=addr;
delay(15);
while((IFG2&UCA0TXIFG)==0);}
int UART_Rev()
{
//while((IFG2&UCA0TXIFG)==0);//接收等待 RES=UCA0RXBUF ;//返回接受值
return RES; }
void init(void){
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); // If calibration constants erased
// do not load, trap CPU!!
} BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P3OUT &= ~(BIT4+BIT5);
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600; (104)decimal = 0x068h
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
//UCA0MCTL =0x08;
IE2 |= UCA0RXIE; UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
} void main (void)
{
WDTCTL = WDTPW + WDTHOLD; init();
_EINT();
while(1)
{
for(addr=1;addr<=2;addr++)
{
PUTCHAR(); __delay_cycles(100);
delay(100);
UART_Rev();
delay(10);
if(RES==0X00)
{
PUTCHAR();
}
}
}
}

主机可以发送,从机应答的数据主机没有接受

Shi JianHua:

首先你用的什么通讯方式,没有说明,如果多个从机同时反馈信号,你怎么识别呢?我没有看你的程序,需要先说明白你的硬件环境再分析你的我呢体吧!

tao chen2:

回复 Shi JianHua:

一个主机两个从机,从机根据主机发送的addr判断是否是本机地址,是返回数值给主机,主机接收。是否清楚?

Shi JianHua:

回复 tao chen2:

那你就先分开调试吧,先挂上一个,然后调试,避免程序出错,两个同时响应,你收不到数据。一个程序调通了,你在挂俩个调试。这样你也许能发现问题所在。

tao chen2:

回复 Shi JianHua:

接一个从机时主机可以接收到数据,两个或者多个时接收不到

Shi JianHua:

回复 tao chen2:

估计是你的数据线上没有完全分时复用。两个都接到数据后,都进行了回复。自己查软件吧

赞(0)
未经允许不得转载:TI中文支持网 » 点对多点通信时主机不能接收从机数据
分享到: 更多 (0)