打印

关于模拟串口发送数据错误

[复制链接]
4235|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qe123|  楼主 | 2010-8-26 09:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qe123 于 2010-8-26 09:41 编辑

由于目前使用的这款430单片机没有串口,只能模拟,IO口加定时器模式,通过串口助手给单片机发送数据,接收校验正确后给PC回复数据,出现了很多情况,不清楚原因,把数据放在数组中,采用的1200波特率,采用32768时钟
1.有些数据发送错误
2.有时数据会丢失
程序如下:
if (rsup==0xf)//发送
    {
        TA1CCR0+=SBITTIME;//使用增模式
         switch(numbitup)
         {
            case 1://起始位
                SVALUE_0;//0901SVALUE_0;//
                bytebufup = *(ppup++);
                break;
            case 10://偶校验
                if(oddup%2)
                    SVALUE_1;//SVALUE_1;//0901
                else
                    SVALUE_0;// SVALUE_0;//0901
                break;
            case 11://停止位
                SVALUE_1;//0901SVALUE_1;//
                break;
            case 12://停止位要两个
                SVALUE_1;//0901SVALUE_1;//
                datalenup -= 1;
                if (datalenup == 0)//数据发送完后停止定时器
                {
                    stop_timerA5();
                    cmode &= ~(cmd5+cmd4);
                    RECCIFG;//清中断标志
                    RECIE;//使能中断
                    break;
                }
                numbitup = 0;
                oddup=0;
                SDIR;//设置发送端口为输出
                break;
            default:
                if (bytebufup&SeBit)
                {
                    SVALUE_1;//0901SVALUE_1;//
                    oddup++;
                }
                else
                    SVALUE_0;//0901SVALUE_0;//
                bytebufup>>=1;  
              break;
         }
         numbitup++;
    }

2010-08-26_093721.JPG (33.87 KB )

2010-08-26_093721.JPG

2010.JPG (38.96 KB )

2010.JPG

相关帖子

沙发
ayb_ice| | 2010-8-26 09:55 | 只看该作者
就这点东西看不出什么问
题,可能你的逻辑没有错,但时间不准,应该是程序问题引起的

使用特权

评论回复
板凳
XZL| | 2010-8-26 10:18 | 只看该作者
32768的时钟频率有点低,建议采用内部8MRC振荡器做主时钟.在接收数据时关闭其它中断

使用特权

评论回复
地板
qe123|  楼主 | 2010-8-26 10:36 | 只看该作者
3# XZL
单片机在接收的时候应该没有问题,因为我是在接收完校验正确后才发送的数据,只有接受正确才可以发,总觉得是不是发送的问题,但有时还是正确的。
我的主时钟用的是4M的,4M的可以吗

使用特权

评论回复
5
qe123|  楼主 | 2010-8-26 10:39 | 只看该作者
2# ayb_ice
你说的时间不准确,这个不懂?

使用特权

评论回复
6
ayb_ice| | 2010-8-26 11:18 | 只看该作者
你的发送是靠什么来保证时间精度的,程序算法不会影响时间准确性

使用特权

评论回复
7
qe123|  楼主 | 2010-8-26 12:09 | 只看该作者
6# ayb_ice
我用定时,833uS中断一次采集一位,我用示波器看过,基本准确

使用特权

评论回复
8
ayb_ice| | 2010-8-26 13:38 | 只看该作者
LS
你这是收数据吧,发数据呢

使用特权

评论回复
9
qe123|  楼主 | 2010-8-29 12:39 | 只看该作者
8# ayb_ice 我发数据也是833uS一位,波特率也是1200

使用特权

评论回复
10
NE5532| | 2010-8-29 14:10 | 只看该作者
如果没有其他需要同时处理的任务,何必用定时器呢,delay不是最简单?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:天行健,君子以自强不息!

82

主题

623

帖子

3

粉丝