Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Üdv!
Lassan haladok a programozással, mert az áramkörömet is javítani kellett. Eljutotam odáig, hogy a bementeről egy tárolo regiszterbe másolom a bemenetet, és shiftelek jobbra hogy az utolsó bitem legyen 0.(Mert csak 7 szenzorom van tehát a 8.ik bit nem érdekel) De nincs ötletem a továbbiakra. Hogyan tudnám szelektálni az RD port bitjeit valami feltétellel, hogy ha mondjuk b'11110000' van az RD porton, akkor azt tudjam mondani, hogy az RB3 legyen 1. Adnátok valami ötletet vagy felvezetést amin elindulhatnék? Előre is köszi! Belinkelem a progimat eddgi hogy néz ki.
Lenne egy kérdésem, olvasgatom itt a szubrutinokat meg macrkat. El tudná nekem valaki magyarázni, hogy mit is jelent a loop? Mert mindenhol csak használják, de sehol nem irják le, mit is jelent valójában. Köszönöm!
Loop ugyanaz mint az iteracio, csak ez utobbi kifejezes matematikai inkabb. Magyarul cikluskent szokas emlegetni. Lenyege, hogy vagy felteteltol fuggoen, vagy feltetel nelkul vissza ugralsz a programodban hogy ugyanazt a lepes sorozatot tobbszor hajtsd vegre. A feltetel nelkuli ciklus az un. vegtelen ciklus (infinite loop vagy infinite iteration)...
Nem tudna valaki segíteni, hogy ez mit jelent:
ERRORLEVEL 0, -302 Na jó, csak viccelődtem Bocsi Potyo!
Sziasztok!
van egy programom, mivel szöveget szeretnék küldeni PC-nek PIC16F690-el, de mindig ugyanazt a hibaüzenetet adja ki."Symbol not previously defined (ASend)" de nem érttem miért, pedig definiáltam?? Tudna nekem v.ki segíteni,h.tudnám a hibát kiküszöbölni és szöveget küldeni a PC-nek??
Eloszor is az 'END' direktiva csak egy jelzes a fordito szamara, hogy "itt a program vege, ami ezutan irodott azt mar NE probald meg leforditani". Tehat amit az END utan irtal a fordito figyelmen kivul hagyja. Masodszor a mikrokontrollereknel nem lehet "kilepni a programbol" mert nincs operacios rendszered, nincs hova kilepnie, a program fut tovabb... Az END utan meg vigan tovabb szalad a program es a program memoriaban levo szemetet vegrehajtja barmi legyen is az, sot, ha a program memoria vegere ert kezd mindent elolrol... Ha azt akarod "alljon meg" akkor egy vegtelen ciklust kell csinalnod (pl "GOTO $") Legvegul pedig nem szerencses kulonbozo kis-nagy betus kevereseket csinalni meg akkor sem ha a fordito egyebkent elfogadja. Tehat ha az "ASend" nevu rutint meghivod akkor a cimke ne "Asend" legyen, ne is "asend" vagy "ASEND" hanem "ASend"... Ja es meg valami, ha vissza olvasgatsz epp az EQU es egyeb valtozo deklaraciokrol esett szo a napokban, olvasd el miket irtak es minimum CBLOCK-osra irdd at - jobb lenne ha mar az elejen megtanulnad a linker scriptet persze, d ez az EQU-s valtozo definialgatas nagyon nem szep.
Elírás; az "END" utasítás előtt az van, hogy "CALL ASend", a rutin neve viszont "Asend". Kis- és nagybetűket megkülönbözteti a fordító (bár ezt le is lehet tiltani neki), emiatt nem találja meg a rutint.
Idézet: „Valaki megtudná nek mondani, hogy miért ír vissza ilyet az Mplab” Igen. Azért,mert nem tiltottad le afigyelmeztető üzeneteket. Ha zavarnak, akkor szúrj a program elejére egy
(ez minden figyelmeztetést letilt!) vagy legalább egy
sort. Idézet: „Hasznos dolog a Futtatás mint... opció” Szégyen a Futtatás mint..., de hasznos. Rendszergazdaként futtatva tényleg működik a Hi-Tech C fordító. Na, akkor le is törlöm! Utoljára a múlt században(sic!) használtam olyan rendszert (Win98), amelyikben "természetesnek" vették, hogy mindenki mindenbe belerondíthat.
Köszi a gyors választ, kijavítottam a kis-nagybetüs meg az END hibát amit a legvégére raktam. De most viszont ez a hiba, ami a buildeléskor lépett fel:
Error - section '.org_0' can not fit the absolute section. Section '.org_0' start=0x00000000, length=0x00000046
Aham, linker scriptet bele raktad a projectedbe, csak nem irtad at a programodat
Linker script hasznalata Amugy a GOTO $ az NEM az END moge kell! Megegyszer: Ami az END mogott van az "nem letezik a fordito szamara".
MPLAB C18 kérdés.
#pragma udata access _intregs = 0x40 linker script: ACCESSBANK NAME=intram START=0x40 END=0x5f PROTECTED Fordito véleménye: Error [1013] error in pragma directive Mi nem tetszik neki?
Sziasztok. Köszi mostmár lefordul, csak debuggoláskor beáll ennél, és nem küldi az adatokat: BTFSS TXSTA,1 GOTO $-1 Viszont ha ezt a két sort kiveszem a progibol, akkor végig lefut a progi, beáll a végtelen ciklusba, de a következő hibaüzeneteket adja: UART-W0001: Overrun, write occured over a full TXREG SFR. Data lost CORE-E0002: Stack under flow error occurred from instruction at 0x000021 CORE-E0001: Stack over flow error occurred from instruction at 0x000016 Mit kéne ilyenkor tenni? Miért nem tudja elküldeni az adatokat?
Hogy tudom figyelni a Hyperterminálban, hogy a Tx-en kiküldött adatok megérkeznek-e a számitogépre?
Lehet, hogy csak elavult a fordítód?
MPLAB C18 v3.22 -vel hibajelzés nélkül lefordul pl. ez:
Szemrevételezéssel. Vagy mire gondoltál?
Szia! Hát arra,h.én hyperterminállal nem látok semmilyen adat amit elküldtem és megjelenne. azaz most nem vágom hol a probléma..
Megnéztem, ennek a midrange-es TRIS utasításnak 3 bit az paramétere, tehát az nem meglepő, ha csak a nulladik memórialapon lévő portokra képes működni (az eredeti, baseline-os TRIS is ilyen, ott a port címét kell megadni neki, ami emlékeim szerint 6 vagy 7). Ettől függetlenül pont a kis midrange-ekben (12F, low pin count 16F) lehet, hogy nem hülyeség a használata, pont a szűkösebb programmemória-méret miatt.
Mivel az advanced midrange kapcsán merült fel, mint nem dokumentált utasítás, nem hinném, hogy a korábbi eszközök bármelyikénél ezt a "tudást" kiírtották volna - az valószínűleg többletmunkával és többletköltséggel járt volna. Ha valamikor, akkor most, az új család tervezésekor megtehették volna a megszüntetést, de látjuk, hogy valamiért még most sem tették meg.
Már nem demo
Csak a Procedur-ák mérete nem lehet bizonyos méreten felül, mert nem fér bele a PIC-be, de ha többe teszed bele kis leleményességgel akkor megy a dolog. A másik kérdésemre még mindig választ kérnék: Idézet: „"Egy ADÓ-Vevő egységet szeretnék csinálni (433Mhz-es modulokkal). Fontos az hogy a RX lábon legyen az a vevő és a TX-en az adó? A Manchester kódolás megvan meg minden, ha rákötök ledet az adó aktív részére, és a vevő aktív részére akkor látom hogy a jel átmegy, de a PIC nem teszi azt amit kellene. (bizonyos ifó átjön akkor megnézi mi az és attól függően ad magas vagy alacsony jelet a lábaira), de ez nem akarja. A táp kondival és 7805-el megy, gondolom akkor elég stabil és zajmentes (vagy hogyan lehetne még jobban leárnyékolni, pl konzervdobozba, és csak a antennát vezetném ki rajta??), mert sajnos néha néha falsot villan, akkor is vesz jelet ha adó nem ad. Köszi a választ."” Köszi
Talán a végére lehetne járni, hogy mit akar, amihez nincs rendszergazdai joga. Az is lehet, hogy elég lenne csak "power user"-ként használni, nem?
Idézet: „Fontos az hogy a RX lábon legyen az a vevő és a TX-en az adó?” Nem, de akkor az UART-ot neked kell szoftveresen megoldani.
sziasztok!
v.kinek van ötlete (#307638) kérdésemmel kapcsolatban??Sürgős lenne!!!
Üdv!
Tudnátok nekem valami tippet adni, hogy egy egész port bitjeit, hogyan teszteljem és irjak rá fetételt? Mert egy bit tesztelése és feltétel irása rá, már megyeget, de nekem a 8 bitből 7et kellene figyelnem egyszerre és azok változására feltételt irni.Erre viszont nincs ötletem! Előre is köszi
Szia!
A regiszteredet elmented egy un. árnyékregiszterbe és a bejövő adat és az árnyékregiszter között XOR műveletet csinálva, a megfelelő 7 bitet AND kapcsolattal kimaszkolva megvan az eredmény! Steve
Ez milyen megfontolasbol kerult bele? Mi van a 0-4 cimen? Azonkivul szerintem a TXIF-et kellene figyelni, nem a TRMT-t. Ja, es ezeket a buvos szamokat a kodban csereld le szimbolumokra, hogy jobban at lehessen tekinteni (pl. a TXSTA,1 helyett TXSTA,TRMT).
Szia!
ORG 0x0- ra ezt hibaüzenetet adja ki:Error - section '.org_0' can not fit the absolute section. Section '.org_0' start=0x00000000, length=0x00000058 és ezért írtam át. A TXIF-et már próbáltam, de akkor is ugyananott akadt meg a kontroller. BTFSS TXSTA,TXIF GOTO $-1 szal előrébb nem vagyok, ezen a ponton nem jut tovább... A bűvös számokat is lecseréltem, de még a hiba mindig ugyanaz.. Ötlet???
Szándékos volt, hogy a STATUS regiszter bitjeit, közöttük a Z-t említettem. kissi leírta a megoldást, de azt nem írta, hogy a logikai kapcsolat eredményét mi mutatja. Próbáld ki a XORWF-et, vagy a XORLW-t két érték összehasonlítására és várom a megoldás ötleted a kiértékelésre(elágazásra).
Idézet: „Hogy tudom figyelni a Hyperterminálban, hogy a Tx-en kiküldött adatok megérkeznek-e a számitogépre?” Ha van kéznél PICkit2, akkor közvetlenül a TX lábra kötve logikai analizátor módban ellenőrithatő, hogy megy-e ki valami. UART módban pedig szövegesen jeleníti meg a kiküldött karaktert (ha jó a baudrate beállítás...). |
Bejelentkezés
Hirdetés |