zmf200407
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-07-27
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1705回复:4

关于串口通信接收部分的算法

楼主#
更多 发布于:2004-07-14 14:53
我有一个关于串口接收部分的算法有点不太懂,请求牛人指点,串口接收的时候,我是采取一帧为10位,开始的起始位是0,最后位为1
我不知道如何真正判断才算接收到了起始位0,如何避免开始接收到的是数据里的0(即起始位)。如有谁作了这方面的,望能给我解答,谢了!!
xiaokai588
驱动牛犊
驱动牛犊
  • 注册日期2004-07-16
  • 最后登录2004-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-16 10:15
一般起始位和停止位是靠串口的硬件自动检测,当硬件检测到有一个一定延时的低电平出现时即自动认为是起始位。
zmf200407
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-07-27
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-19 09:58
谢谢仁兄!
       但是我这个是要靠软件检测起始位的呀,我首先说下我做的东西,我就是通过CPLD和485芯片(带有刚好两个相反的使能端),
把一个全双工变成半双工(通过在软件里产生使能信号来控制485芯片)。不知你有没有油箱,能否告诉我?我可以发到邮件里向你请教和讨论.
luorenfei
驱动小牛
驱动小牛
  • 注册日期2003-02-17
  • 最后登录2006-11-30
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-19 12:32
串口在空闲的情况下是保持‘1’的。
cpu此时一直在搜寻串口输入管脚有无'0'到来;
如果有,则被认为是起始位到了,计数器开始工作,cpu停止搜寻。
计数器数到10个比特位完成,cpu等待一点点时间,又重新开始搜寻起始位。此算法只要计数器跟串口速率适配得当,串口发送不要发太长的帧,控制在200字节以下,干扰不是太严重的情况下就不会误判起始位。

----------
zmf200407
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-07-27
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-20 09:36
lun ren fei :
       你好!谢谢你指点,我现在把它弄的差不多了,等几天我来调试一下它.请问"串口发送不要发太长的帧,控制在200字节以下"是什么意思,它不是一帧10位吗?我在做程序的时候有一点很难,就是在检测到起始位(0)到停止位(1)之间我要产生一个高电平的使能信号,其他的时候为低电平,这个使能信号的高电平应包括起始位和停止位(难点在这里).还有一个问题是,检测的时候,中间要是一帧错了怎办(就是在计数到停止位时本来应为高电平,而它为为低电平怎办)?这就不产生了帧错误吗?请求高人指点.
游客

返回顶部