Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Minden PIC-nél használható ahol engedi a fordító... De szerintem mindegyiknél.
Ok. Köszi a kimerítő választ.
Idézet: „Azért tovább is mesélem, hátha érdekel” Persze, hogy érdekel ha az elektronikával kapcsolatos!
Üdv.
Egy 32bit bináris--> 10 BCD konvertáló függvényre lenne szükségem. Sajnos nem találtam ilyent, a michrochip-nél csak 16 bites van. Viszont a Kónya L. oldalán Link a Programozás/16bit bináris 5 jegyű BCD/C algoritmus-nál azt írta, hogy át lehet alakítani a függvényt tetszőleges számjegyűre. Csak nem értem a függvény végét A válaszokat előre megköszönöm
Ez esetleg?
http://www.jennaron.com.au/pics/bcd2a.html
Ok kösz, pont egy ilyent kerestem
Bemásoltam a saját programomba, de sajnos nincs elég hely a bank0-ban, ezért átraktam a függvény összes reg-jét bank1-be, de nem működött, még próbálkozok vele, mert jónak tűnik.
Üdv! Építettem egy Pic programozót. Találtam a neten egy pic-es led villogtatót, ki szeretném próbálni. Nekem 16F871-em van itthon, de a kapcsolás18F252-re van. Azt kérdezném a 16-ost felprogramozva működik az áramkör? A Pic-ek között van kompatibilitás? Bocsi, ha nagyon hülyeséget kérdeztem... Zoli
Sajnos nem fog működni. Átírni sem egyszerű.
Sajna nem boldogulok a 32bit->10 digit BCD rutinnal {(#89449). hozzászólásban linkelve}. A fordító (MPASM Toolsuite) mindíg hibát ír ki, az oldalon van egy link is, ami speckó beállításokról írkál:
The dialog box is reached from the MPLAB main window by clicking on Project then on Add/Modify Compiler erről van szó Ilyen nincs is. Igaz MPLAB 3.akárhányas verziójával készült a rutin, tehát nem is olyan meglepő. Az lenne a kérdésem, át lehetne-e írni normálissá ezt a függvényt? Elég érdekes megoldások vannak benne pl.: CBLOCK 0x0c bin:4 Ez azt jelenti négy regiszternek van egy azonosítója. Nem is tudtam, hogy ilyent is lehet vele csinálni. Na mindegy, az eredeti asm-et befordítva ezt kapom hibaüzenetként: Clean: Deleting intermediary and output files. Clean: Done. Executing: "D:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 "BCD2A.ASM" /l"BCD2A.lst" /e"BCD2A.err" Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 56 : Symbol not previously defined (fsr) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 58 : Symbol not previously defined (indf) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 61 : Symbol not previously defined (fsr) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 67 : Symbol not previously defined (indf) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 68 : Symbol not previously defined (fsr) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 72 : Symbol not previously defined (indf) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 92 : Symbol not previously defined (fsr) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 99 : Symbol not previously defined (indf) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 100 : Symbol not previously defined (indf) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 102 : Symbol not previously defined (indf) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 104 : Symbol not previously defined (indf) Error[113] D:\MPLAB PROJEKTEK\32BITBCDORIGINAL\BCD2A.ASM 105 : Symbol not previously defined (fsr) Halting build on first failure as requested. BUILD FAILED: Wed May 30 21:59:11 2007
Első körben próbáld átírni nagybetűsre az fsr-t és a indf-et. Ha ez nem jönne be, akkor az fsr helyére írj 4-et, az indf helyére 0-t(ezek a címei az említett regeknek a 16F84-ben, és ezeket a szimbólumokat nem ismeri fel a fordító.)
Ezt a bin:4-et én sem ismertem, lehet a bővítés része. Én nem vagyok híve ezeknek a bővítéses dogoknak, szeretem a gyári dolgokat használni, nem ér meglepetés. Persze lehet, hogy csak én vagyok lemaradva és lehet ilyet az újabb MPLAB-okban csinálni, de ezt csak délután tudom kipróbálni, kíváncsi vagyok...
A fenti megoldás kiváltása: A bin:4 bcd:10 helyére kell írni: bin bin1 bin2 bin3 bcd bcd1 bcd2 ....... bcd9 Érted miért ugyanaz a kettő eredménye? Szerinted számít a bin1-től ill. bcd1-től milyen nevet adunk?
Így sem sikerült befordítani :rinya:
Ha átírom az fsr-t és az indf-et nagy betűre akkor "Duplicate label" és "Missing argument(s)" hibaüzeneteket kapok helyette. Ha nullát és 4-et írok be helyettük akkor "Illegal label (0)" és "Missing argument(s)" hibaüzeneteket kapok. A BCD:10-et szerintem inkább így értelmezi: bcd+0 bcd+1 ... bcd+9 Az asm-ben valami ilyenek vannak. Idézet: „A BCD:10-et szerintem inkább így értelmezi: bcd+0 bcd+1 ... bcd+9 Az asm-ben valami ilyenek vannak.” Kérdeztem, hogy érted e, hogy miért jó úgy, ahogy írtam. Nyugodtan válaszolhatod, hogy nem, nem szégyen valamit nem tudni, én se tudok mindent! A bcd:10 lefoglal 10 memória helyet, és az első lefoglalt hely címe a bcd lesz, az-az az a cím, amin éppen a CBLOCK ban a bcd áll(0x0C+4 az-az 0x10) . Mivel ez egy cím, ezért hozzá lehet adni számokat, ezért lesz bcd+1 értelmezhető a fordítónak, ami ebben az esetben a bcd utáni rekeszre fog mutatni(0x11). Ezért nem érdekes, hogy milyen nevet adsz a bcd utáni változóknak, mert nem név szerint hivatkozik rá a programozó a programban. Az fsr, indf kérdést délután megnézem, mert már engem is érdekel, miért nem képes lefordítani ezeket a szimbólumokat, főleg úgy nem, ha számokkal hivatkozol a regiszterekre! Remélem lesz időm rá!
Még egy kérdés, így írtad át őket?
movlw 0x20 ;initialize pointer movwf FSR ; to RAM NEXT clrf INDF ;clear INDF register incf FSR ;inc pointer btfss FSR,4 ;all done? goto NEXT ;NO, clear next CONTINUE : ;YES, continue A 16F84 adatlapjából az indirekt címzési mód rész példáját másoltam ide. A fordítónak kötelesége ismernie az FSR és az INDF szimbólumokat, feltéve ha a programban be van include-olva a megfelelő fájl, eredeti esetben ez: #include ill. az a PIC amire át szeretnéd írni a progit...
lemaradt...
#include "<"P16F84.INC">" nem szereti a fórummotor a kisebb nagyobb jelet! A macskakörmök nem kellenek....
Nekem is ez ugrott be. Én is volt hogy megszívtam vele, mert lemaradt az Include sor. A hibaüzenet már nekem is ismerős.
Hali
valaki meg tudná nézni mi gond lehet ezzel a programmal sehogy sem akar müködni,basicben van
Igen, bent van az include, miután beírtam rendesen. Az eredeti asm-ben kettőskereszt (#) nélkül volt beírva, de ezt észrevette a fordító, ezt még sikerült tegnap kijavítani.
Szerintem nagy betűkkel felismeri az FSR-t és az INDF-et, mert csak "Missing argument(s)"-et ír ki. Ha nem ismerné fel (kisbetűkel) akkor illegal charactert, vagy valami hasonlót írna ki.
A movwf FSR elvileg azonos a movwf 4 formával, ha a fordító értelmezi az FSR-t ami a P16F84.inc-ben 4-nek van deklarálva.
Nem értem milyen érték hiányzik akkor neki? No mindegy, nem sokára otthon leszek, már nagyon kíváncsi vagyok mi a megoldás!
Sziasztok!
Első PIC-es áramkörömet szereném megépíteni. Ti milyen programot, fordítót, égetőt és PICet ajánlotok? Egyik barátom a PICBasic-et használ. Nem tudjátok, hogy ezt honnan tudom letölteni és mik kellenek még hozzá, hogy tudjam használni?
Na itt vagyok, mellékeltem a lefordítható fájlt, legalább is nekem lefordult.
Én nem tettem semmi más, mint az fsr és az indf szimbólumokat nagybetűvel írtam be(ez egy szabály az MPLAB-ban, nem is értem miért ilyen a példa kód.). Még nem teszteltem, de azt is megnézem. Egyelőre annyi is eredmény, hogy simán lefordult. Az MPLAB-om 7.5-ös.
Három csomagot ajánlok:
1. -PIC16F627A-I/P PDIP 310 Ft +fa -oshon program, vagy IC-Prog -oshon, vagy WPB égető áramkör -MPLAB 7.5 fejlesztő környezet - Assemler 2. - PIC18F1320-I/P PDIP 540 Ft +fa - WPB_F18 (wattmep.tvn.hu) - oshon, vagy WPB égető áramkör - MPLAB 7.5 fejlesztő környezet - Assemler és ha már megy esetleg C18 3. - PIC18F2550-I/SP SPDIP 1200 Ft+fa - WPB_F18 (wattmep.tvn.hu) - oshon, vagy WPB égető áramkör - MPLAB 7.5 fejlesztő környezet - Assemler és ha már megy esetleg C18 A basic nem PIC-hez illő program, de már a C-is túlzás egy sokkal inkább elektromos áramkörhöz, mint programozható eszközhöz! A PIC működését, csak assemleren keresztül értheti meg az ember, a fejlettebb nyelvek elfedik a lényeget és ha valami nem működik, soha nem jön rá az ember mi az oka. Ezért legyen a második nyelv a C vagy a Basic, ha már ismerjük a PIC lényegét.
Kösz megvan miért nem ment nekem: amikor tegnap kis betűkkel voltak az indf és az fsr, megpróbáltam az elején #define fsr-el, és indf-el. Aztán valahogy bent felejtettem Bocs a hülyeségért
Most pedig át kellene írnom 16f877a-ra, és belemásolni a meglévő progiba. Kiíváncsi vagyok, hogy müxik-e.
Mennie kell, elvileg minden stimmel oda is, változtatni sem kell a kódon.
Jut eszembe, megint tanultam valamit, mert ezt a bin:4 megoldást nem ismertem. Tetszik!
Megnéztem, hogy fordítja le, a bin:4-et: az aktuális címet elnevezi bin-nek, majd utána 3 reget nem nevez el. Azt akarom még kérdezni, ha a bin:4-nek egyesével be akarom írni az értékeit, akkor az el nem nevezett reg-ek hexáját írjam be, vagy lehet másképpen is?
Idézet: „Azt akarom még kérdezni, ha a bin:4-nek egyesével be akarom írni az értékeit, akkor az el nem nevezett reg-ek hexáját írjam be, vagy lehet másképpen is?” Pl. MOVWF bin+2 A számolgatást meg hagy a fordítóra, azért van...
Kérlek olvass kicsit vissza, nemrég részletesen taglatam a változó nevek hogyan kapnak értéket, hogyan értelmezi a fordító a neveket és hogyan deklarálhatjuk sokféleképpen őket!
Idézet: „Megnéztem, hogy fordítja le, a bin:4-et: az aktuális címet elnevezi bin-nek, majd utána 3 reget nem nevez el.” De hiszen ezt az imént írtam le! :miaz: Idézet: „Azt akarom még kérdezni, ha a bin:4-nek egyesével be akarom írni az értékeit, akkor az el nem nevezett reg-ek hexáját írjam be, vagy lehet másképpen is?” Lehet a hexával is, de ha nem akarsz +1-ezni, meg nem akarsz hexázni, akkor úgy deklaráld a változóneveket, ahogy már írtam: bin, bin1, bin2 stb, és akkor a nevükön lehet őket szólítani. Ennek még van egy előnye, hogy a Watch ablakban ki tudod választani a debuggoláskor a regeket, hogy lástd mi történik velük. bin:4 megoldásnál nem lesz mit kiválasztani, mert a rekeszeknek igazából nincs nevük, csak az első jelenik meg a listában. Indirekt címzéshez viszont ideális megoldás, főleg, ha több 100 rekeszt kell lefoglalni.
Az a probléma, hogy mindíg 9953364825-öt ír ki végeredményül, függetlenül attól, hogy milyen értékű a bemeneti adat. A bemeneti bináris adatot mindenképpen megkapja, ezt is kiíratom lcd-re.
Az eredetihez képest annyit változtattam, hogy a reg-eket átírtam bin, bin1 bin2... re az összeset, ahogy mondtad
Már működik!
Az volt a gond, hogy bemásoltam a makrót is, ami egy fix értéket rak be a bin:4-be, és a bin...bin4 is fordítva van számozva: bin3 az LSB és bin0 az MSB. Úgyanez a bcd regeknél is... Ez jó példa arra, amikor az ember előbb kérdez, mielőtt gondolkodna...
Hello mindenki!
Olyan problémám akadt, hogy: Van egy programom, a számítógépes szimulátoron kitűnően működik, azt csinálja amit kell.De ha beégetem a PIC-be el se indul! A program az LCD inicializálásával kezdődik és a beégetett program már ezt se hajtja végre! Leegyszerűsítettem a programot, az eleje maradt ugyan az csak a SUB-okat vettem ki belőle, így elindul csinálja ügyesen. Kibővítettem 1-2 SUB-bal, még mindíg műkszik, bár néha nem jól indul be és nem pont azt csinálja amit kell! Ezek után hozzá írok még 1-2 sort és beégetve nem hajlandó beindulni. Mi lehet a gond? Az égető progi szerint az égetés minden esetben jól zajlott le és az ellenőrzés során se talál hibát. Várom az okosok válaszát, ötleteit, segítségét! Előre is köszi! |
Bejelentkezés
Hirdetés |