Dlouhe deleni na x51
Vaclav Danecek
danecek
Středa Březen 17 14:53:44 CET 2004
Delal bych to uplne jinak, chytra tabulka 1k*8, normalizace posuvem do leva
(nasobeni 2*), pocet normalizaci = nejvyssi adresove bity, zbytek linearne
nizzsi bity, vystup dve BCD cislice.
Tabulku spocitate jednou, prevod vyjde na par instrukci.
Danhard
----- Original Message -----
From: "Libor Kavan" <lkavan@krkonose.cz>
To: <hw-news@list.gin.cz>; <hw-news@list.gin.cz>
Sent: Saturday, February 08, 2003 2:25 PM
Subject: Re: Dlouhe deleni na x51
> At 13:07 8.2.2003 +0100, Vaclav Danecek wrote:
> >A kdyz udelate normalizaci posunem, tak vam bude stacit deleni DIV16 z
> >http://www.mcu.cz/modules/news/article.php?storyid=298
>
> No mozna bude lepsi,kdyz napisu k cemu to ma byt a treba nekoho napadne
> jeste lepsi reseni celeho problemu. Jde o mereni rychlosti pomoci 2 IR
> zavor. Pri preruseni prvni se spusti timerak a pocita dokud neni prerusena
> druha. Tak zmerim cas na zname draze a potrebuju spocitat rychlost. Ta
bude
> 1-99km/h (dvoumistny displej). Problem je v tom,ze potrebuju mit u Atmelu
> krystal 11.0592 kuli seriaku. A taxme s kolegou premysleli,jak daleko dat
od
> sebe zavory abychom meli co nejjednodussi vypocet. Nase uvaha je
takova:Pri
> rychlosti 1m/s musi za 1000 tiku timeraku ujet vzdalenost 1.085 metru.
Abych
> nemusel delit 1000,ale 1024 (shr 7) tak jsme udelali 1.085*1.024 =1.111
> metru. A abychom si zjednodusili prepocet m/s -> km/h zmensili jsme
> vzdalenost zavor: 1.111/3.6=0.3086 metru. Algorytmus jsme si pro kontrolu
> odladili v Pascalu na PC. Tady je:
>
> *************************************
> program KUZELKY;
>
> {$E+}{$N+}
> uses crt;
>
> const krystal=11059200;
> dist=0.3086419753;
>
> var speed:real;
> tik:real;
> cas:real;
> poctik:longint;
> pom,pom1:WORD;
>
> begin
> repeat
>
> write('Zadej rychlost koule v km/h: ');
> readln(speed);
> tik:=1/(krystal/12);
> writeln('1 Tik (sec): ',tik:1:16);
> cas:=dist/(speed/3.6);
> writeln('Cas v sec: ',cas:1:8);
> poctik:=round(cas/tik);
> writeln('Pocet tiku: ',poctik);
>
> pom:=poctik shr 7;
> writeln('Pocet tiku / 128: ',pom);
>
> { krat 1024 (pro zvyseni presnosti v celych cislech) a krat 1000 (nevim
> proc)}
> { nekde to litalo o 1000, mozna kvuli prevodum us -> ms -> s nebo m -> km
> nebo nevim }
> pom:=1024000 div pom;
> writeln('1 / pom: ',pom);
>
> { slozeni pom shl 3 (jak bylo) a nasledne shr 10 (kvuli predchozimu
> nasobeni 1024)}
> { pom:=pom shl 3;}
> { pom:=pom shr 10;}
> pom:=pom shr 7; { pom/128}
> writeln('Na displeji: ',pom);
>
> port[$378]:=255;
> port[$378]:=254;
> delay(1);
> port[$378]:=255;
> delay(round(cas*1000)-1);
> port[$378]:=255;
> port[$378]:=253;
> port[$378]:=255;
>
> until speed=0;
> end.
> *************************************
>
> Jestli ma nekdo lepsi napad jak zmerit rychlost,budu velice rad za kazdou
> radu. Diky...
> S pozdravem with best regards
> ------------------------------------------------------------
> EZA-TV Vrchlabi
> Libor Kavan Phone & Fax:+420 438 521 232
> Dlouha 421 Fax:+420 438 521 262
> 543 03 Vrchlabi III mailto:lkavan@krkonose.cz
> Czech Republic http://www.krkonose.cz/eza-tv
> ------------------------------------------------------------
>
Další informace o konferenci Hw-list