This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

430F5418通过uart方式与lcd通讯,无法接收lcd返回的数据。

上面是lcd的通讯方式;

void put_char( uchar ch)
{
        while(!(UCA1IFG & UCTXIFG));            // --BIT5
        UCA1TXBUF = ch;
}
 
char get_char(void)
{
uchar ch;
        ch   =  temp;
return ch;
}
//下面是背光指令;
void Back_Toggle(void)
{
uchar ch;
        put_char(BACK_TOGGLE);
ch=get_char();
while(ch!=0xCC); //等待返回值???
}
//下面是中断程序
 #pragma vector=USCI_A1_VECTOR  
__interrupt void USCI_A1_ISR(void)  
{  
  switch(__even_in_range(UCA1IV,4))  
  {  
  case 0:break;  
  case 2:                                   // 接收中断  
    while (!(UCA1IFG&UCTXIFG));             // 等待发送完成  
    temp = UCA1RXBUF;                  // 接收缓冲区  
    break;  
  case 4:break;                             // 发送中断  
  default: break;  
  }  
}  
  • hui tang,

    请问目前MSP430 通过UART给LCD发送数据, LCD可否正常接收成功数据?即你设定背光后,LCD是否受控制?

    hui tang 说:
    char get_char(void)
    {
    uchar ch;
            ch   =  temp;
    return ch;
    }

    另外你这样检测是否接收到数据,有可能temp还保持上一次的值,并没有真正的进入接收中断,接收到新的数据。

    有以下建议:

    参考例程,先把程序调通,UART自己收自己发,并用示波器观察,成功后,然后链接LCD后,仍旧用示波器观察看看正常否?

    MSP430x54x_uscia0_uart_01.c USCI_A0, 115200 UART Echo ISR, DCO SMCLK
    MSP430x54x_uscia0_uart_02.c USCI_A0, Ultra-Low Pwr UART 2400 Echo ISR, 32kHz ACLK
    MSP430x54x_uscia0_uart_03.c USCI_A0, Ultra-Low Pwr UART 9600 Echo ISR, 32kHz ACLK
    MSP430x54x_uscia0_uart_04.c USCI_A0, 9600 UART, SMCLK, LPM0, Echo with over-sampling

    BR,

    Lina

  • 可以先用示波器检查一下是否有LCD数据返回到430单片机

  • 程序中没有看到发送完成后改变串口速率的部分,不知道实际中是否发完立即改变为接收速率

  • 这两天春节放假,节后回到单位用示波器试试。

  • 楼主可以买一个简单的USB 逻辑分析仪帮助你检查问题。提高工作效率,以后再也不会有各种通讯问题解决不了。

  • 1.接收波特率和发送波特率分开设置的?

    2.都用的是9600,是否也需要分开设置?

  • 能否把

    ch = temp;

    改成

    ch = UCA1RXBUF;

    --------------------

    单位的示波器被拿去检定了。先摸索摸索别的方法看看能不能解决。

  • 接收是在中断中完成的,temp只是起到参数传递的作用。

  • 只有一个波特率,收发都是一样的。