|
| tidsmåling Fra : Calle. |
Dato : 21-03-03 05:46 |
|
Hej
Hvordan måler jeg tiden på en puls i turbo pascal 7.0
Jeg får et firkantet signal, hvor jeg skal måle henholdsvis ON-tiden og
OFF-tiden.
signalet kommer ind på printerporten. Jeg kender godt at læse på porten,
men det med at måle tider er jeg totalt uvidende om, så der må gerne
være et på kommentarer til eksemplerne.
--
Automatik Mekaniker
Calle
| |
Finn Bindeballe (21-03-2003)
| Kommentar Fra : Finn Bindeballe |
Dato : 21-03-03 08:17 |
|
hej der.....
hvis du køre DOS er det lige til.... du kan bruge et timer tick, som køre
med 55ms ( 18.2 gg/sec) Denne hastighed kan sættes op, men det betyder at
uret kommer til at gå forkert.
Hvis du køre win, kan du ikke lave den slags triks.....
/finn
| |
Calle. (21-03-2003)
| Kommentar Fra : Calle. |
Dato : 21-03-03 13:12 |
|
Finn Bindeballe wrote:
> hej der.....
>
> hvis du køre DOS er det lige til.... du kan bruge et timer tick, som
> køre med 55ms ( 18.2 gg/sec) Denne hastighed kan sættes op, men det
> betyder at uret kommer til at gå forkert.
>
Jeg skal køre ren DOS. Hvordan Laver jeg et timer tick, kan du ikke
komme med et eksempel, da jeg er grøn i det.
--
Automatik Mekaniker
Calle
| |
Finn Bindeballe (21-03-2003)
| Kommentar Fra : Finn Bindeballe |
Dato : 21-03-03 14:30 |
|
hej der ........
her er der en stump som jeg har brugt som udgangspunkt for et eller
andet..........kan ikk elige huske hvad....
haaber at du kan bruge det.....
/Finn
---------------------------------------------------------------------------------
{ $M 8192,0,0}
uses
Crt,dos,graph;
const
TimerClk = 1193180;
Interval = 100; { N›jagtighed - 1/100 af et sekund }
var
a,b,c : word;
aa,bb : word;
r1,r2 : boolean;
ch : char;
Int1CSave : Pointer;
int8save : pointer;
Count : Word;
FastTick : LongInt;
MASTER : Word; { MASTER og TTC benyttes til at f† det normale
ur }
TTC : Word; { til at g†
korrekt. }
ll : longint;
ll1 : longint;
grDriver : Integer;
grMode : Integer;
ErrCode : Integer;
{$F+,S-,W-}
procedure Ti1; interrupt; { interrupt til normal drift }
begin
if a > 600 then begin
if r1 then begin aa:=-random(5); r1:=false; end
else
begin aa:=random(5); r1:=true; end;
end;
if b > 400 then begin
if r2 then begin bb:=-random(5); r2:=false; end
else
begin bb:=random(5); r2:=true; end;
end;
setcolor(0);
circle(a,b,10);
a:=a+aa;
b:=b+bb;
setcolor(4);
circle(a,b,10);
asm
Mov AL,20H
Out 20H,AL
end;
end;
{$F-,S+}
Procedure SetTimer(Count : Word);
Begin
FastTick := 0;
MASTER := Trunc(Interval/(1193180/65536));
TTC := MASTER; { Antal ticks f›r kald af gamle rutine }
Port[$40] := Lo(Count);
Port[$40] := Hi(Count)
End;
procedure init;
begin
Count := TimerClk Div Interval; { Pga. rest bliver intervallet }
GetIntVec($8,Int8Save);
SetIntVec($8,Addr(ti1));
settimer(count);
end;
begin
clrscr;
init;
a:=0;b:=0;
grDriver := Detect;
InitGraph(grDriver, grMode,' ');
ErrCode := GraphResult;
writeln('Starter');
SetIntVec($8,Addr(ti1));
repeat
inc(ll);
until keypressed;
delay(10);
settimer(0);
SetIntVec($8,Int8Save);
clrscr;
end.
| |
Calle. (21-03-2003)
| Kommentar Fra : Calle. |
Dato : 21-03-03 14:39 |
|
Finn Bindeballe wrote:
> hej der ........
>
> her er der en stump som jeg har brugt som udgangspunkt for et eller
> andet..........kan ikk elige huske hvad....
>
> haaber at du kan bruge det.....
Hej jeg fandt lige dette eksempel, der ser mere overskueligt ud, men
hvordan for jeg det til at køre sålænge et signal en high (on).
Program Timer;
uses CRT;
var
Starttime:longint;
SystemTimer: Longint absolute $0040:$006C;
procedure StartTimer;
begin
Starttime:=SystemTimer;
end;
function TimePassed:real;
begin
Timepassed := (SystemTimer-Starttime)/18.206759747;
end;
begin
clrscr;
StartTimer;
repeat
gotoxy(10,10);
write(TimePassed:15:10);
until keypressed;
end.
--
Automatik Mekaniker
Calle
| |
|
|