Fórum témák
» Több friss téma |
Sokszor szoktam a HELPET használni csak nem mindig elég beszédes(és nem is mindig müködik a minta progi ,már ha van minta).
Idézet: Ebben két tévedés van! „de a C-nek nagyon-nagyon sok függvénye van” 1. A CCS C nem valódi C, csak annak látszik... 2. A C nyelvenk nincs sok függvénye, csak kaptál a C fordító mellé egy programkönyvtárat, amelyt vagy használsz, vagy nem. A függvények leírása a CCS C Referencia Kézikönyvében és a Help-ben megtalálható (mintapéldákkal). Emlékeim szerint jól használhatóan. A C nyelv utasításai a Kernighan-Ritchie könyvben és a szabványokban megtalálhatók (a C is fejlődik, így van C90 és C99 is, utóbbi leírását lásd itt!
Köszi a linket .Akkor ma is tanultam valamit a C-röl.Átnézem a C.s függvényeket és használom a
Idézet: (használom mert lusta fajta vagyok) „programkönyvtárat”
A programkönyvtárakkal csak két baj szokott lenni:
1. Ha nem azt csinálják, amit a dokumentum szerint csinálniuk kellene (CCS C-nél nem nyilvános a forráskód, tehát legfeljebb a disassembly listából lehet kisilabizálni, hogy mit is csinál). 2. Ha azt csinálják, amit a dokumentáció szerint csinálniuk kell - ami viszont nem feltétlenül az, amire szükséged van...
Na igen pont ezt érzem én is.:thumbupróbáltam már több fordítót is de egyenlőre ezzel boldogultam a legjobban.Te milyet használsz?
Az RBIF törlése asm-ben is a PORTB olvasására történik. Ha valamiért nem törlődik, akkor újra belép a megszakításba: ez asm-ül és C-ül is így van !
RBIF-et ASM-be nekem kell törölni programból(bcf INTCOM,RBIF) ,ha jól emlékszem még az adatlapban is felhívják rá a figyelmet.C ben ezt nem nekem kell megtennem mert elvégzi helyettem a C függvénye de csak akkor ha kiolvasom a PORTB regisztert.Jelen pill-ban ezt tapasztalom ill _vl_ forumtárs világosított fel erről .Az alapproblémám ez volt hogy IT generálodik RB port változásakor de nem tudtam kilépni belőle.ASB-ben az IT-t jól tudtam kezelni ,de C-ben nem jól működött és ezért írtam hogy a C-ben nem ugy kell mint aASM-ben.
Remélem nem írtam sok hülyeséget.....de ez ugy is kiderül
Mind a kettő ( RBIF törlése és PORTB olvasása ) jó az adatlap szerint, hogy a CCSC mit csinál, azt nem tudom ( de ha megtenné, akkor működne! ) !
A hozzászólás módosítva: Ápr 7, 2013
Akkor tisztázzuk:
- először ki kell olvasni a PORTB-ből a bit értékét, mert ehhez a kiolvasott értékhez képest méri a változást az IC, amíg a legutolsó olvasáshoz képest más az érték, addig folyamatosan generálja az interruptot (1-be állítja az RBIF-et), - utána ki kell törölni az RBIF-et, mert az magától nem törlődik, és amíg ez 1, addig vissza fog térni az interrupt handlerbe a processzor. Az, hogy a CCS végtelen mennyiségű beépített függvénye és egyéb okossága pontosan mikor mit is csinál meg ezekből a feladatokból helyetted, azt csak az alkotója tudja, meg jobb esetben a doksiban talán jól le van írva. Rendes C fordító használata esetén a fenti műveleteket pont ugyanúgy kell C-ben is megcsinálni, ahogy assemblyben, csak a CCS próbálja állandóan a feneked alá tolni a széket (még akkor is, amikor éppen nem szeretnéd).
Ki fogom próbálni ASM-ben is a csak PORT olvasás és nem törlöm az RBIS-et.
Kell törölni, nézd meg _vl_ kolléga hozzászólását ( az olvasással csak a feltétel szűnik meg, de nem fog törlődni a flag ! ) !!
Idézet: Akkor most már teljesen értem miért nem lépett ki IT-ből „kell olvasni a PORTB-ből a bit értékét, mert ehhez a kiolvasott értékhez képest méri a változást az IC”
Elakadtam .Kérem segítsen valaki. A progiba beírtam a problémámat
#include <system.h> void main () { trisc=255; trisd=0; portd = 0b00000000; while (true) { if (portc==0) portd=0b00000001; else portd=0b00001000; if (portd==0b00001000) break; else delay_s(4); if (portc!=0b00000010) portd=0b00001000; if (portd==0b00001000) break; // ide kéne ezt a feltételt tenni // olyan módon,hogy közbe legyen 30 sec késleltetés // // while(1) // if (portc==0b00000001) ha megfelelt ennek a feltételnek akkor: // { // } // else // break; if (portc!=0b00000010) 30 sec mulva ugorjon ide a program portd=0b00001000; if (portd==0b00001000) break; else portd=0b00000011; delay_s(2); portd=0b00000111; delay_s(3); if (portc!=0b000011) portd=0b00001000; if (portd==0b00001000) break; else portd=0b00000101; while (1) { if (portc==0b00000011) { else break; A hozzászólás módosítva: Ápr 12, 2013
A hozzászólás módosítva: Ápr 12, 2013
Még nem indult be,de valószínű a while után két darab zárójel "kezdés" kell
Köszönöm a segítséget Watt !
Összejött amit segítettél annyi változtatással,hogy a != helyett == tettem.Lehet,hogy én nem jól fogalmaztam meg a kérdést.A többit magamtól írtam segített a Kónya Kopják könyv meg a flowcode C fordítása (bár ahhoz képest az én C-m sokkal rövidebb és többet tud). A "fejléc"-en kívül a szimulátorral megy a dolog.Csak ! Még egy kérdésem lenne amire nem találtam megoldást. Tehát ahova oda írtam újra kéne indulni a programnak.Mivel az összes bemenet a portc-n van,ha úgy egyszerűbb áttehetem egy másik portra.Mert úgy valószínű nem kell bit operátor alkalmazni.És ha valaki segít előre is köszönöm #include <system.h> void main () { trisc=255; trisd=0; unsigned long cou = 400000; while (true) { while((portc!=0b00000100) && (portd!=0b00000000)); while (portc!=0b00000000); portd=0b00000000; if (portc==0) portd=0b00000001; //ettől a ponttól kéne megoldani,egészen a program végéig else // hogyha portc==0b00000100 lesz portd=0b00001000; // akkor újra induljon a program ,tehát "break" if (portd==0b00001000) break; else portd=0b00000001; delay_s(4); if (portc!=0b00000010) portd=0b00001000; if (portd==0b00001000) break; while((portc == 0b00000010) && cou-- > 0); if (portc!=0b00000010) { portd=0b00001000; if (portd==0b00001000) break; } else portd=0b00000011; delay_s(2); portd=0b00000111; delay_s(3); if (portc!=0b00000011) portd=0b00001000; if (portd==0b00001000) break; else portd=0b00000101; while (portc==0b00000011); if (portc!=0b00000011) portd=0b00001000; break; } }
Sziasztok,
Kezdőként próbálom az SPI kommunikációt egy SD kártya olvasóval felépíteni. A hardware-n egy PIC24HJ128GP504 -es mikrokontollert található és az SPI pedig RP portokra van kötve, tehát PPS -t kéne beállítanom mielőtt egyáltalán esélyem van az SPI-t használni. Elsőre szeretnék valami írni a kártyára. Bekötés a következőképpen néz ki az SD kártya és PIC között SPI busz: Spi Clock: RP23 SDO: RP22 SDI: RP9 ChipSelect: RP21 Ugyanezen az SPI buszon más eszköz is csücsül. Elsőnek írtam egy ilyet, a PPS-t szeretném ezzel beállítani:
Továbbá letöltöttem a Microchip SD library-t. A projectet beállítottam, fordul is. Azonban az SD-SPI.c állományban van valami amit nem értek.
Tehát az SDI,SDO dolgokat itt külön még állítsam be a megfelelő RP -khez rendelve? Azaz a fentebbi init függvényem még talán felesleges is? Köszönöm! Idézet: Igen, mert a PPS függvényhívásokkal csak a mikrovezérlőn belül "állítod át a váltókat" (hogy mi merre menjen), de ettől még az SD-SPI.c nem lesz konfigurálva. A két beállításnak nyilván összhangban kell állnia. „Tehát az SDI,SDO dolgokat itt külön még állítsam be a megfelelő RP -khez rendelve?”
Köszönöm. Sajnos azt nem értem még, hogy a TRIS helyére milyen RPxx dolgot tudnék írni?
A PPS függvényhívásoknál egyértelműen Output,Input dolgokat adtam meg, de TRIS értékeket nem. Gondolom csak keverek valamit. De ha a SPICLOCK nekem az RP23 -on van akkor mit írok pl. ez helyére:
Tudom, hogy van az RP23-hoz is struktúra, de sajnos még nem látom, hogy abból mikor mi kell. A SD-SPI.c -ben is van ahol TRIS van ahol PORT és van ahol LAT kell neki, gondolom ezekhez az RP23-hoz tartozó struktúrából is találok megfelelőt. Egy példát megköszönnék összerendelésre.
Ha TRIS helyére TRIS-t kell mondani.
Az RP23-hoz tartozik egy fizikai láb a chipen, amihez oda van írva egy PORT bit (egy betű meg egy szám, mondjuk RC7). Na azt kell ide beírni.
Ahm. Na nálam ez így néz ki: RP23/CN17/RC7 (maradva az SPI CLK példánál).
Tehát mivel itt RC7 áll ezért az SD-SPI.c-ben a fenti define így nézzen ki?
És akkor ennek mintájára már PORT és LAT értékeket is meg tudok adni a megfelelő RPxx értékhez.
Sziasztok!
Megszakítással van gondom, de azt hiszem nem jó helyre írtam a kérdésem. Bővebben: Link
Sziasztok!
NAGYON kezdő vagyok a C-ben is, a PIC24-ben is. Egy PIC24F04KL100-al próbálkozom, de valamiért nem kezeli a bemeneteket. Az RA4 portra van kötve egy felhúzó ellenállás, föld felé egy nyomógomb, a RB8-on egy LED soros ellenállással a földre kötve. A szintek megvannak az RA4-en, ha megnyomom a gombot. Azt szeretném, hogy folyamatosan a nyomógomb állapota jelenjen meg a LED-en, de nem követi a bemenetet, sötét marad. Ha kiveszem a while hurokból az utasítást, akkor világít. Hol lehet a hiba? Köszönöm a türelmet és a a segítséget! Fordító: v8.90 MPLAB C30
A hozzászólás módosítva: Ápr 30, 2013
Szia!
Én első blikkre azt mondanám, hogy rossz az FOSCSEL konfigurációs szó. Szerintem így jobb lenne:
|
Bejelentkezés
Hirdetés |