Биты исчезают во время передачи UART - PullRequest
0 голосов
/ 13 апреля 2020

Я начинаю проект PIC16f877A и TFT smart lcd (китайский бренд). Я разработал код для взаимодействия PI C с 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);
}

1 Ответ

0 голосов
/ 29 апреля 2020

Код работал, когда я изменил тип введенных данных на функцию BOOLEAN HMT_WriteVPN32.

Я должен ввести long данные, но вместо этого я хотел ввести float значение, которое неприемлемо

Спасибо, ребята, за ваши усилия, чтобы решить эта тайна со мной

...