Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Jó régi, és sajnos még hiányos. A főleg sajnos, hogy nem látok fejlesztést.
Viszont ami megvan, az egész szép munka. Jó lenne ha befejeznék rendesen! (egyébként van egy olyan gomb a szerkesztésnél, hogy LINK. Érdemes használni...)
Sziasztok!
Egy MPLAB-os kérdésem lenne. Adott egy projekt, ami 2 db assembly fájlból áll.Az egyik a főprogram, processzorbeállítással, regiszterbeállítással, stb, a másik egy alprogram, amit egy include utasítás hív meg.A kérdésem a következő: -az includált programnak is a projektben kell lennie? - a kiterjesztésének mindenképp .inc-nek kell lennie? - kell hozzá linker fájl? Sajnos nem vagyok nagy penge a témában.Türelmeteket, és segítségeteket köszönöm:AC
Szia acidum,
Az include file-t ugy kell elkepzelni, hogy ott ahol azt mondod "#include" azon a ponton mintha egy szovegszerkesztovel beszurnad az filet a foprogramba. Nincs semmi extra ebben, nagyon regi es egyszeru technika ez amit a forditoknal alkalmaznak. Mielott a fordito egyaltalan latna a forras kodot egy elofeldolgozo elokesziti a forrast es az ilyen szerkeszteseket az elvegzi. Pl minden MCU-hoz ad a Microchip egy INC file-t, ami az MPASM konyvtarban talalhato meg pl "P12F683.INC", es ha ezt beinkludalod, akkor nem kell mar a specialis funkcioju regisztereket sajat magadnak definialni. Ugyanaz az eredmeny (es gyakorlatilag ugyanaz tortenik) mintha annak a file-nak a tartalmat Ctrl+C - Ctrl+V -vel atmasolnad a sajat forrasodba. Kiterjesztesnek nem kotelezo INC-nek lennie, csak javasolt - innen latod, hogy ez nem egy kulon asm modul, hanem csak egy include file.. Nem is kotelezo a projectek koze felvenni, de megintcsak javasolt, igy konyebben tudod a projectedet atlatni, hogy mi tartozik bele mi nem, ill ha szerkeszteni kell akkor elegendo a project managerben rakattintani a file-ra mint hogy az Open-t hivogatni es keresgelni a konyvtarakban hol is van az atkozott INC file. Linker script emiatt onmagaban nem kell... Szerencsesebb ha linker scipteket mar elkezded tanulni ill hasznalni, de lehet anelkul is ellenni amig nem hasznalsz LIB-eket.
Köszönöm a választ kedves Trudnai.
A #include OK, értem is miért, de nem forditja le.Megadtam neki a full elérési utat, pl #include "c:\file.asm", de igy sem.Ezért kérdeztem, h az includált filének a projektben kell-e lennie.Ez egy külön modul szeretne lenni, azért nem .inc a kiterjesztése. Mit kellene csinálnom, h lefordítsa a beincludált asm-et?
Miért nem teszed be a projectbe és próbálod meg úgy?
Egyébként szerintem akkor is le kéne fordítania, ha megadod a teljes elérési utat, bár én még úgy nem próbáltam. A project beállításainál meg lehet adni a különböző fájlok elérési útvonalát, ott érdemes beállítani azt a könyvtárat, amiben az inc, header fájlaid vannak, akkor még elérési utakat se kell a forrásba beírni.
Betenném, de átláthatatlan lesz az egész tőle
![]() elég sok.Ez egy microchipes keeloq decoder, és a vevő része az, ami külön modulként akar lenni.
Mi a hibakod vagy hibauzenet? Az egy asm file, tehat lehet egy modul amit nem inkludalni kellene, hanem szepen felvenni a projectbe es osszelinkeltetni?
Nincs hibaüzi.Beleraktam egy sort, ami teljesen hülyeség, a fordító ugyis megáll, ha meglátja.De nem. A főprogram lefordul, a modul nem.
Hogy lehet összelinkeltetni?
Ha ez a külön file egy komplett asm, aminek a végén ott van az "end" is, akkor ezt nem include-álni kell, hanem fel kell venni forrásként a projektbe.
Ha egynél több asm file-ból megy a fordítás, akkor mindenképpen a relokálható és linkelendő módot fogja az MPLAB választani, tehát neked is úgy kell megírni a főprogramot, hogy az egy relokálható modulként forduljon le (cblock helyett udata, org helyett code használata a forrásban, de az MPASM help-ben jó példa is van rá). Esetleg abba a forrásba is bele kellhet nyúlni, amit modulként akarsz használni, ha az nem relokálható módra volt elkészítve. A linkeléshez kell linker script, legegyszerűbb berángatni a projektbe a gyáriak közül a megfelelő PIC-hez tartozót. Ha jól emlékszem, az MPASM könyvtárából nyílik egy LKR könyvtár, abban vannak a gyári linker scriptek. Ezután célszerű a "build all"-lal fordítani a projektet, ez két asm file esetén 3 folyamatot kellene, hogy eredményezzen, kétszer az MPASM lesz meghívva, külön-külön a két asm-re, aztán pedig az MPLINK a hex előállítására. Ezeket a műveleteket az output ablakban lehet is látni a fordítás után, hogy melyik parancsot milyen paraméterezéssel indította el.
Sziasztok!
Lenne egy sokkoló kérdésem.. Még nincs PIC égetőm, nem tudtam még beszerezni hozzá az alkatrészeket, ezért egyelőre az elmélettel próbálkozok. Szeretnék egy futófényt csinálni 16F877-es PIC-kel, amiben egy gomb lenyomására lehetne változtatni a jelenleg futó "programon". Olyasmi lenne, mint pl. egy biciklilámpa. A PIC PORTB, PORTC és PORTD lábait használnám fel a LED-ek működtetésére (24 db LED). Egyelőre még csak 2 "funkció" található benne, ezt majd bővíteném még, de egyelőre annyi lenne a lényeg, hogy egyáltalán működőképes legyen. A kijelzési részét azt hiszem, meg tudtam csinálni, de azt, hogy a gomb lenyomására lépjen, az már nem biztos ![]() A gomb a PIC 2. lábán van (RA0). Az alapot, amit átírtam, innen az oldalról szereztem be, szóval nem magamtól van, ezért lehet, hogy sokaknak ismerős lesz ![]() Magát a vizsgálatot egy szubrutin segítségével szeretném megoldani, nem tudom, hogy meg lehet-e csinálni egyéb módon, de azt szerintem majd mondjátok. A vizsgálat a FUTOFENY label alatt található. Azt szeretném, hogy legyen szíves mondja már meg valaki, hogy hol hibázok, milyen módszerrel lenne a legértelmesebb megcsinálni. Ha valamit netán nem értetek, akkor szóljatok nyugodtan, igyekszem elmagyarázni.
Van néhány alapvető probléma, szerintem azzal kezdjük és csak utána ássunk mélyebbre.
Tehát azt írod, hogy a PORT B,C,D kimeneteket használod LED-ekre. Ezzel szemben csak a PORTD-t állítod be kimenetnek. (csak 65 hibát írt ki az MPLAB!) A másik, hogy nem szokás ilyen kígyó kódot írni, ha arrébb kell léptetni egy bitet. Erre való az RRF, és az RLF utasítás. Annyit kell csak tenni, hogy az első portra vonatkozó utasítás kiadása előtt törölni kell a C-t, hogy biztosan 0 lépjen be(nézd meg az utasítás működését az adatlapban!). Ha ezen túlleszünk, jöhet a gombos kérdésed.
Nem csak a PORTD-t állítom be kimenetnek, először PORTB-vel kezdek, aztán, ha lement mind a 8 láb, jön a PORTC, utána a PORTD.
Hogyan javítsam ki? Mert addig értem, hogy RRF meg RLF utasítást használom, csak hogyan tudom megcsinálni, hogy ne akadjon meg a lábak váltása közben? Idézet: „Nem csak a PORTD-t állítom be kimenetnek, először PORTB-vel kezdek, aztán, ha lement mind a 8 láb, jön a PORTC, utána a PORTD.” Én csak TRISD-t látok. (Egyébként nem volt 65 hibaüzi, azt elhamarkodtam...)
Ha így csinálom, akkor jó lesz?
FUTOFENYJOBB MOVLW B'00000001' MOVWF PORTB RRF PORTB, F CALL DELAY CLRC MOVLW B'00000001' MOVWF PORTC RRF PORTC, F CALL DELAY CLRC MOVLW B'00000001' MOVWF PORTD RRF PORTD, F CALL DELAY CLRC GOTO FUTOFENYJOBB
Ha végigköveted a programodat(amit legközelebb úgy szúrj be, hogy használod a "Kód" gombot, és a code után írod, hogy =asm) akkor láthatod, hogy nem az fog következni, amit szeretnél.
pl. minden GOTO FUTOFENYJOBB vissztérésnél a PORTB-re '00000001'-t viszel ki. Megasztán, ha jobbra akarod léptetni a bitet, akkor a bal szélsővel kéne kezdeni. Azt is meg kéne beszélni, hogy milyen sorrendben állnak a portok. Én látatlanban a B,C, D sorrendet választottam, és így írtam meg a példát, amit ha leszimulálsz, akkor szépen lépegetnek a bitek a Watch ablakban! Csatoltam a projectet, csak az elérési utakat írd át a Project beállításoknál.
Szia!
Ha jól sejtem azt szeretnéd, hogy először végigfusson mindegyik port mindegyik lábán, akkor nem lesz jó. mert most csak annyit fog csinálni, hogy felgyullad a PORTB,1, aztán kis idó múlva a PORTC,1 aztán a PORTD,1 A másik: ha betöltöd az W-ből a PORTB-re és egyból forgatod a biteket és csak utána hívod meg a delay-t akkor az első led elhanyagolható ideig fog csak világítani Ha úgy szeretnéd, hogy végigfusson a portokon a fény akkor ciklusba kéne ágyazni, valahogy így: movlw b'00000001' clrc movwf PORTB call delay rrf PORTB,F btfss status,c goto $-3 clrc movwf PORTC ... ... ... remélem nem írtam rosszul semmit, én is kezdő vagyok a témában
Nagyon köszönöm a segítséget.
Használtam először a Kód gombot, csak egymásmellé behányta a szöveget, így inkább kivettem, nem tudtam ezt az =asm funkciót. Sorrendre a B, C, D-t jól választottad, én is úgy kezdtem el Ezt a bal szélsőset nem értem. A léptetést akkor úgy kell megcsinálni, hogy, ha RRF-et használok, akkor jól értem, '10000000'-ról kell elindulnom? Ki szeretném bővíteni még több funkcióval, akkor ebben tudnál még segíteni? Elég lesz az első lépést belémverd, utána szerintem már magamtól menni fog.
Sziasztok, PicKit2 építésével kapcsolatban szeretném a hozzáértők segítségét kérni, épp benne vagyok a szilva oldalát talált pickit2 építésében de sajnos a rendeléskor lemaradtak a BAT85-ös diódák, illetve induktivitást olyat rendeltem ami úgy néz ki mint az ellenállás, namost az volna a kérdésem, hogy lehet valami ismertebb diódával helyettesíteni ezt a BAT-ot vagy nem igazán, illetve ,hogy az induktivitás megfelelő-e erre a célra.
Kapcsi csatolva. Üdv: Doncso
Persze segítek, csak lépésenként haladjunk, hogy megértsd.
Szimuláld le és a kezdő bites kérdésedre megvan a válasz. Próbáld meg magad megírni a balra léptetős rutint. Ha nem megy szólj...
Csak halkan jegyeznem meg, hogy az RLF/RRF is un RMW utasitas, azaz a port teljes tartalmat elobb kiolvassa, aztan modositja majd ujra vissza irja. Hogy miert erdekes ez? Tegyuk fel hogy egyik lab valami miatt nagyon le van terhelve, a PIC nem kepes azt - idoben - magasra emelni. Ekkor megint jon az RLF/RRF ami kiolvassa a portot de az meg alacsony szintet mutat, kiolvas ebben az esetben egy b'00000000' erteket es utana mar hiaba shifteled az nulla marad (immaron 'hivatalosan' is).
Ilyeneket shadow regiszterekkel szokas csinalni, tehat a shadow regiszteren el kell vegedni a szukseges modositast majd azt beirni a portba valahogy igy:
Rendben, igyekszem
Még az MPLAB-ban való tesztelés nem igazán megy, de próbálok rájönni ![]() trudnai: Ne haragudj, de szerintem ezt még egyelőre hanyagolnám, jó lenne rendesen megértsem az eddig hibáim javított verzióját ![]() Kicsit sok lenne így egyszerre
Ebben igazad van, de egyelőre megteszi így is. Másrészt nem lenne szép, ha olyan áramkört terveznénk a kimenetre, ami nem engedné magasba! Legalább is én még ilyet nem követtem el. Szerintem a LED-ek sem tennének ilyet.
De ismétlem a megjegyzéseddel egyetértek, ha valóban ilyentől félni kéne. Idézet: „Még az MPLAB-ban való tesztelés nem igazán megy, de próbálok rájönni” A projectet ha megnyitod akkor Debugger módban jön fel? (vannak kék Play, Pause és >> gombok és léptető ikonok?, Feljön a Watch ablak?)
Igen, van minden.
Úgy nézem, ahogy Topi leírta. Eddig nem csinált semmit sem, de legalább most nem ír hibákat ![]()
Hogy érted, hogy nem csinált semmit?
A Watch ablakban benne kell lennie a PORTB,C,D portoknak, bináris megjelenítésben is. Ráböksz a kék >> gombra és nézed, hogy mit csinál a program... De lépésenként is fégrehajthatod a Step Into ikonnal, vagy az F7 nyomkodásával.
Szó szerint értem, hogy nem csinál semmit sem.
A Tiédet nem nyitja meg, ezért átmásoltam a leírtakat az enyémbe, de ott nem csinál semmit sem. A Tiédnél azt írja, hogy: "Unable to load workspace C:\...\vtnagy_futofeny.mcw because the file has been corrupted."
Mintha írtam volna, hogy a Project beállításainál(zöld ikon fogaskerékkel) meg kell adni azt az elérési útvonalat, ahová Te másoltad a Directories fülön!
Milyen verziód van?
Igen, tényleg írtad, ne haragudj, úgy tűnik, véletlen átsiklottam felette :/
8.14-es verzióm van
Nem kell elnézést kérned, csak haladjunk!
![]() A verzió jó. Vigyázz, hogy az elérési út hossza nem lehet 64 karakternél hosszabb. Ez az egyik legbosszantóbb az MPLAB-ban, nem értem miért nem képesek ezen túllépni, na de ez van...
Ezt nem tudtam
![]() Átraktam mostmár máshova, de még mindig nem igazán akar menni. Ezzel később is el tudok szöszölni, hogy megnézzem a debug részt. Nem akarlak feltartani, így inkább beszúrom a balra futó futófény próbáját ![]()
|
Bejelentkezés
Hirdetés |