关于MSP430f149的RS485通信,高手请进

2019-03-24 12:34发布

下面是我编写的MSP430f149的485通信小程序,请各位大侠看看问题出在哪里?

程序目的:想用串口精灵发送一个字节数据给单片机,然后单片机再将接受的数据回发给串口精灵。
下面是错误的现象描述:
1.C:UserspanruifengDesktop1.jpg串口精灵中,发送0x56,接收到的是0x00
2.C:UserspanruifengDesktop2.jpg仿真器显示收到的数据是0x56,是正确的
3.下面是程序
#include  <msp430x14x.h>
unsigned int flag_1,rec_count,rec_ok;
unsigned char rec_data;
/********************UART初始化参数设定********************/
void UART_parameter_initialization(void)
{

    P3DIR |= BIT3;
    P3OUT &= ~BIT3;                           //处于接收状态
    P3SEL |= 0xC0;                            // 选择P3.6和P3.7做UART通信端口
    ME2 |= URXE1;                            // 使能USART1的发送和接受
    UCTL1 |= CHAR+SPB;                        // 选择8位字符,无校验位,两个停止位
    UTCTL1 |= SSEL0;                          // UCLK = ACLK
    UBR01 = 0x03;                             // 波特率9600
    UBR11 = 0x00;                             //
    UMCTL1 = 0x4A;                            // Modulation,波特率小数补偿
    UCTL1 &= ~SWRST;                          // 初始化UART状态机
    IE2 |= URXIE1;                            // 使能USART1的接收中断
    IFG2 &= ~UTXIFG1;
}

void senddata(void)                                //数据发送
{
    IFG2 &= ~UTXIFG1;
    TXBUF1 =rec_data;
    while (!(IFG2 & UTXIFG1));              //等待以前的字符发送完毕
}

/********************主函数********************/
void main(void)
{   
    int i;
    /*下面六行程序关闭所有的IO口*/
    P1DIR = 0XFF;P1OUT = 0XFF;
    P2DIR = 0XFF;P2OUT = 0XFF;
    P3DIR = 0XFF;P3OUT = 0XFF;
    P4DIR = 0XFF;P4OUT = 0XFF;
    P5DIR = 0XFF;P5OUT = 0XFF;
    P6DIR = 0XFF;P6OUT = 0XFF;
    WDTCTL = WDTPW + WDTHOLD;                  // 关闭看门狗
    flag_1=0;                           //变量初始化
    rec_count=0;
    rec_ok=0;
    UART_parameter_initialization();
    _EINT();                                  //打开全局中断
    while(1)
    {
          if(rec_ok==1)
          {
            rec_ok=0;
            P3OUT |= BIT3;                          //开启发送状态
            ME2 |= UTXE1;
            for(i=100;i>0;i--);                     
            senddata();                           //数据发送
            ME2 &=~UTXE1;
            P3OUT &= ~BIT3;                       //处于接收状态
          }
    }
}

/********************中断函数********************/
#pragma vector =UART1RX_VECTOR
__interrupt void UART1_RXISR(void)
{      
       rec_data=RXBUF1;                   //中断中读数据
       rec_ok=1;  
}

  

请各位大侠帮忙看看到底是那块程序出问题了,谢谢啊 此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章