我开始了一个由PIC16f877A和TFT智能液晶显示器(中国品牌)的项目。我设计了一个代码来接口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);
}
发布于 2020-04-29 03:12:02
当我将输入的数据类型更改为布尔HMT_WriteVPN32函数时,代码可以正常工作。
我应该输入long数据,但是我想输入float值,这是不能接受的
感谢你们与我一起解开这个谜团的努力
https://stackoverflow.com/questions/61178973
复制相似问题