单片机串口简单问题 为什么要所中断要全部关掉??
#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; // 清除数据传送标志
}
那为什么不用开串口中断的??谢谢 展开
#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; // 清除数据传送标志
}
那为什么不用开串口中断的??谢谢 展开
4个回答
展开全部
就像二楼说的, 如果要保证数据的通信,就必须在发送数据的时候关闭中断。因为单片机在运行的时候假如你开了某种中断(不是串口的),有一定的几率会出现错误中断信号,从而导致放弃正在发送的信息。虽然这种几率很低,但要确保正常的运行,所有可能出现的问题都考虑到,所有的隐患都要去掉。所以关所有中断。
而你这个程序是用软件查询的方式来确定是否接收到数据或者发送完数据。所以不需要串口中断来接收和发送数据。
而你这个程序是用软件查询的方式来确定是否接收到数据或者发送完数据。所以不需要串口中断来接收和发送数据。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
还是我来告诉你吧.
开中断以后是应该编写相应的"中断函数"的,在这里你没有编写中断函数,你即使开启全局中断(EA=1)也是没有影响的.
开中断以后是应该编写相应的"中断函数"的,在这里你没有编写中断函数,你即使开启全局中断(EA=1)也是没有影响的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既然你没有采用中断的方式接受数据全局中断当然可以关掉,不过就算你打开程序应该也是没 问题的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询