这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 我用单片机的IO口模拟串口通信(波特率:9600)为何不稳定呢?

共6条 1/1 1 跳转至

我用单片机的IO口模拟串口通信(波特率:9600)为何不稳定呢?

工程师
2019-09-19 19:11:47     打赏

大家下午好!

后边是我的代码,由于串口不够用,并且受限于体积和成本,想使用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));
                }
        }
}
/*********************************************************************************/




关键词: 串口     模拟     波特率     通信     软件串口    

工程师
2019-09-20 14:00:25     打赏
2楼

用模拟的方式来接收串口数据,你MCU的采样频率需要高点!


电脑上是9600,那么你的采样频率就得是9600*4


工程师
2019-09-20 14:03:22     打赏
3楼

这问我就对了!

我以前使用3倍采样,非常稳定可靠。上世纪90年代,多串口的MCU很少(有也很贵),我就经常用模拟串口了,工控板用的。
现在的MCU速度快,轻易就能模拟8个全双工串口(9600bps),我现在用STC 1T 51或STM32来模拟比较多,用于工控行业的数据采集。


工程师
2019-09-20 14:08:37     打赏
4楼

你的程序最后接收的是最高位,你接收慢了,最后多了个1


工程师
2019-09-20 14:10:07     打赏
5楼

回“明月风”:

大侠,您能传个示例代码学习学习吗?我更改一下频率试试。我只是奇怪,0x30识别成0x98,前边多了一位1,如果识别成0x18,就不奇怪了,窜位了,多了一个0。可是0x30从起始位到第一个高电平中间全是0啊,我这怎么多了一个1,要是说个别干扰,可是不管发多少,全是识别0x98。而且不是别的。



工程师
2019-09-20 14:11:47     打赏
6楼

有没有其他中断,干扰采样点?我原来用另一个端口在采样点翻转,然后示波器双踪来看采样点是否在位中心,每个位1个采样点也可以稳定工作,就是时间要调好。


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]