查看: 3978|回复: 9

串口发送数据的时间

[复制链接]

该用户从未签到

发表于 2014-10-6 13:50:58 | 显示全部楼层 |阅读模式
分享到:
用430串口发送数据给舵机,我们一个工作周期20ms,给舵机发送数据11个字节,波特率用9600

那么传送数据时间=11*8/9600=9.17ms

问题是,430的发送时间也是9.17ms么?在线路上的传送时间是9.17ms没错。

现在我理解的是:数据我是用循环中断的方式发送的。430的TXbuff是一个字节的,所以只能一个字节一个字节的发,在发送这11个字节的9.17ms期间,cpu干不了其他工作,只能串口发送数据吗?

如果是pc机串口发送11字节的话,由于电脑缓存大,11个字节准备好后就可以干其他的事了吗?9.17ms其他时间可以做其他工作。
回复

使用道具 举报

  • TA的每日心情

    2015-8-27 11:09
  • 签到天数: 207 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-10-6 14:50:17 | 显示全部楼层
    你计算的时间是发送的时间,发送由串口模块硬件完成,不占用cpu时间。你需要做的只是把数据放到发送缓冲区。
    当你循环发送的时候,你可以打开发送完成中断,来往发送缓冲区填数据。不占用cpu
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-10-6 15:16:03 | 显示全部楼层
    shower.xu 发表于 2014-10-6 14:50
    你计算的时间是发送的时间,发送由串口模块硬件完成,不占用cpu时间。你需要做的只是把数据放到发送缓冲区 ...

    430的发送缓冲区只有一个字节,也就是说在发着一个字节的时间内cpu可以干其他的,

    发送完成后,通过中断再发送下一个字节码?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2014-10-6 15:40:03 | 显示全部楼层
    menghubei 发表于 2014-10-6 15:16
    430的发送缓冲区只有一个字节,也就是说在发着一个字节的时间内cpu可以干其他的,

    发送完成后,通过中断 ...

    就是这样。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-10-6 19:17:17 | 显示全部楼层
    shaoziyang 发表于 2014-10-6 15:40
    就是这样。

    比如我这个中断发送程序:
    我想发送一帧数据存在string2数组中;

    #############################
    #pragma vector=UART0TX_VECTOR
    __interrupt void usart0_tx (void)
    {
      if(i<9)
       TXBUF0 = string2[i++];
    }
    #############################

    执行下面语句后:
    TXBUF0=string2[0];
    就进入中断发送了,但是中断里面又给TXBUF0赋值了,也就是继续发送。
    程序一直在中断里面啊,没出过中断,cpu如何进行其他工作?


    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-10-6 19:18:04 | 显示全部楼层
    shower.xu 发表于 2014-10-6 14:50
    你计算的时间是发送的时间,发送由串口模块硬件完成,不占用cpu时间。你需要做的只是把数据放到发送缓冲区 ...

    比如我这个中断发送程序:
    我想发送一帧数据存在string2数组中;

    #############################
    #pragma vector=UART0TX_VECTOR
    __interrupt void usart0_tx (void)
    {
      if(i<9)
       TXBUF0 = string2[i++];
    }
    #############################

    执行下面语句后:
    TXBUF0=string2[0];
    就进入中断发送了,但是中断里面又给TXBUF0赋值了,也就是继续发送。
    程序一直在中断里面啊,没出过中断,cpu如何进行其他工作?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2014-10-6 21:43:25 | 显示全部楼层
    menghubei 发表于 2014-10-6 19:17
    比如我这个中断发送程序:
    我想发送一帧数据存在string2数组中;

    一般是当发送完成后,才会进入中断。发送的这段时间,MCU就可以做其他任务。

    有的CPU是缓冲区空就能进中断,这时一般发送缓冲区是有多字节的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-9-26 15:11
  • 签到天数: 681 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-10-7 06:55:39 | 显示全部楼层
    要不要考虑硬件的响应时间呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-10-7 08:59:53 | 显示全部楼层
    shaoziyang 发表于 2014-10-6 21:43
    一般是当发送完成后,才会进入中断。发送的这段时间,MCU就可以做其他任务。

    有的CPU是缓冲区空就能进中 ...

    如果是发送完成才进入中断就可以理解了,给txbuf赋值后,usrt马上进行发送,此时cpu可以进行其他工作;
    当发送完成后,在中断里继续赋值,退出中断,uart发送数据,cpu执行其他程序。

    感觉豁然开朗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-10-7 09:01:50 | 显示全部楼层
    cmyldd 发表于 2014-10-7 06:55
    要不要考虑硬件的响应时间呢?

    硬件响应时间应该微妙级的
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 08:30 , Processed in 0.175515 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.