Fórum témák
» Több friss téma |
Amikor egy tömböt lefoglalsz az a memóriába valahova bekerül előtte és utána is vannak adatok. Ha 7 nél többet írsz bele akkor is ott lesznek a memóriában csak a 7.dik cím után.Magyarul a tömb egy memória címre mutató pointer.
valami[7] 0x2000 címtől kezdődik és a 0x2006 címig tart. de ha nem figyelsz akkor te kérheted a valami[45] tömb elemét is. Csak a kezdő címe a fix. valami[0] 0x2000 valami[1] 0x2000+1 . . . . valami[20] 0x2000+20
Senki nem tud tippeket adni, vagy ennyire rossz volt a kérdés?
Az lehet a gond, hogy olyat kérdeztél mint ha: "Melyik autó a legjobb? vagy Melyik kaja a legfinomabb?" Nincs tuti recept. Tudod: kinek a papné, kinek a paplan...
oké a címzés értem amúgy assemblyvel kezdtem, csak nem olyan régen próbálkozok a c-vel mert csak hamarabb össze lehet hozni a dolgokat csak van 1-2 két érdekes dolog...
csak azt nem értem a lcd_out ,hogy olvassa ki a többi karaktert unsigned char Lcd_temp1[6]; signed char K1[7]; // 1 számláló kezdõ érték res1 = atol(K1); // itt möködik LongIntToStrWithZeros(res1, Lcd_temp1); // elmentem a késõbbi ellenõrzéshez LCD_Out(1, 1, Lcd_temp1) ; mert itt a lcd_temp1 tudja hol a vége addig olvas kezdőcím+7 karakter de a ha lcd kiíratom akkor még kapok plusz 4 darab nullát de nem ez is a gondom hanem atol csak enter ellenőrzésnél működik később már nem bírom át alakítani hogy helyes eredményt kapjak...
Hasznaldd a C18-at: Azt a Microchip keszitette es rengeteg mintaprogramot fogsz talalni a neten. De azt jaasolnam ne "minel gyorsabban" probalj meg valamit kesziteni, hanem inkabb alaposan tanulmanyozd a PIC architekturajat -- meroben mas a filozofia, mint a PC-n.
Tippet tudunk adni, de nem biztos hogy Neked ez jo lesz. A PIC programozasa az nem egy PC programiras. Eloszor is nagyon meg kell tanulni a PIC felepiteset es mukodeset. Ezt talan ASM programozassal lehet elsajatitani eleg hathatosan. Utana lehetne elkezdeni valami komolyabb projektet. Akkor kell majd elovenni valami C nyelvjarast. Eleg nagy a valasztek, mind arban, mind komplexitasban. Persze vannak demo verziok is, amiben ki lehet probalmi a programozas alapjait. Komolyabb projekthez azert a teljes verziokat kell hasznalni, mert a demok altalaban korlatozottak, mint idoben, mint program meretben, mint optimalizacioban. A 12 bites AD felbontashoz talasz a 18F sorozatban tobb peldanyt is. A MCHP honlapjan van egy specialis eszkozkereso, amiben lehet alligatni a keresesi felteteleket. 12 bites a PIC18F4423, a 18F46K80. Alkalmazhato kulso AD is A MCHP gyart tobbfele felbontasut, egeszen 22 bitig. A modernebb PIC-ek altalaban tartalmaznak UART-ot, tehat ezzel nincs problema, csak az UART felprogramozasaval.
Idézet: „mert itt a lcd_temp1 tudja hol a vége” Nem tudja. Amikor az LCD_Out függvénynek a "tömböt" átadod, akkor valójában csak és kizárólag a tömb első elemének a címét adod át. Nem az egész tömböt, nem a méretét, pláne nem a tartalmát. Csak a címét. C már csak így működik. A függvény kap egy címet, onnantól tudja számítani, hogy melyik elem hol van. De hogy hány elem van, azt csak akkor tudhatja, ha azt is egy külön paraméterben átadod (pl. nézd meg a PC-den az snprintf függvény leírását).
Üdv újra!
Egy egyszerű kérdés. Melyik kód fut le gyorsabban? Ez:
Avagy ez:
A második megoldás több program memóriát foglal, csak nem tudom, hogy pontosan mit csinál mikor átmásolja a biteket a CCP1CON regiszterbe, így bizonytalan vagyok, hogy melyik a gyorsabb. A hozzászólás módosítva: Szept 25, 2012
Nézd meg az assembly kimenetét a fordítónak (kérjél tőle .LST fájlt), és számold ki. Ez ugyanis nagy mértékban a használt CPU, fordítóprogram, és optimalizációs beállítások függvénye lesz.
Nem írtad, hogy milyen CPU, de pl. PIC32 széria esetén a CCP1CONSET/CLR/INV használata mindig gyorsabb, mint a bitbűvészkedés.
És azt hogy kell kérni MPLAB-ban? Meg ez az optimalizálás is érdekelne, hogy azt hogy kell csinálni.
Akkor azt mondod, hogy az első megoldás gyorsabb lehet vagy írjak bele egy assembly betétet? szerk: A program mappájában van egy lst fájl, de ebből a sok zagyvaságból hogy találom meg azt a részt? A hozzászólás módosítva: Szept 25, 2012
Idézet: „de ebből a sok zagyvaságból hogy találom meg azt a részt?” Mondjuk rákeresel a függvény nevére?
Most rákerestem, de nem lettem okosabb, mert nem is tudom, hogy mit csinál.
Na melyik a gyorsabb?
Az MPLAB fejlesztői környezetben van egy olyan, hogy Stopwatch. Szimulátorral kombinálva egyértelműen megmondja, hogy mennyi idő, illetve utasításciklus telik el pl. két breakpoint között.
Helló, adódott egy kis gond. Az LCD kijelzőn csak 3 számjegy jelenik meg.
Vagy az ADC olvasásában követek el hibát, vagy az itoa-ban szerintem. A vas PIC18F14K22, C18 4 bites az LCD busz Itt a main:
Kérek szépe segítséget! A hozzászólás módosítva: Szept 28, 2012
HI-TECH C-ben akadt egy kis problémám. Szeretnék egy 8 bites számot felbontani bites változókra. Jelenleg ez egy bit esetén így működik:
Ehelyett úgy szeretném megoldani, hogy a bites változó legyen egyenlő a 8 bites változó adott bitjével, de egyenlőre sehogy nem sikerül. Valakinek ötlete van rá, hogy hogyan kéne beírni? Ez így sajnos nem működik:
Szia!
Miért nem használsz struktúrát ?! Steve
Azért nem használok struktúrát, mert a 8 bites szám egy függvény bemenő paramétere, jelen esetben az LCD-re kiírandó karakter. Ezt kell kiküldeni a port lábakra 4 bites módban. A portok nem sorba vannak, ezért kell felbontani bitekre.
Valami ilyesmi nem lenne jó?
Ennyire nem szeretném túlbonyolítani. Igazából annyit szeretnék elérni, hogy a fordító elfogadja egy sorban azt, hogy egy bit egyenlő egy bájt adott bitjével.
Köszönöm, de a fordító ezt sem szereti.
Nem teljesen így próbáltam, de nagyon hasonlít a Tiédhez:
Szia!
Így próbáld:
Ha így próbálod, azt sem szereti?
Ezt a formát megeszi a fordító, de ezt a figyelmeztetést adja: "Warning [750] D:\Munka\programok\AJK12UI1\lcd.c; 17. constant operand to || or &&", de a működése nem jó. A többit hamarosan próbálom. Köszönöm!
Kiegészíteném a korábbit:
És így:
RA4 = !!(adatcmd&0b00000001); (A hasonló az nem ugyanaz...)
Ez így nem tud működni, akárhogy erőlteted. Az RC0 tartalma 0 vagy 1 lehet. Az adatcmd & 0b100 értéke 0 vagy 4 lehet. A 4-ből 1-et kell csinálnod, hogy működjön - ahogy mutatták neked:
Én a legutolsó verziót használnám, mert tuti jó (optimális) kód lesz belőle. A hozzászólás módosítva: Szept 30, 2012
Véletlenül nem írtad el?
Csak mert logikai ÉS ill. VAGY operátor nem volt használva, csak a bitenkénti & művelet.
Nagyon köszönöm mindenkinek a segítséget, a megoldás az alábbi, így hibátlanul működik:
Köszi, ez is működik, csak ez figyezmeztetéssel ("Warning [750] D:\Munka\programok\AJK12UI1\lcd.c; 22. constant operand to || or &&").
Kód:
Hello
Bocs a kicsit offért. Találtam itthon egy olyan alkatrészt. PALCE20V8Q-25PC/4 Gondolom valami kontroller féle lehet. Itt az adatlapja. Bővebben: Link Szerintetek mit lehet vele kezdeni? Tudtok róla mesélni? Kössz. |
Bejelentkezés
Hirdetés |