PIC24F的单片机采用查询发送方式:
void uart1_send(unsigned char sendData)
{
//Notice: UxSTAbits.UTXEN don't clear 0, else be delayed 1-bit-cycle
//123456789
U1STAbits.UTXEN = 1;
U1TXREG = sendData;
delay_nop(); //3.9US
//delay_nop();
while (!U1STAbits.TRMT);
//while (!U1STAbits.UTXBF);
U1STAbits.UTXEN = 0;
}
/*********************************************************************************************************************
函数功能: 串口查询方式发送数据
输入参数: 要发送的数组指针,数组长度
输出参数: 无
改变参数: UART发送缓冲区
*/
void uart1_send_string(const UINT8* pCmd, const UINT8 length)
{
UINT8 i;
for(i=0;i<length;i++)
{
// U1TXREG = sendData;
U1TXREG=pCmd[i];
U1STAbits.UTXEN = 1;
delay_nop();
delay_nop();
while(!U1STAbits.TRMT)
{
#ifdef WATCHDOG_ENABLE
feedWatchDog();
#endif
}
U1STAbits.UTXEN = 0;
}
}
发送数据的时候比如发送81 00 01 02 03 04 05 FF
点发送一次的时候,总是第一字符81出错,最后还多增加字符00,
如F8 00 01 02 03 04 05 FF 00 .
连续发送的时候则正确。而且单独发送一个字符的时候,也会偶尔多出个00.
查了下,不知道原因。 |