Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Digitális világban nincsen olyan, hogy "nem árt". Szóval kötelező.
Érzek némi félreérthető tartalmat is a bankokkal kapcsolatos kérdések éás válaszok között.
Ugye nem csak akkor kell bankot váltani 16F-eknél, ha TRIS meg ehhez hasonló regeket akarunk elérni,hanem akkor is, amikor a többi változónk RAM rekeszét akarjuk írni-olvasni. Ez nincs másként a 18F-eknél sem, kivéve, hogy a TRIS és társai eléréséhez nem kell bankolni! A másik bankban található RAM adatainkhoz továbbra is bankot kell váltani! Vannak trükök, hogy bankváltás nélkül elérjünk 256+128 RAM rekeszt úgy, hogy az 1-es bankra váltunk. Ekkor lesz egy 128bájt Access terület, ami az SFR területhez hasonlóan minden bankból elérhető, valamint lesz az 1-es bankunk 256bájt méretű területe amire tulajdonképpen be vagyunk bankolva. A 384bájt legtöbb esetben elegendő terület a változóinkhoz, a többi területet meg általában úgy is indirekt címzéssel szoktuk kezelni. Ha ez még sem így lenne, akkor kénytelenek leszünk tovább bankolni!
Kosz a helyrerako valaszt.
En azt ugy gondoltam, netan az Mplab nyujt valami extra szolgaltatast nekunk halando pic hasznaloknak, amirol en nem tudtam. Gondolok olyanra, hogy minden regisztert automatikusan felismerne forditaskor, es valtogatna a megfelelo bankokat. Termeszetesen mas esetben mikor bankot kell valtani "kezibe" meg lehetne tenni ugyan ugy mint eddig. Lehet csenevesz gondolat?
Nem tudom ki van itt ilyenkor de most keztem PIC ezni és próbáltam egy LED villogtatót írni egy 16F628A RB4 es portjára de a következő hibaüzenetet kapom:
Warning[205] C:\PICPROJEKTEK\PIC.ASM 1 : Found directive in column 1. (LIST) Warning[205] C:\PICPROJEKTEK\PIC.ASM 9 : Found directive in column 1. (ORG) Message[302] C:\PICPROJEKTEK\PIC.ASM 13 : Register in operand not in bank 0. Ensure that bank bits are correct. Itt a program első fele: LIST P=16F628A #INCLUDE "P16F628A.INC" __CONFIG _CP_OFF&_XT_OSC&_WDT_OFF&_LVP_OFF&_MCLRE_ON&_PWRTE_ON CBLOCK 0x20 T1 T2 T3 ENDC ORG 0 KEZD MOVLW B'00010000' BSF STATUS,5 MOVWF TRISB BCF STATUS,5 GOTO LEDON Én átváltottam a BANK 1 be vagy mégsem? Meg miért nézi rossznak a LIST et és az ORG ot?
Elrendezés beni problémája van. Assembly nyelvél be kell tartani a szókózóket is. Pl:
Előszöris egyik sem hibaüzenet. Az első kettő figyelmeztetés, a harmadik csak üzenet.
A LIST és az ORG elé tegyé egy szóköz vagy egy tab-ot. Az első oszlopban a címkék (label) helyezkedhetnek csak el. Amazzal meg ne foglalkozz, ha megcsináltad a bankváltást. Csak jelzi, hogy olyan regiszterrel dolgizol, ami nem a bank0-ban van, és légy körültekintő. És hogy én is kérdezzek valamit, ezt, hogy a bankváltást BSF STATUS, 5 paranccsal kell csinálni, hol láttad?
A BSF az egy megadott regiszterben (pl status) egy megadott bitet (pl 5 ami a RP0) magasra (1) állít
"RP1:RP0: Direkt címző bitek 11 = Bank 3 10 = Bank 2 01 = Bank 1 00 = Bank 0"
Ha már idézed az RP0, RP1-eket, akkor használd azt.
BCF STATUS, RP0 ne konstans számokat használj, megvannak azok nevesítve. Potyo kérdése inkább úgygondolom erre irányult. Idézet: „Potyo kérdése inkább úgygondolom erre irányult.” Jól gondolod, csak kíváncsi lennék, honnan veszik az ilyen kódokat, amiben a nevesített biteket is számmal jelölik.
Pedig az adatlapban is az összes kódrészletben, ahol bankváltást csinálnak, mindig RP1 és RP0-t használnak, nem a bitek sorszámát. Pl. 16F628A adatlapjában example 5-1.
adatlap 18-19 oldalon van egy táblázat amin minden regiszter fel van tüntetve , bitek meg vannak számozva nevezve
Sziasztok !
Megint kérdeznék... A Topi féle futófényt átírtam 877 - ről 628A ra. Az MCLRE lábat is szeretném felhasználni mégpedig arra, hogy ha nincs hang /zaj a panel környezetében akkor az MCLRE láb testre húzásával állítsa le a program futását (reset) . Szóval egy hangra induló futófényt szeretnék kreálni. A problémám ott van hogy ha a config ban engedélyezem (MCLRE_ON) akkor a program nem is fut. Engedélyezni kell ezt + még valahol? Az MCLRE láb fel van húzva tápra 4,7 K val. Mit rontok el?
De ott a biteknek nevük is van. Nem azt mondom, hogy rossz, ha számokat használsz, de egyrészt a saját életedet nehezíted vele, másrészt jó eséllyel egyikünk sem fogja átnézni a kódot, ha segítségre lenne szükséged.
Hali!
Bocsi ha kicsit bugyuta lesz a kérdés, de még nincs pic égetőm (most vettem egy kitet 900Ft körüli áron, csak a trafó hiányzik hozzá (12v váltót vár a bemeneten ebből csinál 16V egyent, es az eladó rám akart sózni egy 12-es egyent, mondtam köszi, de nem ez van a leírásban)), és még nem égettem pic-et. Szóval a kérdés: Egérátalakítót csináltam kapcsolási rajz alapján amigához. Volt egy eredeti átalakító 16f84 volt a lelke, és a kapcsolási rajz és az eredti átalakító az egy darab 100nF-es szűrőkondin kívül teljesen megeggyezik. Egy ismerős megírta a PIC-et (kapcsolási rajzhoz mellékelték), és most azt vettem észre, hogy az eredeti ic-vel (kiszedtem az eredeti áramkörből) kasán működik az átalakító, míg az általunk írt pic-el csak akkor múködik, ha bekapcsolás után lehúzom a mouse portról az átalakítót, aztán visszadugom, de ha csak simán bekapcsolom a gépet, akkor a fenti műveletig nem csinál semmit. Annyit tudok különbséget a két chip között, hogy amit mi írtunk at végig lett írva (tehát a vége tele van üressel), míg az eredeti az nem, viszont az meg védett, tehát nem tudjuk igazából milyen kód futkos benne. Lehet hogy másik program van az eredetire töltve ugyan olyan kapcsolási rajz alapján, vagy esetleg a végigírás lehet a probléma?
"Skipping link step. The project contains no linker script." ez most mi lenne? (ehez kevés az angol tudásom annyit értek hogy már megint hiányol valami mutató script et)
Idézet: „Skipping link step. The project contains no linker script.” Magyarul: a linkelő lépés átugrása, kihagyása. A projekt nem tartalmaz linker(összefűző) szkriptet. És ez szerintem nem valaminek a hiányolása, hanem csak egy figyelmeztető üzenet lehet...
Kössz rájöttem a hibára! (Az volt a baj hogy egy másik asm fájl is volt a projrktben aminek semmi köze nem volt ehez. A törlése megoldotta a problémát )
Igen lehet én is ezt építettem meg tegnap.
Mindenkinek olyan soros portja van (hiszen csak az a soros port)
Igen, lehet.
Hogy sikerül-e, az inkább az alaplapodtól függ. De általában szokott, vagyis csak kevés olyan számítógép van, mellyel nem lehet ilyen JDM-klónnal programozni. De élő példája vagyok rá, hogy lehet.
Hello
Van egy 16F876-s kontrollerem. Ki akartam próbálni az A/D portját, de nem tudtam, mert a ADRESL regisztert hibásan tölti át egy másik regiszterbe. Mindig hiányzik az 5. és 6. bit. És az az érdekes, hogy ha ADRESL regisztert a BANK váltás után a PORTB-re kiküldöm, jól működik. Érdekes, nem? Várom az ötleteket. Hello |
Bejelentkezés
Hirdetés |