#include<reg52.h>   
#define uchar unsigned char
#define uint unsigned int
uchar i;
sbit D0=P1^0;   //8个发光二极管位定义
sbit D1=P1^1;
sbit D2=P1^2;
sbit D3=P1^3;
sbit D4=P1^4;
sbit D5=P1^5;
sbit D6=P1^6;
sbit D7=P1^7;

void init_uart(void)  //串口初始化函数
{
	TMOD=0X20;  //设为定时器1工作方式2
	TH1=0XFD;    //T1定时器装初值 （波特率设为9600bps）
	TL1=0XFD;    //T1定时器装初值
	TR1=1;        //启动定时器1
	SCON=0X50;   //设为串口工作方式1
	EA=1;         //开总中断
	ES=1;	      //开串口中断
}

void main (void)  //主函数
{
	init_uart();  //首先对串口进行初始化
	while(1)
	{
		while(!RI);  // 等待收接中断标记位RI置1
		RI=0;      // 用软件对RI清0,取消此中断申请；方便下一个数据的接收。
		i=SBUF;   // 用变量i把SBUF接收到的数据读走
		switch(i)   //发光二极管的控制语句
		{
			case 0x01 :D0=~D0;break;  //和i的数据比对，把相应的发光二极管点亮
			case 0x02 :D1=~D1;break;
			case 0x03 :D2=~D2;break;
			case 0x04 :D3=~D3;break;
			case 0x05 :D4=~D4;break;
			case 0x06 :D5=~D5;break;
			case 0x07 :D6=~D6;break;
			case 0x08 :D7=~D7;break;
		}
	}
}