program USART;
Var tomb : array[1..64] of byte;

Procedure Start;
 begin
  USART_Init(9600);
  TRISB := 255;
  TRISA := 255;
  PORTB := 0;
  PORTA := 0;
 end;

Procedure Usart;
Var adat,i, cim : byte;
 begin
 cim := 0;
 for i := 0 to 63 do
   begin
   adat := Eeprom_read(cim);
   USART_Write(adat);
   cim:=cim+1;
   end;
  Delay_ms(5000);
 end;

 Procedure Usart_dos;
  begin
   USART_Write('K');
   USART_Write('i');
   USART_Write('l');
   USART_Write('é');
   USART_Write('p');
   USART_Write('é');
   USART_Write('s');
   USART_Write('!');
   USART_Write('!');
   USART_Write('!');
  end;

Procedure Usart_save;
var i : byte;
 begin
 for i:=0 to 63 do
   begin
   EEprom_write(i,tomb[i]);
   end;
 end;

Procedure Usart_beker;
var szamlalo : byte;
  begin
  szamlalo:=0;
  Delay_ms(200);
  USART_Write('/');
  while true do
    begin
    if USART_Read = '?' then
      begin
      Usart_dos;
      exit;
      end;
      
    if USART_Data_Ready = 1 then
      begin
      tomb[szamlalo]:=USART_Read;
      delay_ms(40);

      if szamlalo = 64 then
        begin
        Usart_save;
        Usart_dos;
        exit;
        end;
       
      end;
    end;
  
  end;

begin
Start;
while true do
  begin
   if USART_Data_Ready = 1 then
     begin
      if USART_Read = 'O' then
      Usart;
      if USART_Read = 'S' then
      Usart_beker;
     end;
  end;
end.