89c51 32-bittinen Math laskenta

G

garg29

Guest
Hei ystävät, kiitos, auttaa minua matematiikka ongelma, minun täytyy laskea: - (55299539) / ((* 100 + b) * 61375 + c) missä = 0-8 b = 0-100 C = 0 61375 käyttäen 89c51 kokoonpano progrmming. Mitä algoritmi minun pitäisi käyttää? Voiko joku antakaa minulle koodin? kiitos.
 
Hei Se on hyvin yksinkertaista. Kopioi funktion uuden projektin C-kääntäjä kuten Keil, IAR ... Unassembly koodia.
 
Kuten kaikki puhelinnumerot eqasion ovat desimaali ja mikrokontrolleri suorittaa laskutoimituksia HEX numerot sinun täytyy muuntaa nämä numerot desimaali HEX. Numeroita jopa 255D ongelmaa ei ole (ja b). Iso costance kuten 55299539 voit käyttää Windows laskin ja muuntaa ne HEX: 55299539 d = 03h 4BH 0CDh 0D3h 61375 d = 0EFh 0BFh Mutta c joudut kavenna HEX Converter aliohjelmaan. Yritä löytää se jonnekin, jos ei tein sitä jonkin aikaa ennen ja voit olla se .. Ottaa nämä luvut muunnetaan yrittää löytää 40-bit/24bit jako, mutta ensin sinun täytyy laskea suluissa käytössä 32-bittinen MUL ja SUM aliohjelmia .. Hieman pitkä, mutta ei mahdoton ..
 
Kiitos paljon vastaaminen. "IanP" Taidan tarvita rutiineja 32-bittinen divisioonan myös. todella Haluan suunnitella rpm mittari (kierroslukumittari) vaihtelevat 1 rpm 10000 rpm. Aion käyttää 11.0592MHZ xtal, ja levy on asennettu moottorin akselille, jossa on yksi reikä IR kooderi-dekooderi. Tämä jos i vastoin kahden succesive pulssin voin hankkia enintään readibilty on 843,4 rpm, yhtään hitaampi tämä tekee laskurin ylivuoto. joten 1 rpm aion tehdä CSS kaksi useampaa rekisteriä (R1, R0 yksi upto 100 ja muut upto 8), joka kasvaa sen jälkeen, kun kukin ylivuoto sitten toiseen rekisteriin välein. niin, 60 * 1000000 * 1000 ------------------------------------------- ------------------ = rpm [(R0 * 100 + R1) * 61444 + Counter0] * 1085 aion oikealla tavalla, auttakaa minua. Kiittää teitä etukäteen.
 
Moottorin kierrosluku ei tarvitse kovin monimutkaisia ​​calculatons .. Ensin tarvitaan 60sec aikaa pohja enkä halua toistaa tätä asiaa vielä kerran, löydät sen tässä foorumissa kohdan "1 sekunti keskeytystä 8051?" (Haku "1s ja 8051") Kun olet 1s aikaa pohjan moninkertaistaa sen 60 1min. Sillä 1rpm tarvitset vähintään 1 m aikaan pohja .. Ja nyt vain laskea pulsseja moottorin akselista .. Määrä pulsseja 1m on RPM. Tarvitset 2 rekisterien saada 10000 merkki .. Joten matemaattiset operaatiot mukana ovat: summa laskea Time Base SUM laskea pulsseja.
 
Vaihtoehto (kalliimpi): Pulse kooderilta -> taajuus jännite (IC, egVFC320 TI / BurrBrown) -> ADC -> 8051
 
Kiitos paljon vastaaminen. "IanP" Mielestäni tapa kerroit on epäilemättä aivan oikea, mutta mielestäni virkistävä korko olisi 1 minuutti, joka olisi hidas. oikea? ja virhe voi lisätä enintään 1 rpm!
 
Voit tehdä sen joka 0.1s, 1s jne. ja mulitply tuloksen 600, 60 .... Insread O ottaa vain 1 reikä anturin voi olla 2,3,4, .. reiät ja tämä antaa sinulle useita pulsseja kierrosta kohti. Of-the-shelf pulssianturit ovat 100, 200, .. , 1000 + PPR niin virhe on vähennetty hyväksyttävään minimiin ..
 

Welcome to EDABoard.com

Sponsor

Back
Top