Hallo,

Ik ben bezig met een projectje waarbij ik via de PC data naar een pic (16F819) stuur. Om de data goed over te krijgen moet ik na iedere byte die ik stuur het register van de PIC leeg lezen. Is dit inderdaad zo of heb ik iets verkeerd gedaan waardoor het zo uitkomt.

delphi code voor zenden en ontvangen (PC)


procedure  Tspi.Transmit_Byte(Data:byte);
var P: array[0..7] of byte;
    Error:byte;
	  c,e:integer;
    value,bitValue:byte;
    tmp:byte;
begin
	  // zet de 8 bits van data in P 1..8 als 1 en 0
Value := 0;
BitValue :=128;

e := 128;
for c:=0 to 7 do
begin
 P[c] := Data ;
 P[c] := P[c] and e;
 P[c] := P[c] shr (7-c);
 e:= e div 2;
end;
		//maak een byte
		//na start of verzenden van een byte  SCLK = hoog
                // data moet stabiel zijn tijdens opgaande flank

SCLK:=HIGH;              // for sure, it should be high
Delay2(10);
SS:=LOW;            // Select slave

for c:=0 to 7 do
begin
 SDO:=P[c];
 Delay2(50);
 SCLK:=LOW;
 Delay2(50);
 SCLK:=HIGH;
 Tmp := SDO;                  // BitValue start met 128
end;
Delay2(50);
SS:=HIGH;              // Deselect slave
Tmp:=Receive_byte;
{if not (tmp=data)then
 showmessage(inttostr(tmp)+' ' + inttostr(data));
}
end;



function Tspi.Receive_Byte : byte;
var   Value, Tmp: byte;
      e, c, BitValue: byte;
begin
Value := 0;
BitValue :=128;
                                    // Data lezen op opgaande flank

SCLK:=HIGH;              // for sure, it should be high
SDO:=LOW;               // zet even laag anders is de stand afh. van laatst gezonden info
Delay2(10);

SS:=LOW;            // Select slave

for c:=0 to 7 do
begin
 Delay2(50);
 SCLK:=LOW;
 Delay2(50);
 SCLK:=HIGH;
 Tmp := SDO;
 if Tmp > 0 then  Value:=Value+ BitValue;     // Bin naar dec.
 BitValue:= BitValue div 2;                      // BitValue start met 128
end;                                     // En deelt steeds door 2

Delay2(50);
SS:=HIGH;              // Deselect slave
Result :=Value;
end;