位在UART传输过程中消失

问题描述 投票:0回答:1

我正在启动PIC16f877A和TFT智能LCD(中文品牌)的项目。我设计了一个代码以将PIC与TFT进行接口以发送数据。 TFT协议被设计为一次发送8位,这是在程序中准备的。最初的结果很好,但是有一个小错误。传输的数据在传输过程中丢失了一些位,我找不到此问题的答案。例如,我应该转移0x000290FA,但是转移的代码变成0x000200FA。

这是项目的代码。

typedef unsigned char  BOOLEAN;
typedef unsigned char INT8U;
typedef unsigned short INT16U;
typedef unsigned long INT32U;
BOOLEAN HMT_WriteVPN32(INT32U Addr,INT32U Data);

void main() {

  UART1_Init(115200);               // Initialize UART module at 115200 bps
  Delay_ms(100);                  // Wait for UART module to stabilize

       HMT_WriteVPN32(0x00020000,0x000290FA);
       delay_ms (500);
       HMT_WriteVPN32(0x00020004,0x0008AD6D);
}

BOOLEAN HMT_WriteVPN32(INT32U Addr,INT32U Data)
{
    INT16U Hdata = 0, Ldata = 0;
    INT16U AddrH = 0, AddrL =0 ;
    INT16U AddrHH = 0, AddrHL = 0, AddrLH = 0, AddrLL = 0;
    INT16U HHdata = 0, HLdata = 0, LHdata = 0, LLdata = 0;
    if((Addr < 0x00020000) || (Addr > 0x0002FFFF))
    {
        return (FALSE);
    }

    AddrH = Addr>>16;                // Take high 16 data
    AddrL = Addr;                    // Lower 16 data

    AddrHH = AddrH >> 8;
    AddrHL = AddrH;
    AddrLH = AddrL >> 8;
    AddrLL = AddrL;

    Hdata = Data >> 16;   // Take the 32-bit high byte
    Ldata =  Data ;    // Take the 32-bit low byte

     HHdata =Hdata >> 6;
     HLdata = Hdata  ;
     LHdata = Ldata >> 6;
     LLdata = Ldata ;
    SendHead();                    // Send frame header
    UART1_Write(0x44);                // send command
    UART1_Write(AddrHH);
    UART1_Write(AddrHL);
    UART1_Write(AddrLH);
    UART1_Write(AddrLL);
    UART1_Write(HHdata);
    UART1_Write(HLdata);
    UART1_Write(LHdata);
    UART1_Write(LLdata);
    SendTail();                   // Send end of frame
    return (TRUE);
}
pic uart
1个回答
0
投票

当我更改输入到BOOLEAN HMT_WriteVPN32函数的数据类型时,该代码起作用。

© www.soinside.com 2019 - 2024. All rights reserved.