首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]单片机多机通讯问题

[求助]单片机多机通讯问题

求助,多机通讯问题





  现在我用两块msp4301471进行串口通讯,可是能检测到数据得发送,却接收不到,不知道是程序得原因还是电路得原因呢?
程序如下:
发送:#include <msp430x14x.h>
void Init(void) ;                    //声明UART初始化函数
char Data[8]={0x12,0x13,0x03,0x13,0x01,0x10,0x11,0x02};
unsigned char count=0;

void main(void)
{
  unsigned int i;
  WDTCTL=WDTPW+WDTHOLD;                  //关闭看门狗
  Init();                          //UART初始化
  while(1)
  {
   UTCTL0 |=SSEL1;
   TXBUF1=0X01;                    //向缓冲区写入地址字符
   while ((UTCTL0&0x01)==0);       //查询等待一次发送完毕
   
   UTCTL0&=~TXWAKE;
   for (i=0;i<=8;i++)              //循环发送字符串
      {
        U0TXBUF=Data;
        while((UTCTL0&0x01)==0);
       }
    }
 }
void Init(void)
{
 
  UCTL0 =CHAR+PENA+SWRST+MM;      //8位数据位,1位停止位,地址位模式
  UBR00 =0X09;
  UBR10 =0X00;
  UMCTL0=0X4A;
  UTCTL0=0X45;                       //8MHZ,bps is 115200
  UCTL0 &= ~SWRST;
  ME1 |=UTXE0 + URXE0 ;                //UATT send ,接收允许
  P3SEL |=0x30;                        //p3.4,p3.5由USART发送模块占用
  P3DIR |=0x10;                        //p3.4输出
  }     
接收:
       #include <msp430x14x.h>

#define ADRESS 0X01
#define USART_SEL P3SEL
#define UTXD0 BIT4
#define URXD0 BIT5

void Init(void);                 //声明UART初始化函数
unsigned char Data[20];        //数据缓冲区
unsigned char Buffer[20];
unsigned char i=0;
unsigned char j;
unsigned char count;
unsigned char flag=0;

void main(viod)
{
 WDTCTL=WDTPW+WDTHOLD;          //关闭看门狗
 5DIR &= ~BIT5;
 5DIR |= BIT0;
 Init();                        //UART初始化
 _EINT();                      //通用中断允许
 while(1) ;                    //主循环
}

#pragma vector= UART0RX_VECTOR
__interrupt  void Uart0rx()
{
 
  if ((URCTL0 & URXWIE) ==URXWIE)       //接收为地址方式时,等待正确地址出现
  {
    if (U0RXBUF==ADRESS)      //地址正确,改变接收数据方式,准备接收
     {
      URCTL0 &=~URXWIE;
      count=0;
      }
    else
      {
      URCTL0 |= URXWIE;        //不是本机地址,则以后接收到数据不进入中断
      }
   }
  else                       //接收为数据方式时
   {
   
    Data[count]=U0RXBUF;       //数据存入Data数组中
   
    if (Data[count++]==0)     //是否到达末尾
      {
       URCTL0 |=URXWIE;       //到达末尾,改变接收为地址方式
       for(j=0;j<count;j++)Buffer[j]=Data[j];  //复制字符串
       }
     }
}


void Init (void)
{
 USART_SEL |= UTXD0+URXD0;    //设置管教为第二功能
 UCTL0 =CHAR+PENA+SWRST+MM;              //SWRST复位,USART允许
                                   //8位数据位,1位停止位,地址位模式
 URCTL0 |=URXWIE;              //只有地址字符使URXIFG复位
 UBR00=0X09;
 UBR10=0X00;
 UMCTL0=0X4A;                  //使用8Mhz晶振时,波特率为115200bps
 UTCTL0=SSEL0;                 //选定ACLK为时钟源
 UCTL0 &= ~SWRST;
 ME1 |=UTXE0 +URXE0;          //UART0发送及接收模块占用
 IE1 |=URXIE0;                //使能USART0 RX中断
 3SEL |=0X30;                  //p3.4、p3.5被UART1发送模块占用
 3DIR |=0X10;                  //p3.4输出,p3.5输入
                 
 }
返回列表