Fórum témák
» Több friss téma |
A bcd-decimál átalakítót nyugodtan kösd rá közvetlenül
a pic lábaira . Ha decimális adat jön ki a picből (és jó a program) akkor nem lesz lebegő láb ..
Köszönöm ez jó hír..
Nálam csak 4800 al megy a GPS és a GSM is, ezek szriont nem lehet gond. Valami szűrést tettél valamelyik oldalra? Soros induktivitás, valami kis értékű kondi a gnd felé...stb? Vagy nem kell? Hogy kéne ezt "jól csinálni"..?
Üdv!
Van ez a kivonás: Bővebben: Link Az lenne a kérdés, hogy minek bele a btfss STATUS,C incfsz SourceH,W sorok, elvégre ahogy tapasztaltam, hogy ha a kivonandó nagyobb mint a kivonó (az eredmény pozitív), akkor mindig 1-et ad a Carry bit, tehát átugorja az incfsz utasítást. Ha meg kisebb (az eredmény negatív szám lenne), akkor meg hülyeséget kapok eredményül. Vagy milyen esetben lehet még 0 a Carry bit? Pl.: 20760-36502=-15742, és ehelyett 49794-et ad. Holott azt várnám, hogy ugyanazt adja vissza, csak pozitívba, vagy ha belefér a tartományba, akkor jelezze a legfelső bittel az előjelet. Mert ha kiveszem a két sort, akkor csak 256-tal kapok többet eredményül, mintha benne hagytam volna. Valaki fel tudna világosítani?
Igazad van, nekem is 4800-zal ment. Nem volt rajta semmi szűrés, simán ment a kábel az RX/TX lábra. (Persze a GPS-modulon belül valószínűleg volt szűrés gyárilag.) Egyébként én egy régi PMB-248-as GPS-szel csináltam.
Idézet: Emlékeim szerint kivonáskor fordítva működik a dolog, tehát NEM ugorja át. „akkor mindig 1-et ad a Carry bit, tehát átugorja az incfsz utasítást.”
Pedig szimulátor szerint átugorja.
Pl. 8-ból 2-t vonok ki akkor a Carry = 1, de ha 2-ből 8-at vonok ki, akkor a Carry 0. Idézet: „Pl.: 20760-36502=-15742, és ehelyett 49794-et ad...” Az eredmény teljesen jó, mivel a legfelső bitje 1, azaz negatív a szám és 65536 - 49794 = 15742. Idézet: Akkor mi is a probléma? Akkor van áthozat, amikor a Carry bit 0, mert akkor nem ugorja át az inkrementáló utasítást. „Pl. 8-ból 2-t vonok ki akkor a Carry = 1, de ha 2-ből 8-at vonok ki, akkor a Carry 0.”
Szép estét minden kedves fórumozónak!
Szeretnék építeni egy labortápot és nagyon meg tetszett egy PIC-es panelmérő, csak nincs hozzá HEX fájl)én legalábbis nem találom). Az lenne a kérdésem, hogy valakinek talán meg van-e? Nagyon jó lenne, mert egyszerű és nagyszerű! ITT VAN-NIKöszönöm szépen előre is! mhatyalyak
Igazad van, közben már én is rájöttem, hogy a negatív számokat máshogy ábrázoljuk, nem csak kibiggyesztjük elé az 1-est (régen tanultam már a számábrázolást
). Bár lehet az én esetemben pont nem ilyen megoldásra van szükség, mert csak két szám különbsége kellene előjel nélkül. De még át kell gondolnom.
Már semmi, csak annyi volt a probléma, hogy fordítva írtad.
![]() Én ezt írtam: Idézet: „ha a kivonandó nagyobb mint a kivonó (az eredmény pozitív), akkor mindig 1-et ad a Carry bit, tehát átugorja az incfsz utasítást.” Te meg erre ezt: Idézet: „kivonáskor fordítva működik a dolog, tehát NEM ugorja át.” Pedig átugorja. Kivéve negatív eredménynél.
Szia!
Még egy byte- ot használni vagy az eredmény összes bitjét megálni és 1 -et hozzáadni, ha a legfelső bit 1.
Köszi ezt észre sem vettem, hogy a kettes komplemens visszaadja az eredetit.
De ahogy feljebb írtad egyszerűbben is meg lehet csinálni kivonással (65536-eredmény):
Ez 2 utasítással kevesebb, ha minden igaz működnie kell, de még nem teszteltem le.
Javítok: csak 1 utasítással kevesebb, de nálam most számít a sebesség.
De nem kezeli a lehetséges átviteleket...
És ezt hogy kell benne értelmezni?
incf comf eredmenyH,f Ezt most csak elírtad, vagy lehet benne ilyet is csinálni? Ez most 1 vagy 2 utasításnak számít? Minek veszed még egyszer az eredmenyH negáltját, ha már előtte negáltad? És milyen átvitelre gondolsz? Példát tudsz mondani amit rosszul fog kiszámolni?
Elírtam... Abba a sorba nem kell a comf, csak
incf eredmenyH,f
Ne baj, én is elírtam a subwf-et, mert nem lehet betenni közvetlenül az eredménybe, előbb ki kell rakni a W-be, tehát akkor meg már lassabb lesz.
Idézet: Valószínűleg csak félig olvastam el a mondatodat: "ha a kivonandó nagyobb...", s erre válaszoltam. „Már semmi, csak annyi volt a probléma, hogy fordítva írtad.” A félreértést tisztázandó, az "a - b" műveletben b a "kivonandó" a pedig a "kisebbítendő". Szerintem ezért nem értettük egymást.
Szia!
Idézet: „Példát tudsz mondani amit rosszul fog kiszámolni?” Ha az eredmeny változó 0xFF00 értékkel indul, akkor a decf eredmeny,W átvitelt generál. Ez itt inkább decf eredmeny,f akarna lenni, akkor 0xFFFF keletkezne az eredményben. Ha a magas és az alacsony byte -ból is levonunk 255 -öt, 0 -t kapunk, pedig a helyes eredmény 0x100 azaz 256.
Szia!
Egy LCD-re szeretném egy regiszter értékét kiírni, de nem tudom pontosan hogyan kell osztani a számot a megfelelő helyi értékekhez. A gondom a következő: ha mondjuk a tízes helyiérték kell, akkor el kell osztani 10-el, de ha a szám több mint kétjegyű volt, akkor az eredmény sem egyjegyű lesz... hogyan lehet az osztás eredményeként csak a legkisebb helyiértéket megtartani (mikro)C-ben?
Szia!
Nem használon a mikro C -t. De C -ben van szöveggé konvertáló rutin (a printf ugyan szószátyár, de talán van itoa vagy hasonló). Keress a topikban, feltöltöttek már jónéhányat... Indulj hátulról. Vedd az eredeti számot és tedd egy másik változóba. Cilkus: Vedd a szám 10 -es modulóját. Jegyezd meg a számjegyet. Lépj a nagyobb helyiértékre. Oszd el a számot 10 -zel. Ha a szám még nem 0, menj a ciklus elejére. A legnagyobb helyiértéktől kiindulva írd ki a számot...
Ebben a hozzászólásomban ismertettem azt a függvényt, amit én használok. Nem MikroC, de ez most lényegtelen.
Idézet: „A gondom a következő: ha mondjuk a tízes helyiérték kell, akkor el kell osztani 10-el, de ha a szám több mint kétjegyű volt, akkor az eredmény sem egyjegyű lesz... hogyan lehet az osztás eredményeként csak a legkisebb helyiértéket megtartani (mikro)C-ben?” Maradek kepzessel szokas ezt csinalni, azaz a % jellel... Tehat a "szamjegy = szam % 10;" 0-9 megadja neked a legutolso szamjegyet. Valami ilyesmi fuggvenyt tudsz irni, csak at kell alakitanod a sajat igenyeidnek megfeleloen (pl string buferbe helyezes helyett az LCD-re kozvetlen kiirod jobbrol-balra pozicionalgatassal)
De amugy meg hasznald az itoa fuggvenyt vagy printf / sprintf, lehet azok jobban optimalizaltak, mint ez, es meg csak fel sem kell talalnod hozza a Spanyol viaszt...
Sziasztok.
Olyan problémám van, hogy van egy 4x7 szegmenses kijelzőm és azt szeretném úgy vezérelni hogy a programban soros vonalon kap egy számot a PIC majd azt kiírja a kijelzőre. Tehát a valós problémám az hogy a kapott számot hogy tudnám felbontani majd így egyesével a kijelzőre vinni. Írtam már olyan programot, hogy gombnyomásra fel-le lépteti a számokat, de ott nem kellett különösebb trükk. Tehát a kijelzéssel nem lesz problémám, csak maga a szám felbontása jelent problémát helyiértékekre. Valaki tud ebben nekem segíteni? Vagy van valakinek egy forráskód részlete? (C nyelven programozok)
Szia!
Szóval ha osztás helyett a %-jelet használom, akkor írhatok, 10-et, 100-at, 1000-t is, az utolsó számjegyet fogom megkapni az osztásból, ami nekem kell? A kiírást pl így gondoltam: lcd_out(1,1,48+[a kiírandó érték]), vagyis lcd_out(1,1,48+változó % 10). Ha az egyesek kellenek, akkor ezt írjam: "változó % 1"? Bocs, de még csak ismerkedek a programozással. Kösz a választ mindenkinek.
Szia!
Idézet: Ennek nincs sok értelme, minden egész szám osztható 1 -gyel, így az eredmény mindig 0.„"változó % 1"” Idézet: „...szóval, ha osztás helyett a %-jelet használom, akkor írhatok, 10-et, 100-at, 1000-t is...” Nem. A tizes számrendszerben a legutolsó helyiértéken mindig a szám % 10 érték áll. A tizesek helyén levőt nem a szám % 100 alakban kell felírni, hiszen ennek eredmény kétjegyű, hanem (szám /10) % 10 - egész osztást alkalmazva. Az százas helyiértékre (szám /100) % 10. Szegény kontroller már megint csak oszt és oszt... Helyiértékek számának kétszerese -1 osztást végez el. Már többször linkeltem egy léptetős - korrigálós megoldást, ahol nincs egyetlen osztás sem... |
Bejelentkezés
Hirdetés |




Nálam csak 4800 al megy a GPS és a GSM is, ezek szriont nem lehet gond. Valami szűrést tettél valamelyik oldalra? Soros induktivitás, valami kis értékű kondi a gnd felé...stb? Vagy nem kell? Hogy kéne ezt "jól csinálni"..?
Nagyon jó lenne, mert egyszerű és nagyszerű!
