[AVR单片机] 关于ATMEGA16输入捕捉中断模拟串口接收的问题

[复制链接]
2728|5
 楼主| lbdyxk 发表于 2013-3-14 10:25 | 显示全部楼层 |阅读模式
还是资源不够闹得,发送问题解决了,现在又遇上接收问题,好不容易接收时序搞定了,又发现了离奇现象:
首先介绍一下模拟思路:
由于自带3个定时计数器功能被用于3个PWM功能,因此只有使用ICP这个办法了——下降沿捕捉。当接收到起始位时先判断是否低电平然后开始接收,但是经过一番尝试后出现了这个现象
待接收数据为
0C 04 00 0F 20 94 00 09 09 E5
实际接收到变成了
0C 04 00 0F 20 14 00 09 09 65
请看我标记的两个对应数字,很明显第一位高电平被错读为低电平。
曾经怀疑过延时有误,但是尝试微调后要么现象依旧,要么全部数据错误;去掉判断首位低电平后接收到的就是一堆7F,这个也容易理解,而且和上边的现象也相吻合;检查过T/C1初始化确实已经禁止了噪声抑制功能,排除了将首位滤除的可能性(本身也几乎不可能在这种场合有效吧)。

......
无语了,不知道有没有哪位高手帮忙再提点一下,看还有没有什么原因会造成这种丢失。
PS:其他串口模拟方法就免了,毕竟已经到这一步,就差那么一点点了:(
qin552011373 发表于 2013-3-14 23:47 | 显示全部楼层
模拟的串口没有用过呢  帮顶
 楼主| lbdyxk 发表于 2013-3-15 10:17 | 显示全部楼层
每次都要自己回答自己的问题,唉
还好今天搞定了,问题还是出在影响时序的延时上。
问题原因:之前数据位接收循环外单独调用了精确延时用于等过起始位,在有效的0-8位接收时调用了另一个延时,这样不但把接收过程复杂化,还使延时入参的确定变成了两个,精度要求更高了,以至于试了半天都没有保持接收稳定的参数。
解决方法:在数据接收循环内部调用循环,先延时,后读值。

评分

参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!

查看全部评分

qin552011373 发表于 2013-3-18 09:47 | 显示全部楼层
因为你的项目你理解肯定是最深的  论坛只能提供经验呢
yhhsky 发表于 2013-3-30 18:58 | 显示全部楼层
wentao0100 发表于 2013-4-3 13:02 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部