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

#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; // 清除数据传送标志
}
那为什么不用开串口中断的??谢谢

我觉得是这样子的,关闭中断是为了避免更高优先级的中断信号抢占MCU的资源,因为你所设置的串口通讯模式必须保证上位机、下位机时序一致,如果这时候中断,则会时序混乱,通讯错误,很多单总线的IC工作时也要关闭中断就是为了避免更改优先级中断导致时序混乱问题。
并不是你不关中断就一定不能正常工作,这只是避免一些隐患问题。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-02-06
就像二楼说的, 如果要保证数据的通信,就必须在发送数据的时候关闭中断。因为单片机在运行的时候假如你开了某种中断(不是串口的),有一定的几率会出现错误中断信号,从而导致放弃正在发送的信息。虽然这种几率很低,但要确保正常的运行,所有可能出现的问题都考虑到,所有的隐患都要去掉。所以关所有中断。
而你这个程序是用软件查询的方式来确定是否接收到数据或者发送完数据。所以不需要串口中断来接收和发送数据。
第2个回答  2010-02-06
还是我来告诉你吧.
开中断以后是应该编写相应的"中断函数"的,在这里你没有编写中断函数,你即使开启全局中断(EA=1)也是没有影响的.
第3个回答  2010-02-06
既然你没有采用中断的方式接受数据全局中断当然可以关掉,不过就算你打开程序应该也是没 问题的

单片机串口简单问题 为什么要所中断要全部关掉??
我觉得是这样子的,关闭中断是为了避免更高优先级的中断信号抢占MCU的资源,因为你所设置的串口通讯模式必须保证上位机、下位机时序一致,如果这时候中断,则会时序混乱,通讯错误,很多单总线的IC工作时也要关闭中断就是为了避免更改优先级中断导致时序混乱问题。并不是你不关中断就一定不能正常工作,这只...

单片机串行口收发结束后为什么要中断
出现中断,是便于你及时进行数据处理。收到后的中断函数中,应该把SBUF的数据读出,并送到其它的位置,腾出SBUF,便于接收下一个数据。在发送完的中断函数中,应该发送下一字节。(如果没有了,当然就不发了。)

为什么每次进入串口中断都需要单片机断电复位
延时等到电压稳定。进入串口中断是因为当给单片机上电那一瞬间,电压有在几微秒内不是直接跳变到5V的而是一个直线上升的阶段,这时单片机不能正常工作,需要复位电路给它延时以等到电压稳定。

单片机串口为什么接收数据开中断
电脑发送数据是一个字节接着一个字节,两个字节之间会有延时,所以收到数据你需要尽快处理,不然可能会被新的数据覆盖,配置中断就是为了及时响应把数据读出存储起来。所以SBUF内收到数据后RI就会置1,在中断里把数据存储 然后及时把RI清零接收下一字节数据。

单片机串口为什么接收数据开中断
电脑发送数据是一个字节接着一个字节,两个字节之间会有延时,所以收到数据你需要尽快处理,不然可能会被新的数据覆盖,配置中断就是为了及时响应把数据读出存储起来。所以SBUF内收到数据后RI就会置1,在中断里把数据存储 然后及时把RI清零接收下一字节数据。

信号给进单片机时为什么要使用中断?这时中断都干些什么?谢谢
首先信号进入单片机时不一定要进入中断,设计者可根据要求来设计某种信号使用中断功能,打个比方例如微波炉正在加热食品,微波炉上单片机正在处理加热计时并把时间送入液晶屏幕显示,计算机(mcu)正在全速工作,这时如果有人打开微波炉的门,需要马上关闭微波加热的工作,以防止人员受到辐射,如果采用逐项查询的...

大家说说单片机串口中断是怎么回事?
单片机串口中断,例如用串口接收GPS模块的数据(这一般都是串口相连的),单片机可能需要一直的工作,不管是干什么,但是你最需要的是接收GPS数据并进行处理,于是当接收到GPS信号时,就会产生串口中断,然后进入中断接收GPS数据,存储在串口寄存器当中,当接收完之后关掉中断,单片机继续其他工作,当又有GPS数据...

我想知道为什么单片机跟计算机传送数据时要把中断先关闭,中断在串口通 ...
看书不细心额。\/\/用这两句:temp=SBUF;P0=temp;flag=1;} 接收的时候不关中断,当然你也可以用查询的方式,不用中断来接收;发送的时候一般是关中断的,不然每发一个字节,就进入中断了,不利于高速传递数据。但不是绝对的,如果在每发一个数据就要进入中断做特殊处理,则不关中断。

单片机的中断问题
单片机的中断标志位不都是自动清零的,比如外部中断就必须自己清零,一般是刚进入就清零吧,至于你说的再次中断问题我觉得不用考虑。因为如果是外部中断或者是串口中断的话,你清零后只要不再操作这些端口就不会再次中断,如果是定时器中断的话就更没事儿了,一般的定时器都得是ms级的,而一个中断一般都...

51单片机串口通信问题
一个一个问题回答:1、是在一个字节接收成功或一个字节发送成功以后进入中断程序(不过,一般在发送时是将中断关闭的,也就不进入中断了)。此时,定时器的作用就是为了设定串口速率,因为单片机的速度和串口的速度不是一个数量级的,所以一定要有个变速箱。2、数据的接收是由硬件控制的,其实,数据的...

相似回答