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;