单片机串口简单问题 为什么要所中断要全部关掉??

#include<reg51.h>#include<intrins.h>unsignedchartmp;voidsend_char(unsignedchartxd);ma... #include <reg51.h>
#include <intrins.h>
unsigned char tmp;
void send_char(unsigned char txd);
main()
{
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;

SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增

TR1 = 1; // 启动定时器1
IE = 0x0; // 禁止任何中断

while(1)
{

if(RI) // 是否有数据到来
{
RI = 0;
tmp = SBUF; // 暂存接收到的数据
P0 = tmp; // 数据传送到P0口
send_char(tmp); // 回传接收到的数据
}
}
}
void send_char(unsigned char txd)
// 传送一个字符
{
SBUF = txd;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}
那为什么不用开串口中断的??谢谢
展开
 我来答
第九个伙伴
推荐于2016-11-11 · TA获得超过180个赞
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:124万
展开全部
我觉得是这样子的,关闭中断是为了避免更高优先级的中断信号抢占MCU的资源,因为你所设置的串口通讯模式必须保证上位机、下位机时序一致,如果这时候中断,则会时序混乱,通讯错误,很多单总线的IC工作时也要关闭中断就是为了避免更改优先级中断导致时序混乱问题。
并不是你不关中断就一定不能正常工作,这只是避免一些隐患问题。
micropower
2010-02-06 · TA获得超过1万个赞
知道大有可为答主
回答量:2619
采纳率:50%
帮助的人:1542万
展开全部
就像二楼说的, 如果要保证数据的通信,就必须在发送数据的时候关闭中断。因为单片机在运行的时候假如你开了某种中断(不是串口的),有一定的几率会出现错误中断信号,从而导致放弃正在发送的信息。虽然这种几率很低,但要确保正常的运行,所有可能出现的问题都考虑到,所有的隐患都要去掉。所以关所有中断。
而你这个程序是用软件查询的方式来确定是否接收到数据或者发送完数据。所以不需要串口中断来接收和发送数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲲水陈04
2010-02-06 · TA获得超过2001个赞
知道小有建树答主
回答量:816
采纳率:25%
帮助的人:524万
展开全部
还是我来告诉你吧.
开中断以后是应该编写相应的"中断函数"的,在这里你没有编写中断函数,你即使开启全局中断(EA=1)也是没有影响的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qwe5628197
2010-02-06 · TA获得超过520个赞
知道小有建树答主
回答量:753
采纳率:0%
帮助的人:420万
展开全部
既然你没有采用中断的方式接受数据全局中断当然可以关掉,不过就算你打开程序应该也是没 问题的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式