4245|7

97

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助串口接收中断函数中嵌套发送函数的问题 [复制链接]

以下是我写的串口接收数据后立即回发的代码
SERIAL:
        JBC RI,RECEIVE;检查是否是接收数据中断
        CLR TI
        AJMP SRET
RECEIVE:;若接收到数据则立即回发。
        MOV BUFFER,SBUF
        MOV SBUF,BUFFER       
SRET:INC R1;计算中断次数
        RETI

我想问一下,如果接收到数据的话执行MOV SBUF,BUFFER会发生发送数据的中断么?是什么样的过程?是不是接收到数据-》接收数据中断-》发送数据-》发送数据中断-》发送数据中断退出-》接收数据中断退出?我通过记录R1的值发现传输一个字符是会有两次中断的。谢谢。

最新回复

我明白了,发送数据的中断是在发送完以后产生的,而就收数据的中断是在发现串口上有数据就产生的,所以这里面有一个时间差,所以能够正常执行CLR RI,如果我在这一句语句前加上一点点的延时,程序就会有问题了对吧。 在51里面同级中断就是不允许嵌套的,其他的cpu我不知道哦。  详情 回复 发表于 2009-3-5 22:25
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
串口发送/接收会有一个并串行/串并行转化的过程, 如果接收和发送中断使能, 那么发送缓冲区空或接收缓冲区满分别会产生发送中断和接收中端。
其实我觉得你说的情况是可能发生的,但至少要满足条件:1)芯片要工作在全双工模式,2)支持中断嵌套,3)发送的中断优先级高于接收的中断优先级。

但是我认为在接收中断里发送数据不是很好的思路。
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢!我现在使用的是51芯片,串行口中断应该不分发送和接收优先级的。同级中断不应该嵌套,但是我的确得到了我所要的结果,所以我很费解。
我修改程序
SERIAL:
JB RI,RECEIVE;检查是否是接收数据中断
CLR TI
AJMP SRET
RECEIVE:;若接收到数据则立即回发。
MOV BUFFER,SBUF
MOV SBUF,BUFFER
CLR RI;清除接收中断标志
SRET:INC R1;计算中断次数
RETI
如果按照循环嵌套的说法,这样应该会进入一个死循环,因为RI一直没办法被清零。但是程序却还是能够正常收发,我的想法对么?一般来说如果要把收到的数据立即转发会怎么做?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
按你修改后的程序,如果接收到一个数据,会产生一次中断,进入你写的中断服务程序
经JB RI,RECEIVE判断为接收中断,跳转执行MOV BUFFER,SBUF ;MOV SBUF,BUFFER 这里没问题,因为51里发送的SBUF与接收的SBUF只是地址相同,实际上是独立的空间,但是此时不产生发送中断。然后继续执行CLR RI; 再SRET:INC R1会产生一次记数,
过了一段时间(发送一字节所需时间,与波特率有关),之前执行MOV SBUF,BUFFER 送完数据后会再产生一次发送中断,导R1又记了一次数,所以是R1总共产生两次记数
另外,如果没有清RI肯定是不行的,会造成执行完一次中断服务程序跳出后又再次进入。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
友情up
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
友情up
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
楼主为啥觉得同级中断不应该嵌套?很多单片机都支持中断嵌套的,也包括同级中断的嵌套
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
我明白了,发送数据的中断是在发送完以后产生的,而就收数据的中断是在发现串口上有数据就产生的,所以这里面有一个时间差,所以能够正常执行CLR RI,如果我在这一句语句前加上一点点的延时,程序就会有问题了对吧。
在51里面同级中断就是不允许嵌套的,其他的cpu我不知道哦。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表