找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1769|回复: 6
打印 上一主题 下一主题
收起左侧

请朋友们帮我看下这个模拟串口接收单片机程序,有一点不理解

[复制链接]
跳转到指定楼层
楼主
ID:899981 发表于 2022-1-18 18:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
case 0:if(usart4.receive_juge_cnt == 5)//起始位
                                                        {
                                                                if(UART4_RX_READ)//错误的起始位
                                                                {
                                                                        usart4.receive_juge_cnt = 0xffff;
                                                                }
                                                                usart4.receive_bit_cnt++;
                                                        }
                                break;
                        case 1:if(usart4.receive_juge_cnt == 15)//bit0
                                                        {
                                                                usart4.receive_temp >>= 1;
                                                                if(UART4_RX_READ) usart4.receive_temp |= 0x8000;
                                                                usart4.receive_bit_cnt++;//判断下一个bit
                                                        }
                                break;
usart4.receive_juge_cnt ++;
上面的程序在中断运行,9600波特率,每10US中断一次,问题是+5次就能判断是起始位?然后在15次就能判断是第一位?只看到判断为高时,没看到判断为低时,而我们在发送时宽度变化很大的。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:301191 发表于 2022-1-18 22:51 | 只看该作者
顶一下
回复

使用道具 举报

板凳
ID:509408 发表于 2022-1-19 09:09 | 只看该作者
了解一下波特率的概念。9600波特率的话每秒可以传输9600个二进制位,也就是9600/8个英文字母的数据量,也就是1200个字节,大约1.2KB。
就算你10us中断一次,期间也能发送96个二进制位,够用了。不够你把波特率设置再高点。
回复

使用道具 举报

地板
ID:546770 发表于 2022-1-19 09:34 | 只看该作者
既然要找问题,先得弄清楚串口的原理,,串口在不发送数据的时候是空闲状态(引脚为高电平),当需要发送数据的时候,TX端先发送起始位(发送一位低电平),波特率9600,发送一位的时间就是1000000 / 9600 = 104uS,10uS的中断检测5次就是相当于50uS检测一次,当然就可以判断起始位了啊,至于你说的判断高电平,进不了高电平的判断自然就是低电平了啊,这点逻辑还是应该要有,,,最后的一点就是,9600的波特率,宽度就尽量靠近104uS发送一个bit,并不是一味地宽就有效,就相当于9600的接受速率,接受的4800的当然会出问题了。
回复

使用道具 举报

5#
ID:899981 发表于 2022-1-19 11:49 | 只看该作者

谢谢参与。
回复

使用道具 举报

6#
ID:899981 发表于 2022-1-19 11:49 | 只看该作者
tzs233 发表于 2022-1-19 09:09
了解一下波特率的概念。9600波特率的话每秒可以传输9600个二进制位,也就是9600/8个英文字母的数据量,也就 ...

谢谢,这个是接收程序,我再看看。
回复

使用道具 举报

7#
ID:899981 发表于 2022-1-19 11:50 | 只看该作者
小黑屋525 发表于 2022-1-19 09:34
既然要找问题,先得弄清楚串口的原理,,串口在不发送数据的时候是空闲状态(引脚为高电平),当需要发送数 ...

谢谢,您这个应该是最佳答案,基本给了我一个思路,我自己再找找。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表