我正在将HMI TFT屏幕与PIC 16F877A相连,并且该屏幕具有发送和接收数据的协议。我想对接收到的数据进行解码以读取所需的信息,而无需任何额外的值。我已经考虑过通过创建一个数组来保存接收到的数据并将其保存在其中,并获取我想读取的所需字节。这是TFT的协议,下面是设计的代码。AA 78 00 01 0F CC 33 C3 3C
(我只想读取[0F
)的一部分)
int uart_rd; //UART read variable
typedef unsigned char INT8U;
typedef unsigned long INT32U;
void Read_Bytes(INT8U *str, INT32U Num) {
INT32U i;
for (i = 0; i < Num; i++) {
str[i++] = UART1_Read();
}
}
void main() {
UART1_Init(115200); //Uart baud at 115200
while (1) { // Endless loop
if (UART1_Data_Ready() == 1) {
Read_Bytes(str_read, 9);
uart_rd = str_read[3];
if (uart_rd == 0x0F) {
PORTB.B2 = 1;
}
else {
PORTB.B2 = 0;
}
}
}
}
问题尚未解决。但是我假设您需要知道为什么未检测到0x0F。从您的代码AA 78 00 01 0F CC 33 C3 3C中,当AA索引为0时,0x0F位于左侧第4个位置。]
因此,uart_rd = str_read[4];
为0x0F。
在您的Read_Bytes函数中,您开始从str [1]保存数据,因为当i = 0时,str [i ++]在开始时将是str [1]。
因此,uart_rd = str_read[5];
为0x0F