请教单片机的串口通信问题,当执行SBUF=1;是否会触发void zhong() interrupt 4中断

请教各位老师:今天写了一个程序:key(){...if(){SBUF=1;...}}voidzhong()interrupt4{...}key(){...SBUF=1;i... 请教各位老师:
今天写了一个程序:
key()

...
if()
{
SBUF=1;
...
}

void zhong() interrupt 4
{...}
key()

...
SBUF=1;
if()
{
...
}

void zhong() interrupt 4
{...}

请问各位老师,我这句SBUF=1;放在IF语句里面和放在IF语句前面一句执行出来的结果有相当大的差异。只是一个放在if前面。一个放在if后面的区别。if语句里的语句为真。
小弟是新手,请教一下: SBUF=1;这个语句执行会对哪些标志为产生影响?以及是否会触发串口中断??

以上请指教。
谢谢!
展开
 我来答
l1...5@yeah.net
2010-10-18 · TA获得超过469个赞
知道答主
回答量:182
采纳率:0%
帮助的人:187万
展开全部
如果打开了串口,那么是可以触发串口中断的。
当发送完成时TI = 1,即触发串口发送中断。
当然需要你初始化好相应的波特率什么的才能进行正常的通信。

至于你将SBUF放在if内外的差别,应该是你别的地方引起的。理论上如果
if条件为真,那么就会执行if语句的内容的。

另外如果你串行中断你还需要处理接收数据的结果时候,应该这样写

void zhong() interrupt 4
{
if(RI)
{ RI = 0;
...}

if(TI)
{ TI = 0;
...}

}
shinephone
2010-10-18 · TA获得超过154个赞
知道答主
回答量:132
采纳率:0%
帮助的人:96.4万
展开全部
是这样子的。
SBUF=1表示你往发送缓冲器里写了一个数,单片机会自己把它发出去,当然也会触发串口发送中断(这里的前提是你打开并允许了发送中断有效),如果你不想让发送时产生中断或即使产生了中断也要不影响程序运行的话,那你有两种办法
1、在初始化时屏蔽发送中断。这样的话这句话就不会产生中断。
2、在中断函数里对中断源进行判断,如果是发送中断的话,执行一跳空指令即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式