#include<reg51.h>
char LEDS[4];			//регистр возможных состояний светодиодов
char cmd;			//комманда, принятая по последовательному порту

void init (void)
{
LEDS[0]=0x01;
LEDS[1]=0x02;
LEDS[2]=0x04;
LEDS[3]=0x08;
TMOD=0x20;			//Настройка Т1 на режим работы с автозагрузкой
TH1=-3;				//Настроить последовательный порт на скорость 9600 бит/с
TR1=1;				//Запустить таймер
SCON=(1<<6)|
	(1<<4);			//Настроить порт в 8бит асинхронный режим с разрешением приема
IE=(1<<7)|
	(1<<4);			//Разрешить прерывания в частности от последовательного порта
}

void obrabotka (void)
{
cmd=SBUF;   			//Скопировать принятый байт в cmd
RI=0;				//Обнулить флаг принятого байта
switch (cmd)
{
case 0x31: P1=LEDS[0];
case 0x32: P1=LEDS[1];
case 0x33: P1=LEDS[2];
case 0x34: P1=LEDS[3];
}
}

void main (void)
{
for(;;)
{
init ();
if (RI) obrabotka ();		//Если порт принял байт, запустить подрограмму обработки принятого
}
}
