51单片机中的有趣问题

#include
#include

typedef unsigned char u8;
typedef unsigned int u16;

sbit k1=P2^1;
sbit k2=P2^2;
sbit k3=P2^3;
sbit k4=P2^4;

u16 receiveDate;

void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = 0xFD;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}

void main(void)
{
InitUART();
while(1);

}

void UARTInterrupt(void) interrupt 4
{
while(RI=0);
RI=0;
receiveDate=SBUF;
{
switch(receiveDate)
{
case 1:k1=0;break;
case 2:k2=0;break;
case 3:k3=0;break;
case 4:k4=0;break;
case 5:k1=k2=k3=k4=1;break;
}
}
}
///在main 函数结尾的whlie(1)去掉对程序有什么影响,
这个程序的功能是通过对蓝牙发送数据控制四个小灯的闪烁

程序都跑完了,还怎么监听

你这个程序就是在一直等待串口的中断,如果去掉while(1),那么程序跑到结尾就结束了,也不会再去等待中断。直观的来看,去掉WHILE(1)小灯就不会闪烁了

51的运行特性是程序执行一遍后会从main开头重新执行。如果没有while(1)。InitUART()会一直循环执行。应该还是会响应中断的。