Stránka 2 z 2

Napsal: 08 srp 2009, 18:27
od Johny_Servis
Takže:

Ten pøedchozí anonym je mùj.

1. Vzhledem k tomu, že mám Vdd=5V, tak jednomu bitu odpovídá 4,88mV = 48*10^(-4)

2. výsledek z pøevodu (který je v registrech ADRESL a ADRESH) si zkopíruju do svého 16bitového registru "resu"

3. pak bych registr "resu" vynásobil konstantou 48(dekadických), pøi 10 bit. A/D pøevodníku dostanu nejvyšší èíslo 49152, takže 16bit registr staèí.

4. Vydìlím tenhle registr konstantou 10000(dekadických) a mám volty dále 1000(dekad) a mám desetiny voltu...

problém je v tom, že neznám instrukci na násobení a dìlení - jak to mám udìlat?? nevíte?

Napsal: 08 srp 2009, 18:48
od Mendor
Tady jsou rutiny pro násobení a dělení. V levo na stránce zmáčkni "Matematika".

http://www.cmail.cz/doveda/procesory/index.htm

Napsal: 08 srp 2009, 19:06
od Návštěvník
4. Vydìlím tenhle registr konstantou 10000(dekadických) a mám volty dále 1000(dekad) a mám desetiny voltu...
To jsou divné poèty a efektivita kódu taky mizerná. Když to èíslo z pøevodníku posuneš o 6 bitù nahoru a vynásobíš èíslem 500 a dolních 16bitù výsledku zahodíš, tak máš rovnou výsledek v setinách voltu. Pak staèí 2 dìlení 10ti a máš výsledek na 3 platná èísla (tj. 0,00 až 4,99).

Napsal: 08 srp 2009, 19:51
od Johny_Servis
Anonym píše:
4. Vydìlím tenhle registr konstantou 10000(dekadických) a mám volty dále 1000(dekad) a mám desetiny voltu...
To jsou divné poèty a efektivita kódu taky mizerná. Když to èíslo z pøevodníku posuneš o 6 bitù nahoru a vynásobíš èíslem 500 a dolních 16bitù výsledku zahodíš, tak máš rovnou výsledek v setinách voltu. Pak staèí 2 dìlení 10ti a máš výsledek na 3 platná èísla (tj. 0,00 až 4,99).
Doufám že máš pravdu - já už se celkem ztratil až to bude hotové, tak napíšu jak to dopadlo

Jinak zajímal by mì tvoje mozkové pochody jak si na to pøišel - zdá se to být velmi efektivní a šikovné, moje myšlení je bohužel pøíliš tìžkopádné

Napsal: 08 srp 2009, 20:11
od Návštěvník
Po x letech programování v assembleru buï odpadneš nebo zaèneš i u obìda pøemýšlet, do kterého registru dáš vidlièku, do kterého nùž a øízek zásadnì krájíš na poèet kusù, který je mocninou dvou :D

Napsal: 08 srp 2009, 20:23
od Návštěvník
ještì by mì zajímalo jestli je nìjaká prostý pøíkaz pro dìlení v assembleru pro PIC
motorola ho mìla - tady sem zatím nic nenašel

jde mi o to dìlení 10 - jak jednoduše 16bitový registr vydìlit 10ti?

Napsal: 08 srp 2009, 20:46
od caven
co nenaprogramuješ to není, že to motorola měla neznamená, že to budou mít všechny. 8051 o atmelu měla taky dělení v instrukční sadě a AVR už ho nemá, a musí se naprogramovat, ale je to chvilka práce ne ?

Napsal: 08 srp 2009, 20:54
od Johny_Servis
Už od toho sedím od rána a mám hlavu jako balón a blbì se mì pøemýšlí :-)

Napsal: 08 srp 2009, 20:56
od Mendor
O pár řádků nahoru jsem ti napsal odkaz na hotové rutiny pro násobení i dělení 16bit čísel ...

Napsal: 08 srp 2009, 21:04
od Johny_Servis
Mendor píše:O pár øádkù nahoru jsem ti napsal odkaz na hotové rutiny pro násobení i dìlení 16bit èísel ...
Ten odkaz ale nejede ani v Opeøe ani v IE (i s vypnutým FW)

Napsal: 08 srp 2009, 21:06
od Johny_Servis
zpìt - už to jede: Norton je prostì sfiòa s rùznýma nastaveníma

Napsal: 08 srp 2009, 21:20
od Maskot
Odkaz sice funguje lec viz.priloha.

Napsal: 09 srp 2009, 08:32
od socern
Také zde jsou matematické rutiny:
www.s-o.webnode.cz/matematika-pro-pic

Napsal: 09 srp 2009, 11:50
od Johny_Servis
Mám tu teï problém
dle datasheetu PIC16F877A by mìlo být na stránce 0 (bank 0) od adresy 0x20 po adresu 0x7F 96 osmibitových univerzálních registrù
tak si je tedy postupnì zabírám pro své pomocné registry stylem

regA equ 0x20
regB equ 0x21
...

problém je v tom, že watch (v MPLABu) je neumí zobrazit (píše "not found"), jelikož tam mám i vícebajtové registry, rozhodl sem se to pøepsat na:

cblock 0x20
regA
regB
regC:4
...
endc

stále to však watch neumí zobrazit a ani program po nahrání do PICu nechodí jak by mìl. Jak to tedy s tìmito registry je (upozoròuji že si peèlivì hlídám pøepínání mezi jednotlivími pamì￾ovými bankami)