大家下午好!
后边是我的代码,由于串口不够用,并且受限于体积和成本,想使用IO口模拟一个串口。用定时器定时波特率为9600,使用PC上的串口工具测试的时候发现数据时好时坏,好的时候一串都是好的,坏的时候一串都是坏的,并且固定。举例:发送十六进制0x30,接受错误的时候接收的固定是0x98.发送一串30,就接收到一串98.我的发送总是对的,只要我接到什么,发给到PC上肯定就是什么。这就让我很疑惑,我发送总是对的,那说明我的波特率没问题,但是接收为什么是好是坏我解释不清楚。因此求教。
/*********************************************************************************/
#define UART_NC 55
#define UART_START 0
#define UART_STOP 9
#define UART_REC 0
#define UART_SEND 1
void uart_rec(uint8_t rx)//参数是IO口电平
{
if(rec_flag == UART_NC)//空闲状态
{
if(rx == 0)//开始信号
{
rec_flag = UART_START;//开始接收,第一位是起始位,丢弃
}
}
else
{
rec_time = 0;
rec_flag++;
if(rec_flag == UART_STOP)//最后一位停止位
{
rec_flag = UART_NC;
rec_data[rec_count++] = recvData;
return;
}
if(rx)
{
recvData |= (1 << (rec_flag - 1));
}
else
{
recvData &= ~(1 << (rec_flag - 1));
}
}
}
/*********************************************************************************/