加100分 串口 TI中断问题


当RI发生时会进入....串口中断...
1.但是我想要TI发生时,,,进入串口中断,,,
2.TI是怎样发生...

我现在很乱,,没想好怎么问....
我想在51中做跟以下一样的东西....

跟visual basic mscomm的
CommEvent()  中的comEvSend一样...

我会加分,,请帮忙

[ 本帖最后由 tssing 于 2008-7-21 18:31 编辑 ]

我也来说两句 查看全部回复

最新回复

  • panhearii (2008-7-21 21:45:29)

    我猜的 最近不动脑了 光用猜

    直接用LJMP到串口的中断地址行不????
    以上言论不负任何责任
  • hgjinwei (2008-7-21 22:16:34)

    当SBUF缓冲字节发送完毕后, TI自动置 1 .然后串行中断发生.
    当 TI 和 RI 都开启时, 在中断服务程序判断标志位 TI 和 RI 即可执行想要执行的中断服务程序 ,
    如果 TI = 1, 表示发送完毕中断,  同理 RI = 1 表示接收中断.
    两个都等于一(很难遇上的) 表示两者都有效.
  • hgjinwei (2008-7-21 22:21:57)

    SBUF 发送是自动完成的, 任何时候只要执行 MOV   SBUF , A 指令, 想要发送的数据就会自动发送(小心不要在SBUF还未发送完毕就执行, 个人认为会出错的), 无须理会. 发送完毕中断只是告诉处理器数据已经发送完毕. 如果还有数据要发送, 可继续写SBUF, 否则直接退出中断.
  • tssing (2008-7-21 22:23:19)

    我想要的是中断进入,,而非人为因素...是系统自己,,,
    你为什么懒得动脑
  • tssing (2008-7-21 22:24:07)

    我只是想触发,,发送中断,,,我只是想触发,,发送中断,,,我只是想触发,,发送中断,,,
  • hgjinwei (2008-7-21 22:42:42)

    出发中断还不简单, 主程序执行 MOV  SBUF, A     指令, 等会儿它就中断了
  • hgjinwei (2008-7-21 22:45:41)

    注意 , 是等会儿(时间视发送波特率而定), 不是立即. 没有方法可以是 TI 中断立即发生. 因为 TI  中断是 SBUF 缓冲发送完毕系统时触发的 .
  • hgjinwei (2008-7-21 22:46:25)

    不知这样说, 阁下明不明白?
  • hgjinwei (2008-7-21 22:56:28)

    刚翻到书,书中如是说:

            TI 是发送结束中断标志. 初始化串行口后, 在 TI 位为 0 的情况下, 将发送数据写入"发送缓冲器",  会立即启动串行发送过程 : 自动在数据位前插入起始位, 在数据位后插入停止位, 形成发送帧; 并按设定的波特率依次将起始位,数据位,停止位输出到发送引脚TXD上, 当发送完最后一个数据位时 TI 自动置 1 ,表明当前数据帧已经发送完毕.

    摘自: <<新编单片机原理与应用>> 第二版  潘永雄 编著 西安电子科技大学出版社 2007年
              第126页 第二段
  • tssing (2008-7-22 20:44:30)

    仿真串口那里问题真多,,跟硬件差太远,,不过硬件又难以单步调试...麻烦
  • fatqi (2008-7-23 21:12:28)

    发送中断是由单片机自动产生的,不能人为由外部产生。这是单片机硬件结构决定的,发送中断只是用于提示串口已经顺利发出了一个字节,可以发送下一个字节了。没有任何其他的作用。

    程序当中如果没有4楼所说的mov sbuf,a 这句发送指令,单片机系统不会进入发送过程,也就不会产生发送中断了。也就是说只有认为进行串口发送才会产生发送中断。

    再有串口中断比较特殊,无论是串口接收还是发送都是使用同一个中断标志进入中断服务程序。要求程序自己判断是发送中断TI还是接收中断RI。这是单片机硬性规定的。
  • longten (2008-7-24 01:10:37)

    我也不明白呢谢谢!!!!!!!!!!!!!!!!!!!11