Програмна реалізація на мові AVRPascal
Код:
program V05;
{$NOSHADOW}
{ $W+ Warnings} {Warnings off}
Device = mega103, VCC=5;
Import SysTick, Disp7sPort;
From System Import LongWord, LongInt, Float;
Define
ProcClock = 12000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0064, iData;
FrameSize = $0064, iData;
Disp7sPort = PortB, Mux, 0; {multiplexed, Portbit}
DispMode = Wrap;
DispDigits = 3, iData;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
const n=128;
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var x:array[0..n] of byte; // масив змінних вибірки x
i:integer;
kx,mx,rx,dx:float;
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
EnableInts;
loop
write(dispout,#10+'read'); //виводимо повідомленн про зчитування масиву
for i:=1 to n do
x[i]:=PORTB; // зчитуємо масив з порта B
udelay(2); // 1/32000=31мкс 31/10-1=2 - затримка
endfor;
kx:=0;
for i:=1 to n do
kx:=kx+float(x[i]); //обчислюємо суму елементів вибірки
endfor;
mx:=kx/n; //знаходимо математичне сподівання
for i:=1 to n do
rx:=rx+pow(float(x[i])-mx,2); // знаходимо суму квадрату різниця i-ого значення вибірки та математичного сподівання
endfor;
dx:=rx/(n-1); // знаходимо незміщену вибіркову дисперсію
dispclear;
write(dispout,#10+floattostr(dx)); // виводимо результат обробки масиву на семисегментні індикатори
mdelay(5000); // організовуємо затримку 5с
endloop;
end V05