procedure SPI_Transfer(var dout,din:array[0..2]of byte;len:byte);
var
        cnt: byte;
begin
        for cnt:=0 to len-1 do begin
                SPDR:=dout[cnt];            //Sendebyte ausgeben
                while (SPSR.7)=0 do         //SPIF prüfen, fertig bei 1
                nop;
                endwhile;
                din[cnt]:=SPDR;         // Byte einlesen
        endfor;
end;
//------------------
//   MCP_INIT;
   len:=3;
   excl(MCP_sel);
   udelay_1(1);
   dout[0]:=$40;              // OP-code schreiben
   dout[1]:=IODIRA;           // Richtungsregister
   dout[2]:=$00;              // alle bits auf output
   SPI_Transfer(dout,din,len);
   dout[0]:=$40;              // OP-code schreiben
   dout[1]:=IODIRB;           // Richtungsregister
   dout[2]:=$FF;              // alle bits auf input
   SPI_Transfer(dout,din,len);
   incl(MCP_sel);

  loop

    inc(Wert_neu);
//    MCP_out(MCP_code,GPIOA,Wert_neu);

    len:=3;
    excl(MCP_sel);
    dout[0]:=$40;             // OP-code schreiben
    dout[1]:=GPIOA;           // Richtungsregister
    dout[2]:=Wert_neu;              //
    SPI_Transfer(dout,din,len);
//    MCP_wert_in:=(din.2);
    incl(MCP_sel);

 // Einleseversuch
    len:=2;
    excl(MCP_sel);
    dout[0]:=$41;             // OP-code schreiben
    dout[1]:=GPIOB;           // Richtungsregister
    SPI_Transfer(dout,din,len);
    MCP_wert_in:=(din.1);
    incl(MCP_sel);