Fórum témák
» Több friss téma |
1. A problémával rossz topikban kopogtattál, mivel köze nincs a C nyelvhez!
2. Ez nem szolgáltatóház. Tanulni viszont szívesen segítünk. 3. A belinkelt helyről letöltött programot át kell nevezni, hogy ne legyen a fájlnévben szóköz, s .asm legyen a kiterjesztése. 4. A CBLOCK sor elejére kell szóköz vagy tabulátor 5. Az MPLAB MPSWIN.exe programja ezután lefordítja, az alapértelmezett beállításokkal (legyen pipával kijelölve a Case Sensitive kérdés!).
Köszi a segítséget.
Kezdő vagyok, nem tudhatom hol kell kopogtatnom. "3. A belinkelt helyről letöltött programot át kell nevezni, hogy ne legyen a fájlnévben szóköz, s .asm legyen a kiterjesztése." Nem gondoltam, hogy ilyen egyserű, mert alapból asm.-ben van írva, akkor miért txt kiterjesztésben rakja fel a tulaj, talán az ilyen zöldfülüek megtévezstésére mint én vagyok. Sajnos nem műkszik az ák. A txt.-ben /forrás/ Pic 628 szerepel én viszont 628A-t használok. Ez okozhat-e problémát? A kapcs rajzon 4MHz-s rezonátor van, viszont az általad konvertált Hex-el Rc konfigot állít be. Próbáltam 628A-ra az általad leírtak alapján hex-et készíteni, sikertelenül, sőt ugyanazt sem tudtam produkálni amit felraktál. Azért köszönöm, további segítséget szivesen veszek. A Hw. résszel nem gondolnám, hogy probléma lehet, mert egy sima hőmérő és az "EPE LCF METER" megfelelő hex és lábkonfig után rb. műkszik. Köszi: kepitu Idézet: Annyi elvárható egy kezdőtől is, hogy a topik címét elolvassa, a fórumszabályzatról nem is szólva, ami kifejezetten tiltja, hogy egy kérdést több témakörben is feltegyenek.„Kezdő vagyok, nem tudhatom hol kell kopogtatnom.” Idézet: Például azért, mert sok tartalomkezelő rendszer korlátozza a feltölthető mellékletek kiterjesztését.„miért txt kiterjesztésben rakja fel a tulaj” Idézet: Igen, okozhat. S nem biztos, hogy elég a név átírása, lehetnek hardver eltérések, amelyeket figyelembe kell venni. „A txt.-ben /forrás/ Pic 628 szerepel én viszont 628A-t használok. Ez okozhat-e problémát?”
Köszönöm a kioktatást, ezzel is okosabb lettem.
/Mivel első próbálkozásomra mapokon keresztül nem kaptam választ, próbálkoztam másutt./ Az 5X-emen túl sem szégyenlem, ha nálam fiatalabbaktól tanulhatok. Üdv: kepitu
Van egy olyan topic, hogy PIC kezdoknek. Szerintem ott kellene ezt megkerdezni mert itt a C programnyelvvel kapcsolatos kerdeseket varjak es valaszoljak meg a forumtarsak.
Ok!
A mellékelt file kiterjesztés miatt gondoltam arra, hogy az itteni Okosok fognak segíteni.
A program fejléce szerint "Compiles with B. Knudsen CC5X(Trial version/without optimization)".
Valószínűleg erről a fordítóról van szó. S felhívja a figyelmet, hogy az optimalizálást ki kell kapcsolni, mert kritikus időzítések vannak a programban.
Köszönöm a segítséget, de az eddigi próbálkozások sikertelenek voltak,
Nem gondolom, hogy kb. 3Pr. nyelvet kellene megtanulnom, mert egy sz.-os thermostátot szeretnék megépíteni és nem hex-ben van a pr.-ja. Ha mégis valakit érdekel, a köz javára konvertálhatná a pr.-ot, hogy aki tudja hasznosítsa. Köszi: kepitu
Sziasztok!
Valaki tudna abban segíteni, hogy hogyan kell a 18f2550-es pic-et MPLAB-ba bekonfigurálni ? Mondjuk egy minta Configgal? Választok előre is köszönöm!
Nem ertem miert kell ezt a kerdest egyszerre tobb topicban is feltenned?
Sziasztok!
Tanácsot szeretnék kérni C18 nyelven egy viszonylag összetettebb menükezeléssel kapcsolatban. Úgy szeretném megoldani, hogy minden gombnak, minden menüpontban írok egy-egy függvényt, ami lekezeli az ott épp végrehajtandó műveleteket. Ezeket a függvényeket inicializáláskor beleteszem gombonként 1-1 függvény pointer típusú tömbbe. Majd a gomb megnyomásakor ebből a tömbből az aktuális menü pozícióval indexelve könnyen tudnám hívni az adott függvényeket. Így elkerülhetném a nagy if-else vagy switch case szerkezeteket a gombkezeléskor. Nem tudom érthetően írtam-e le, csatolok egy forrás részletet az elképzelésről, abban talán jobban látszik hogy gondoltam megvalósítani. Gombból csak 4 db lesz, de menüpontból jóval több mint a példában, körülbelül 30, de lehet hogy még több is. Az lenne a kérdésem, hogy ez így mennyire működőképes, szép/ronda, hatékony, vagy memóriapazarló megoldás lenne? Érdemes így belevágni a dologba? Köszönöm, Gábor
Ilyen megoldást én is használtam, szerintem jobbat nem nagyon lehet kitalálni ennél ilyen helyzetben.
Sziasztok!
Szeretnék egy unsigned int változót ugyan úgy kezelni mint egy SFR regisztert, tehát bitenként elnevezne külön külön is tudjak rá hivatkozni, (ez megy is, meg volt is már itt szó róla (#804327) ) de hogy tudok az egész 16 bites változóra is hivatkozni? A PORTD állapotáról szeretnék egy pillanatképet PORTD_T = PORTD, és utána bitekre külön hivatkozni PORTD_Tbits.RDT3 Egy struct -ot létrehoztam ahogy a header -ben láttam, de akkor PORTD_T = PORTD erre hibát ír. Valahol már erről is volt szó, de nem találom.
A megfelelő kulcsszavak? struct és union.
Az SDCC device/include könyvtárában van jónéhány példa. Itt a 12F629.h állományból idézek:
Köszi a gyors választ.
Ennek segítségével már megértettem hogy mi a különbség az union és a struct között, de akár hogy próbálom nem jövök rá hogy enné meg a fordító. Addig jutottam hogy egy union -on belül kéne létrehoznom egy unsigned int változót, és egy struct -ot a szükséges bitekkel. Ja és azt nem írtam hogy C30 -ban. Ezzel mi a baj?
Szervusz!
A C30-at nem ismerem konkrétan, de ha C-ről van szó, az unionnak nem adtál nevet és az union elemeire is hasonlóan kell hivatkozni mint struktura elemeire: union_name.PORTDSbits.RD3S = 1; union_name.PORTDS = 0xAA55; Az union elemei, ha lehet legyenek egyforma hosszúak a meglepetések elkerülése végett... most pl. 12 és 16 bit.
Szervusz!
Igen C-ről van szó. Köszönöm, összeállt a kép, működik.
Kicsit gugliztam, mert engem nem csak a definiálás, hanem a típuskényszerítés része is érdekelt. Pl. ha egy függvényemben char változóként érkezik meg az adat, hogyan férek hozzá annak a bitjeihez anélkül hogy átmásolnám unionos változóba, vagy logikai ésekkel bűvészkednék. Íme a minta:
Kipróbáltam, a C30 is megeszi. Első körben úgy tűnik ugyanazt a kódot fordítja mintha a union bitjeit használnám (persze csak akkor ha a változó azonos hozzáférésű tárhelyen található: adatmem <-> verem). Mondjuk ezt a mutatós, címképző operátoros megoldást magamtól ki nem találtam volna ![]()
Pont forditva van mint ahogy azt a kommentben irod, a 'c' valtozo nem a stack-en (veremben) lesz, hanem a sima adat szekcioban, hiszen 'static'-nak deklaraltad. A 'ch' parameter azonban a veremben lesz -- ezert nem tudja azt 4 utasitasban megoldani. Nyilvan FSR-t allitgat es INDF-ekkel eri el a valtozot, bar nem lattam a visszafejtett kodot. A 'c' eseteben erre nincs szukseg hiszem a valtozo helye a forditasi idoben mar ismert.
Sziasztok!
MikroC-ben próbálok egy pic16f628-siemens m35i telefon közötti kommunikációt megírni,de elakadtam. A pic feladata mindössze annyi lenne hogy ha érkezik egy hívás a vele összekötött telefonra akkor ellenőrizze le a hívószámot,és ha stimmelt akkor rb4-et kapcsolja be. Beégettem a programot a pic-be,de hívószámtól függetlenül mindig bekapcsolja rb3-at, és rb4-et. Csinált már valaki bejövő hívószám ellenőrzést mikroc-ben?
Igen, a 'c' változót direkt azért deklaráltam staticnak, hogy ne a verembe tegye hanem a sima adat szekcióba. Ezért tudja 4 utasítással megcsinálni. Szerintem jól írtam mert "NEM veremben tárolt" -at írtam rá és ez így is van.
Ez a programkezdemény igencsak sok sebből vérzik.
A feltételed csak azt vizsgálja hogy GSM_MSG5 változód legelső karaktere igaz-e (ha nem nulla akkor igaz), márpedig a '+' jel asc kódja nem nulla. Miután a telefonra kiküldöd a számlekérdezést vársz 2,5 másodpercet, ezalatt a telefon már rég válaszolt, de te nem tároltad el a választ sehova. Én a telefonszámnak csak az utolsó 9 számjegyét ellenőrizném, így mindegy hogy +36 vagy 06-ot tesz a szám elejére.
Ahogy benjami írta az "if(GSM_MSG5)" neked mindig igaz lesz.
Egyebekben pedig tanulmányoznod kellene az M35i AT parancsleírását. Az "AT-CLIP" parancsot nem így kell használni, azzal azt tudod beállítani, hogy a bejövő hívásnál kijelezze-e a telefon a hívót vagy sem. Ez egy előzetes beállítás, tehát nem a RING üzenet után kell kiadni. Ha be van kapcsolva, a RING után egyből jön "+CLIP: num,type" formátumban a telefonszám is. Ha nincs bekapcsolva, a bejövő hívás alatt AT+CLCC paranccsal kérheted le a hívó számot, de ez már egy másik topic...
Sziasztok!
Időközben sikerült előrelépnem,és a 628-as pic-el tudtam is hívást indítani. Áttöltöttem a kódot egy 877-es pic-be,de ott sajnos nem kezeli le a bejövő ring-et valamiért.Docklight-ban megnéztem a telefon csörgetéskor a Mi lehet a baj?
A logikai ÉS operátor: '&&' és 'goto akarmi' egy C kódban?!(csak úgy hirtelen a kódra nézve...)
Hát nem túl elegáns megoldásokat használsz. Nézz szét a mikroelektronika projekteket gyűjtögető oldalán:itt gsm-es projektek vannak.
Hello mindenki!
Az LCD kiírás t így szeretném megoldani Void lcd2(poz, int szam) Void lcd(poz, char szoveg[]) Szöveget karakterenként átadnám az lcdnek az rendbe is van! Pozicionálás rendebe / a számos verzió megy csak a szöveg nem sikerül/ A problémám hogy szoveg tömböt egy szerűen nem tudom át venni lcd(100,?A szöveg helye?) se így lcd(100,?A szöveg helye?) próbálkoztam mutatós megoldásokkal de nem jön össze se hogy. Ha próba képen csinálók egy ilyet a függvényen belül akkor ok / paraméter nélkül / char szoveg[]=?A szöveg helye?; tehát a stringet nem tudom sehogy se átvenni! Felesleges sortöréseket kivettem. Action2K
Bocsi a szöveg szerkesztőbe gépeltembe átrakáskor így tört
Az alábbi két eset nem ekvivalens, mert az első esetben a RAM-ban, a második esetben a ROM-ban helyezekedik el a string, amire mutatni akarsz, amihez más típusú mutató kell.
PIC18 és C18 fordít esetén const rom char típusra kell mutatni a 2. esetben. |
Bejelentkezés
Hirdetés |