Ein Randomize(), könnte man mit einem offenen Analog-Eingang machen.
Was auch noch ein Problem ist, bei einem Zahlenbereich von 0-5 ist die Genauigkeit gut genug. Aber ruft man Random zB. 65'000 auf, dann kommen Zahlen vom Bereich 0-536 doppelt so viel.
Gibt es besser Lösungen ?
Code: Alles auswählen
var
rnd: UInt16;
procedure Timer0_Interrupt; public Name 'TIMER0_OVF_ISR'; interrupt;
begin
Inc(rnd);
end;
function Random(l: byte): byte;
begin
Result := rnd mod l;
end;
begin
// Timer 0
TCCR0A := %00; // Normaler Timer
TCCR0B := %001; // Clock / CPU
TIMSK0 := (1 shl TOIE0); // Enable Timer0 Interrupt.
UARTInit;
asm Sei end; // Interrupts einschalten.
repeat
for i := 0 to 100000 do asm Nop end;
Str(Random(6) + 1: 4, s);
UARTSendString(s);
until 1 = 2;
end.