Quelltextauszüge: Programmieren des Elektor-Flash-Boards zum 89S8252
procedure SPIout_MB ( Wert : Byte ); //Modul-Bus-Version var Stelle, n : Integer; begin Stelle := 128; {MSB zuerst} for n:=1 to 8 do begin if ((Wert AND Stelle) > 0) then TXD(0) { Daten an TXD/MOSI } else TXD(1); Delay (0.01); { Verzögerung } RTS (0); { Clock an (RTS) } Stelle := Stelle div 2; Delay (0.01); { Verzögerung } RTS (1); { Clock aus (RTS) } Delay (0.01); { Verzögerung } end; Delay (0.01); { Verzögerung } TXD (1); end; procedure SPIout ( Wert : Byte ); //Elektor-Version var Stelle, n : Integer; begin Stelle := 128; {MSB zuerst} for n:=1 to 8 do begin if ((Wert AND Stelle) > 0) then TXD(0) { Daten an TXD/MOSI } else TXD(1); Delay (0.01); { Verzögerung } RTS (1); { Clock an } Stelle := Stelle div 2; Delay (0.01); { Verzögerung } RTS (0); { Clock aus } Delay (0.01); { Verzögerung } end; Delay (0.01); { Verzögerung } TXD (1); end; procedure Prog (Adresse:Word; Daten: Byte); begin SPIout (hi(Adresse) * 8 + 2); SPIout (lo (Adresse)); SPIout (Daten); Delay (5); {5ms reicht} end; procedure TForm1.ButtonRunClick(Sender: TObject); var f :File of Byte; Zeile: String; r,wert :Byte; Anzahl: Byte; Adresse, n, i : Word; Code: Byte; begin if COM=2 then OpenCOM (pchar ('COM2:9600,N,8,1')); if COM=1 then OpenCOM (pchar ('COM1:9600,N,8,1')); AssignFile(f,'work.bin'); {$I-} Reset(f); {$I+} r:=IOResult; IF r = 0 then begin RTS (1); //Sclk=0; // nur MB, weil RTS > Sclk invertiert Delay (100); DTR (1); //RESET=1; Delay(100); SPIout ($AC); //Prog Enable SPIout ($53); SPIout ($00); Adresse :=0; Memo2.clear; Memo2.Lines.add (''); n := Memo2.Lines.count-1; Memo2.Lines[n] := '0000 '; while not Eof (f) do begin Read(f,Code); Memo2.Lines[n] := memo2.Lines[n]+' '+ByteToHex(Code); Prog (Adresse, Code); Delay (5); Adresse := Adresse + 1; If (Adresse mod 16) = 0 then begin if Memo2.Lines.Count > 260 then Memo2.Clear; Memo2.Lines.add (''); n := Memo1.Lines.Count -1; Memo2.Lines[n] := ByteToHex(Adresse div 256) +ByteToHex(Adresse and 255)+' '; end; end; CloseFile(f); TXD (0); DTR (0); RTS (0); end; CloseCOM; end;