Fórum témák
» Több friss téma |
Láttam én már neten levő php kódban is } után rendszeresen ;-t.
Ha többféle értékkel kell összehasonlítani, akkor használd a switch-case elágazást
Köszönöm szépen a segítségeket! Kell még tanulnom sokat.
Kipróbáltam, az IF { ... ... } után tényleg nem kell pontosvesző, azt hittem, hogy kell azért használtam.
Hello!
Szeretném kipróbátmi a HI-TECH C teljes verzióját el tudná valaki küldeni Köszönöm! szilárd
Sziasztok!
Hogy tudnám egyszerűen megoldani azt, hogy a főprogramban van mondjuk egy 'delay_ms(500)' utasítás, ezt ismételgeti ugye, meg közben mást is végrehajt a program és ha jön egy megszakítás, majd ebből visszatér, akkor ne folytassa a 'delay'-t, hanem egy általam tetszőleges helyre ugorjon, vagy kezdje elölről a programot... Remélem érthető. Gondolom 'GOTO'-val kiugrani az interrupt függvényből nem túl egészséges Köszönöm: Tibus
Kicsit át kell gondolnod ehhez a programot. Alapkövetelmény, hogy szokj le erről a delay_ms használatáról. Helyette Timerrel időzíts, azért van. A megszakításban pedig bebillentesz valami jelzőbitet, a főprogram meg azt figyeli. Ha a bit bebillent, akkor vérgrehajtod, amit kell, és törlöd a bitet.
Vagy írd le pontosabban, hogy mi kellene.
Az nagyon nem egészséges
Meg lehet csinálni, csak nem egyből. Interrupt esetén ugyebár a visszatérési cím a stack-be kerül, ha azt nem lehet manipulálni, oda is ugrik vissza. Viszont a késleltető rutinba belenyúlva, meg lehet csinálni azt, hogy a sok inkrementálás alatt (mivel így szoktak késleltetni) néha vizsgáljon meg egy bitet, amit az ISR-ben beállíthatsz, vizsgálatnál pedig kitörölsz. Így visszaugrik ugyan a késleltetésre, de ha rászalad a bitre, ki is lép a rutinból. Egy másik, talán még jobb módszer, ha a számolgatásra használt regisztereket úgy módosítod az ISR-en belül, hogy visszatérés után mondjuk még egyet dekrementál, és kész is. Csak mindkét módszerrel az a baj, hogy magadnak kell megírni a késleltető rutint is, mert a könyvtári függvények nem vizsgálgatnak semmit.
Hú, extra gyorsan válaszolsz köszi
A program ugyanaz, mint amiről kérdeztem, hogy van 4-5 állapot egy programban. Ezt IF-fel oldottam meg, Te a switch-et ajánlottad rá. Igazából egy kínai LED-es lámpát alakítottam át. Kicseréltem a LED-eket és lítium-ion akkumulátort tettem bele. A fő cél az volt, hogy szaggassam a LED-ek áramát egy FET-tel, mivel az akku teljesen töltött állapotában a túl nagy áram kinyiffantotta lassan a LED-eket. A PIC figyeli az akkufeszültséget és annak függvényében változtatja a PWM kitöltést. Ez a része működik is. Aztán gondoltam legyen egy két funkciós is rajta: villogó, más fajta villogó, meg alacsony fogyasztású mód. Végül is működnek ezek is, csak a villogós résznél, mikor 750ms-ot vár a LED bekapcsolása között és én akkor nyomom meg a gombot, vagyis megszakítást okozok, akkor a mód váltását még váratja a fennmaradó DELAY idő. Nem olyan idegesítő, csak tanulásképpen is fejleszteni akarom. Timer-re én is gondoltam, csak ez olyan izé, hogy van benne egy ilyen kényelmes DELAY parancs, és akkor nekem kell timer-t számolgatnom, hogy mennyire állítsam be, hogy pont azt az időt kapjam... bár itt még nem tanulmányoztam a Timert, csak assemblyben használtam. Megnézem Köszi a választ!
Egy ledvillogtatós feladatnál még nem kritikus a delay, de komolyabb feladatnál már nemigazán engedhető meg, hogy ez hosszú időre megfogja a processzort. Egyébként én úgy szoktam csinálni az ilyeneket, hogy beállítom a Timert, hogy pl. 1ms időnként csorduljon túl, és akkor utána csak valami változót (vagy ha kell több, akkor változókat) növelek benne, és amikor az elérte a kíván értéket, akkor cselekszem. Hasonlóan egyszerű használni, mint a delayt, mert a Timert csak egyszer kell kiszámolni hozzá. Ha nem kíván a feladat pontos időzítést, akkor nemis állítom a a Timer kezdőértékét, egyszerűen valami közeli értékhez beállítom a prescalert és csókolom. 4MHz órajel esetén az 1,024ms időnkénti túlcsordulást egyszerű beállítani, és ez elég közel van az 1ms-hoz.
Igen, ez a Timer-es jól hangzik. Lehet, hogy átszerkesztem a programot.
Nyilván nem mindenhol alkalmaznám a delay-t, de itt ez megfelel. Majdnem... Na, hát köszönöm szépen a segítségeket. Tök jó, hogy itt vagytok és segítetek
Sziasztok!
Megépítettem ezt az ICD2-es klónt, működik, tök jó és azt kérdezném, hogy ezzel egy C programot nem lehet soronként léptetni? Csak azzal az egyetlen hardver törésponttal tudom megállítani a programot? Mert az MPLAB szimulátorral tudtam F7 F8-cal lépdelni soronként is, de itt at ICD status ablakban csak "Stepping Target"-et meg "MPLAB ICD 2 Ready"-t ír felváltva. Na jó van egy két egyszerűbb sor amit viszonylag gyorsabban lép, de általában évekig eltart egy lépés, meg belép a math.h-ba meg 16F877.h-ba is. Most a main zárójelétől nem tud elszakadni...
nálam a hitech és microchip C is megy soronként, persze várni azt kell...
compile for icd be van állítva? az optimizálást meg ki kell kapcsolni, különben összevissza fog ugrálni
Ha jól meggondolom, neked nincs is szükséged főprogramra! A villogtatást és egyebeket interrupt szinten is el lehetne rendezni szépen. :yes:
Ezeket ki- meg bekapcsoltam, de a main "{" zárójelén nem tudja túltenni magát
Én CCS C-fordítót használok amúgy. HITEC is van, de valahogy nem stimmel a működése. Majd még kipróbálom Van az az Animate gomb, de akkor is csak fut a Stepping Target és nem jut el sehova.
Alapvetően az ICD2 a kontrollerben levő program nyomkövetésére van kitalálva. Ez pedig ha tetszik, ha nem, az asm. Tehát a Program Memory ablakban minden pillanatban úgy működik, ahogy várjuk. Ha a fejlesztőkörnyezet tudja hogy adott asm utasításokhoz melyik C sor tartozik, akkor a C forráskódban is követhető marad a dolog. Ha nem tudja (és egyes optimalizálások - pl. procedural abstraction - hatására biztosan nem fogja tudni), akkor nem lehet a C forráskódot követni.
A C soroknál úgy megy végig, mintha F7-et nyomogatnál. Tehát ha egy C sort mondjuk 50 asm utasításra fordít, akkor ott mintha 50-szer nyomnál F7-et. Ez is a baj a C-vel, hogy nem tudni (hacsak nem nézed meg a listing fájlt), hogy egy sort mire fordít, és annak meddig fog tartani a végrehajtása.
a main kezdetén azért molyol sokat mert a kezdeti memória, változok, stb.. inicializásásokat hajtja végre., ha kérsz egy disasm ablakot akkor láthatod, milyen sokat dolgozik...
érdemes a main-ban lévő első utasításra töréspontot tenni, reset után odáig futtatni, utána lépegetni csak. A pc-n a TC progiban (normálisan) megcsinálták, indítás után azonnal elrohan a main kezdetéig, és onnan lehet tovább lépegetni, vagy futni, nem kell a kezdeti mem. initen végiglépkedni
Jóestét mindenkinek!
Van egy kis problémám c30+GraphicLibrary programozásban.Nekem egy BTN_MSG_PRESSED kéne, mert újrakéne rajzolnom 1 gombot.Én ezt írtam, de nagyonnem működik: if (objMsg == WND_MSG_TITLE){ if(pMsg->uiEvent == EVENT_PRESS){ color=GetPixel(x,y); col->Color0=color; BtnTranslateMsg(pBtnCol, pMsg= EVENT_PRESS); } } Ebből csak BtnTranslateMsg(pBtnCol, pMsg= EVENT_PRESS); ez nem működik, ha kiveszem és nyomkodom a gombot akkor frankón változik a színe.Ez egy nagyon basic vektorgrafikai program lesz.Ha kell valakinek, eltudom küldeni a kódot.
Nemrég találtam rá egy érdekesnek ígérkező anyagra, amely a C nyelv alapjait mutatja be magyar nyelvű oktatóvideók formájában!
LINK
szia!
Tudnálnekem basic-ot küldeni pic programozáshoz? 16-os sorozatú-hoz. köszi!
Vajon miért nem az erről szóló témában kérdezed...?
Hali
Régóta keresek egy ilyen oldalt nagyon szupi
én is pont egy ilyet kerestem, nagyon köszönöm.
üdv Máté
Hi
eddig asm-be irogattam progikat és most tanulom a c-t "hello world" szóval esetleg valaki nem tud valamilyen mintaprogikat c-ben amiböl lehetne okosodni nagyon megköszönném ui:pic16fxxx
http://www.microchipc.com/
de a feltelepített fordítódban is vannak példaprogik, nézz szét a fordítód weboldalán, és a microchipnél is
MPLAPB 8.10
CCS C-t (olyan kellene elsönek sz.tem C-ben PORT config (pl TRISA hogyn vagy LED vill A/D conv interupt kez stb.))
Nézd meg ezeket:
Bővebben: Link Bővebben: Link Bővebben: Link A CCS telepítőjében is van sok példaprogram egészen kezdő szinttől. üdv
ez nagyon jó nem is értem eddig miért nem találtam meg
|
Bejelentkezés
Hirdetés |