通俗的说,中断方式下单片机可以放心干其他的活,一旦串口有一个字节有效接收数据或者发送一个字节完毕,串口会立即通知CPU进行后续处理。特点是可靠、及时、占用CPU资源少。
查询方式就是CPU间断地(连续的就不用指望干其他活了)查询串口的接受发送标志,决定是否进行后续处理,在查询的间隙里做其他工作。如果串口波特率较高,CPU在间隙里的任务比较重,工作时间比较长,就会出现丢失接收数据现象,因为串口接收缓冲器只有一个字节,不及时读取就会被覆盖。
中断方式就是:假设程序在不停的运行中,当串口有字符时,程序会被中断,然后执行专门的串口中断程序。执行完后,又恢复原来程序。
查询方式就是:没有中断。整个程序不停的运行,在程序中会有固定的时间去检查一下是否有字符被接收了。
恩,好的,其实很简单,关键是RI和TI的处理上,中断方式时当RI或TI为1时自动进入中断程序,查询方式时,得等待其为1.
1、中断方式:
#include
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
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;
}
}