单片机串行通信中的中断

当发完一帧数据时,TI置位,CPU要去执行中断,请问这时CPU到这个中断中干嘛,好像没什么事,而且程序中也没写中断函数,另外TI要软件清零,如果还没等cpu处理玩这个中断... 当发完一帧数据时,TI置位,CPU要去执行中断,请问这时CPU到这个中断中干嘛,好像没什么事,而且程序中也没写中断函数,
另外TI要软件清零,如果还没等cpu处理玩这个中断,就软件清零了,怎么办啊
展开
 我来答
duyin2011
2012-05-28 · TA获得超过2398个赞
知道大有可为答主
回答量:1723
采纳率:100%
帮助的人:664万
展开全部
1,我们一般发送的数据都用查询法,因为发送是主动的,当然也可以用中断法,当然要明白数据传输原理,发送数据原理,当数据送入SBUF后,就开始数据发送,当发送完后,硬件将TI置1,一般我们通过查询TI是否是1来判断数据发送是否完毕,你说的程序中也没写中断函数,是人家没有用中断方式,用的是查询方式,这样会合理些,在中断函数中令TI=0,也没有什么意思,当然可以在函数中处理下别的.
2 用查询法,就是等TI=1,后你才能去清零,如果TI不是1,永远不能执行到软件清零这句,如果用中断函数也是要等TI为1,用查询法查询TI是否1法很合理,如果用延时等TI是1,在中断函数来将TI=0;也可以,但延时要合理,必须大于整个发送时间,一般一个字节需要10bit的时间.
3 一般接收会用中断函数,因为接收是被动,用中断法会很稳,用查询法也可以,但高密度接收时,会出错,因为cpu还在执行别的程序,如果很长,即使你的RI已经是1了,但没有执行到,就只能等,就会丢失很多发来的数据.
更多追问追答
追问
比如接受到了一帧数据,RI=1了,中断了,cpu是不是就去处理这个中断了呢?但是具体干了什么呢?把SBUF里的东西弄走,为下一帧接受做准备?
当RI=1时,一般我们编程的下一步就是RI=0,这样是不是就可以接下一帧数据了,那么下一帧数据会不会把前一帧数据覆盖呢?后一帧到来时cpu把前一帧数据怎么处理了?
有点乱啊,新手,麻烦了,
追答
1,外来的数据送入SBUF完毕后,硬件将RI置1,触发中断,我们可以用中断函数来处理,将SBUF数据取走,也可以查询中断标识位RI是否是1,取走数据,将RI=0,等待下一帧数据来临.
2当RI=0后才能有一帧数据来临,若本次中断函数里的内容没处理完,即使这时RI=1了,cpu也得处理完本次中断,才能进入下次中断,不可能覆盖前一帧数据的.
歪歪闲置
2012-05-28 · TA获得超过1037个赞
知道大有可为答主
回答量:2912
采纳率:100%
帮助的人:2336万
展开全部
置位就是表示要CPU去干什么,只要CPU去干了这个置位就没用了,因为已经在干了。中断只是优先级比较高的程序,程序不是没有写,而是已经包含进去了,只是你自己不用写而已
更多追问追答
追问
比如接受到了一帧数据,RI=1了,中断了,cpu是不是就去处理这个中断了呢?但是具体干了什么呢?把SBUF里的东西弄走,为下一帧接受做准备?
当RI=1时,一般我们编程的下一步就是RI=0,这样是不是就可以接下一帧数据了,那么下一帧数据会不会把前一帧数据覆盖呢?后一帧到来时cpu把前一帧数据怎么处理了?
有点乱啊,新手,麻烦了,
追答
响应中断时CPU做现场保护,然后跳转到中断代码,执行完再现场恢复,继续执行之前的代码,可以简单理解为一件紧急的事情来了,你先把手头的事情放一边,去处理紧急的事情,处理完了再回头来干你之前干的事。中断时只是保持中断前的所有执行状态,包括寄存器等等,中断完了再恢复。同时理解一点,中断并不是没事干,中断也有执行代码,只是你不用编写而已,你可以查看CPU的文档,看看CPU在中断时都干了什么。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
艺嵌科技
2012-05-28 · TA获得超过411个赞
知道小有建树答主
回答量:373
采纳率:100%
帮助的人:392万
展开全部
发送数据时你不使用中断,而只在接收时使用中断就是了。一般都这样使用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式