Fórum témák
» Több friss téma |
...elegánsabban, bár a lényegen nem változtat:
Így egyszerűbb, de nem ez volt a feladat! Ebben nincs benne az x, aminek az értéke fordításkor nem feltétlenül ismert.
Akkor nem kérdés, hogy Slave státuszban (v. ö. #define STATUS_Slave ...) csak te lehetsz.
![]()
A valóságban igen, de a modulok Slavek...
![]()
igaz, bár általában én előre tudom (szeretem tudni), hogy melyik biteket tervezem/akarom vizsgálni, ami nem zárja ki, hogy szükségem lesz valamikor dinamikusan vizsgálni egy-egy bit állapotát.
![]() az általad említtt k&r féle c könyv alapmű, mindenkinek javaslom aki c-vel ismerkedik. annó 25-26 éve én is abból tanultam, a mai napig a polcon mosolyog ![]()
Igen, ezt én is néztem és nekem is azt sugallta
![]() ![]() Milyen C-t ajánlanál akkor, hogy átláthatóbb, ingyenes ( oktatáshoz ) és jó könyvtárszerkezetes legyen ( nekem tetszett a mikroc, de itt a listán nem ajánlották, így nem választottam ( a példák pedig nagyon jók benne! )?! Köszönöm az eddigi segítségeteket! Steve
Én eddig csak a Microchip fordítóit használtam huzamosabban. A gyári könyvtárait nem muszáj használni.
Idézet: Újabb próbákat végeztem a "gyári" LCD rutinokkal, s úgy tűnik, hogy megy 4 és 8 bites módban is. (mellékelem a tesztprogramot)„De az inicializálás nem tökéletes, néha előfordul, hogy szemeteket ír ki!” Úgy tűnik, hogy a korábban említett inicializálási bizonytalanságokat érintkezési problémák okozzák (a kínai repülő zsinórok a precíziós header-ben is lötyögnek ![]()
Hello
Volna egy olyan problémám, hogy a diakjaimmal szeretnénk egy versenyen indulni PIC 16f877 es-el készített gömb-propeller óra,animásióval. Ők eddig tanultak Pascalt, most pedig ismerkednek a c-vel. Nekem van egy ChipCad demo panelom 1.2v és hozzá egy ősrégi Mplab ICD, ami sajna csak Mplab 5.5 ből működik. A kérdésem az volna hogy tud-e valaki olyan leírást ami pic c-re vagy Pic Pascalra, van, illetve ismere valaki olyan forditót, ami jól fordíja át asm-re a pascal, vagy c file-t, mert amikor a MikroPascal-al kigenerált asm filet áthúzom az Mplab-a az nem fogadja el, létezik egy oldal ami ezen akarna segiteni (http://www.micro-examples.com/public/microex-navig/doc/095-asm-translator.html) de nem jól dolgozik. Nekem Asemmbly-ben jól megy a programozás, de a gyerekeknek az kinai... valakinek van valamilyen ötlete? Hogyan tudnánk illetve mivel, irni programot, és utánna átküldeni az mplab-ba az azzal készült asm file-t? Kösz
PIC C COMPILLER
Nekem bevált. Sajnos nem tudom honnan lehet letölteni. Ha kell küldj egy e-mailt és zip ben elküldöm.
Miért nem tanítod a gyári fordítókat(C, ASM)? Lehet, hogy hosszú távon megéri, a gyerekek hálásak lesznek!
Ha van a kártyán soros port (vagy ahhoz hasonló), akkor a régi MPLAB+ICD-vel tegyél rá egy bootloadert AN1310 alapján, s utána áttérhetsz egy modernebb MPLAB-ra, amiben van HiTech C fordító. De kis ügyességgel talán a MikroPascal-lal is összebarátkoztatható.
Mellesleg Pascal ismeretekkel esetleg a JAL is számításba jöhet... :smoke: Bővebben: Link
Sziasztok!
A segítségeteket szeretném kérni abban, hogy hogyan lehet egy tömb adatmemóriabeli kezdőcímét megadni C-ben? A pic, amit programozgatok az egy 16F628A-s, a fordító a Hi-Tech C. Ami parancsot én tudok, az csak bájtos változó elhelyezésére jó (pl: volatile unsigned char chKarakter @ 0x70 ![]()
a tömb első elemének címe.
@cue: Nem kideriteni, hanem megadni szeretne Atieketro a tomb kezdo cimet.
Mehany gondolat ezzel kapcsolatban: 1. Tipikusan magas szintu nyelven az ember nem szeretne a valtozok ill tombok kezdo imet meghatarozni. Arra valo a fordito es a linker, hogy azokat szepen elhelyezze. Az egyetlen kivetel amikor a harver miatt van erre szukseg, pl a port vagy egyeb specialis regiszterek cimei, de azok mar tobbnyire ugyis definialva vannak 2. Hi-Tech-et nem ismerem annyira, de pl Microchip forditonal ezt linker scripttel szokas megadni. Tehat letre kell hozni egy speci szekciot csak es kizarolag a tomb reszere, es pragmaval megadni hogy a tombnek hova kell kerulnie. Ezt a Microchip fordito doksijaban a nagy meretu tombok definialasanal targyalja. Lehet Hi-Tech-ben is igy van valahogy... 3. A 'volatile' nak igen keves koze van a valtozo helyenek meghatarozasahoz, az csak amiatt szokott a specialis regiszterek deklaraciojanl ott lenni, hogy a fordito ne probalja meg a kodot kioptimalizalni. Nem lenne pl jo ha egy port iras helyett a fordito ugy gondolna gyorsabb a kod ha a WREG-ben tarolja az erteket el...
igazad van, túl sokszor magyaráztam már a pointerek és tömböket, rutinból válaszoltam sablonnal
![]()
Igazad van. Túl nagy értelem nem lett volna, ha én mondom meg a tömb kezdőcímét, csak asm-ben megszoktam, hogy a változóimat a minden Bank-ból elérhető memóriaterületre rakom.
A volatile-t nem is a címmel kapcsolatban írtam, de az tény, hogy 100%-ban nem voltam képben annak használatával. Köszi a példát rá, ez jól jött. Meg amúgy is köszi a segítséget! Azért cua-nak is köszönöm, még ha nem is arra válaszolt amire én gondoltam. Értékelem a szándékot is ![]()
Ah, ertem mit szeretnel. Mint mondtam nem ismerem a Hi-Tech-et, de a leirasaban ezt talaltam:
Magyaran 'near' kulcsszoval lehet a tombodet az access ram teruletere kenyszeriteni - de meg akkor is ha a tomb tul nagy lehet a fordito (ill. a linker) megis ugy dont, hogy azt a bigdata-ra helyezi...
Kezdek összebarátkozni ezzel a C-vel, már megy portról is a megszakítás.
![]()
Elszóltam magam. Case elágazásba lehet if-et ágyazni?
Konkrétan így...:
Mert úgy látszódik, hogy nem akar működni, de ha ez így jó, akkor máshol van a hiba.
Miért ne lehetne? Maximum sikerült összehoznod egy olyan feltételt, ami sohasem teljesül...
![]() Tegyél a végére egy default ágat is, hátha azt hiányolja.
Itt valami más baj van. Egyébként szoftveres pergésmentesítő lenne az RD1-en lévő nyomógombnak.
Aztán így lenne felhasználva:
Ha megnyomjuk a gombot az RD1-n, akkor növeli egyel a "kapcsolo" változót. Nekem az a cél hogy ha megnyomom a kapcsolót, akkor a ToSendDataBuffer[0] függvény értéke 12 legyen, ha nem akkor 13. De ha folyamatosan nyomom akkor is csak egyszer legyen 12 a függvény értéke, erre szolgál ez a pergésmentesítő. Viszont a "kapcsolo" változó értéke 1, akármit csinálok vele. Már mindent átnéztem, jól működik a port beolvasása is, mert akkor 1-et kapok ha le van nyomva a kapcsoló. ![]() Szerk.: lehet nem voltam valami érthető, de úgy tűnik hogy ez a nyavalyás switch nem akar működni, pedig máshol meg megy. ![]() E fene egye meg az apróbetűs részt, furcsa is volt nekem, de nem adott hibajelzést az MPLAB, írja is az egyik oldal, ahonnan "tanulgatok" : Idézet: „ Még egy figyelmeztető megjegyzés: a kezdő C programozók gyakran írnak = jelet ott, ahol == kellene. Amint ezt a 2. fejezetben látni fogjuk, az eredmény általában egy érvényes (de az adott helyen értelmetlen) kifejezés, így a fordítóprogram nem ad hibajelzést. ” Mégegyszer köszönöm szépen! :yes:
Eppen emiatt latni gyakorlott C programozoktol, hogy a feltetelt megcserelik, azaz:
if ( 1 == kapcsolo ) { ... } Tehat ha veletlen 1 db egyenlosegjel sikeredne oda, akkor a fordito hibaval leall... Ez termeszetesen csak akkor mukodik ha literalissal (szammal pl jelen esetben az 1) vagy konstanssal (aminek tartalmat nem tudod altoztatni) hasonlitod ossze a valtozod.
Ezt lehet én is így fogom csinálni.
![]() Köszi neked is!
Sziasztok azt szeretném megkérdezni, hogy C-ben, hogyan kell az LCD-t vezérelni és deklarálni BASIC-ben már egész jól otthon vagyok de most szeretnék áttérni egy komolyabb nyelvre.
Szia!
Ajánlom neked a mikroc pro for pic-et. Bővebben: Link Teljen jól használható, a help-je tele mintapéldákkal és kapcsolási rajzal is, többekközt az LCD vezérléssel is. A fordító 2k- ig ingyenes! |
Bejelentkezés
Hirdetés |