您好,能用实例给我讲解一下单片机串口通讯的串口中断方式和查询方式的区别吗?
3个回答
展开全部
通俗的说,中断方式下单片机可以放心干其他的活,一旦串口有一个字节有效接收数据或者发送一个字节完毕,串口会立即通知CPU进行后续处理。特点是可靠、及时、占用CPU资源少。
查询方式就是CPU间断地(连续的就不用指望干其他活了)查询串口的接受发送标志,决定是否进行后续处理,在查询的间隙里做其他工作。如果串口波特率较高,CPU在间隙里的任务比较重,工作时间比较长,就会出现丢失接收数据现象,因为串口接收缓冲器只有一个字节,不及时读取就会被覆盖。
查询方式就是CPU间断地(连续的就不用指望干其他活了)查询串口的接受发送标志,决定是否进行后续处理,在查询的间隙里做其他工作。如果串口波特率较高,CPU在间隙里的任务比较重,工作时间比较长,就会出现丢失接收数据现象,因为串口接收缓冲器只有一个字节,不及时读取就会被覆盖。
更多追问追答
追问
您解释的很清晰,我也听懂了。谢谢!我还想问一下中断程序和主程序的先后执行顺序,假如主程序中有个while,while中还有其他程序,在这种情况下,中断和while先后顺序是怎么样的?
追答
这个概念你还不是很清楚,可以理解,刚学都这样,只要肯努力总会有收获。
中断程序和主程序不存在先后顺序问题,主程序是顺序执行的,你用了跳转语句他也是跳转到你指定的地方执行,简单说就是听话,你指哪他打哪。
中断程序就不太讲理,一旦中断发生你必需立即处理,他不管你是否在忙其他的事。但这个你编好程序后不用你操心,单片机会自动处理中断。
上面是形象说法,就是说主程序可以在任何时候响应中断,但是会自动将程序断点的地址压入堆栈,处理完中断程序再返回断点继续执行原来的程序。
暂时先说这么多,便于你理解。其实还没那么简单,涉及中断响应时间、中断优先权、中断嵌套等等,慢慢你会理解的。
展开全部
中断方式就是:假设程序在不停的运行中,当串口有字符时,程序会被中断,然后执行专门的串口中断程序。执行完后,又恢复原来程序。
查询方式就是:没有中断。整个程序不停的运行,在程序中会有固定的时间去检查一下是否有字符被接收了。
查询方式就是:没有中断。整个程序不停的运行,在程序中会有固定的时间去检查一下是否有字符被接收了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
恩,好的,其实很简单,关键是RI和TI的处理上,中断方式时当RI或TI为1时自动进入中断程序,查询方式时,得等待其为1.
1、中断方式:
#include<reg51.h>
unsigned char dat;
bit flag=0;
void uart() interrupt 4
{
if(RI)
{
RI=0;
dat=SBUF;
flag=1;
}
if(TI)
{
TI=0;
}
}
main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
ES=1;
EA=1;
while(1)
{
if(flag)
{
SBUF=dat;
}
}
}
2.查询方式:
#include<reg51.h>
unsigned char dat;
main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
while(1)
{
while(RI);
RI=0;
dat=SBUF;
SBUF=dat;
while(TI==0);
TI=0;
}
}
1、中断方式:
#include<reg51.h>
unsigned char dat;
bit flag=0;
void uart() interrupt 4
{
if(RI)
{
RI=0;
dat=SBUF;
flag=1;
}
if(TI)
{
TI=0;
}
}
main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
ES=1;
EA=1;
while(1)
{
if(flag)
{
SBUF=dat;
}
}
}
2.查询方式:
#include<reg51.h>
unsigned char dat;
main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
while(1)
{
while(RI);
RI=0;
dat=SBUF;
SBUF=dat;
while(TI==0);
TI=0;
}
}
追问
嗯嗯,懂了!谢谢 麻烦您了!
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询