Fórum témák
» Több friss téma |
Az mindenesetre tanulságos lenne, ha közzétennéd, mi volt a hiba, megoldás.
A feladat, egy motoros olló vezérlőjének kifejlesztése volt. Kellett bele egy kétrészes vágásszámláló. Egy élettartam, és egy széria számláló. A szériaszámláló nullázható, az élettartam számláló nem. Természetesen kikapcsoláskor az értékeket le kellett tárolni.
Itt jöttek be a problémák. Nem volt szabad láb a táp külön érzékelésére. ktamas66 javasolta a HLVD-t. Segítsségetekkel ezt sikerült megoldani. Jó ötlet volt a megszakításra bízni a mentést. Így az minenkor vgrehajtódott. Viszont nem mindig olvasott vissza, és volt, hogy a táp felépülése közben, mikor még be sem olvasta az adatot, elment menteni a semmit. Így aztán a következő megoldás hozta meg a sikert: Inicializáláskor még nincs beállítva sem a HLVD, sem a megszakítás. Bekapcsol a rendszer, pár másodpercig látszik a bejelentkező képernyő. Ez idő alatt a táp tökéletesen feláll és zavarmentessé válik. Mielőtt betöltené a következő képernyőt, kiolvassa az EEPROM-ot. Ezt követően kapcsolja csak be HLVD-t és a megszakítást. Ezután tölti be a számláló képernyőjét, amin ekkor még csak 0-ák vannak, majd pedig a mentett értékekkel felülírja a számlálót.
Gratulálok! Látom nagyon bejött a grafikus kijelző!
![]()
Elég rendesen bejött.
Hála neked és a cikkednek.
Hát ennek igazán örülök! Már megérte megírni!
![]()
Sziasztok!
Elkészült az elektromos gördeszkám rádiótávirányítója. Egy egyszerű mini távirányítós autó adóvevőjéből, és két PIC12F1841-es mikrokontrollerből. Az egyik PIC a hüvejkújas gázkar jeleit dolgozza fel, és vezérli az adót, a másik a vevő jeleit dolgozza fel, és vezérli a motort. Ha valakit érdekel, hogyan működik, írjon rám, és megírom. Egy kis videó a működésről. A hozzászólás módosítva: Júl 16, 2015
Sziasztok!
Olyan kérdeésem lenne, ha IOC-vel szeretnék bemenet állapot változást figyeltetni, de egyidejűleg 2 bemenetnél, mi történik, ha már a megszakítás végrehajtásában vagyok, és újabb jel érkezik?
Mivel az IOCIF az INTCON regiszterben csak akkor törlődik ha minden IT le van kezelve az IOCxF regiszterekben, gyakorlatilag egyből újra belép az IT-be, mint más esetben is, ha IT alatt jön megszakítás és a megfelelő bit bebillen. Csak arra kell figyelni, hogy amikor törlöd a a lekezelt IOCxF bitet, ne töröld a másikat is (AND utasítással ajánlják maszkolni).
Ezt olvastam róla, de nem értem.
Idézet: „A bemeneti logikai jelszint megváltozásakor az INTCON regiszter RABIF bitje '1'-be billen. Ennek törlése előtt meg kell szüntetni az interruptot kiváltó okot: ki kell olvasni az(oka)t a bemeneti kapu(ka)t, amely(ek)re a bemenet megváltozásakor történő programmegszakítást engedélyeztük (ezzel szüntethetjük meg az előző és a jelenlegi állapot közötti különbséget). Csak ezután törölhetjük eredményesen az RABIF bitet.” Mit ért azalatt, hogy ki kell olvasni a bemeneti kaput?
Kell egy olvasás parancs (akkor is ha nincs az adatra szükséged), mert ez tölti be a latch-be az aktuális értéket, amihez később hasonlítani fog, így már megegyezik a latch és a pin értéke, nem okoz újabb IT-t, csak ha a pin újra változik.
Tehát kell egy ilyen sor?
MOVF PORTA,W Vagy át is kell tárolni valahová?
Sziasztok!
Segítsséget szeretnék kérni! Mi ez? Pontosabban mi a célja és működése ezeknek a fordítóutasításoknak?
Ajánlott olvasmány : Assembler User’s Guide
Egy angol tudással nem rendelkezőnek nem sokat segít....
Nem tudom mennyire jó, de ezt dobta ki a kereső:assembly_programozas
Az udata és a code benne van, ellenőriztem ![]() A hozzászólás módosítva: Aug 3, 2015
Annyit már sikerűlt kiszűrnöm a netről, hogy ezzel a CODE utasítással elkészíthetek saját rutinokat, amiket a későbbiekben a programjaimba beilleszthetek. Csak azt nem találom, hogy hogyan.
Szia!
Kónya-Kopják könyv 186. oldalától van róla szó (a doksiban 94. oldaltól) : Bővebben: Link
Köszönöm a segítsséget, de úgy látom, félreértelmeztem ezt a CODE dolgot.
Én olyasmit szerettem volna létrehozni, mint a C-ben a könyvtár. Azaz megírok pl. egy lcd kezelő rutint, ellátom egy névvel, elmentem, majd a programban, amiben használni akarom, csak meghívom. A többit a fordító intézi. Azaz az asm-ben nincs ott, csak a hex-ben. Ilyesmire van egyáltalán lehetőség?
Amire te gondolsz azt szerintem az az include. Megírod az asm-et, majd a program elején behivatkozod.
A CODE stb direktívák a relokálható kód fordításához tartozik. Amennyiben a projectben felsorolod az összes forrás állományt és megadod (elkészíted) liker vezérlőállományát, a fordítás során a forrás modulokból keletkező object állományokat a linker összeszerkeszti egy hex állománnyá. Továbbá van lehetőség már létrehozott obj állományok hozzáfűzésére is. Ezeket a linker vezérlőállományában lehet megadni.
Idézet: „Azaz megírok pl. egy lcd kezelő rutint, ellátom egy névvel, elmentem, majd a programban, amiben használni akarom, csak meghívom. A többit a fordító intézi. Azaz az asm-ben nincs ott, csak a hex-ben.” Ha az említett LCD kezelő eljárásokat külön lefordítod és egy obj állományban szerkeszted hozzá a később fordított projecthez, az LCD vezérlő portlábak az obj állományban megadottak lehetnek csak.
Ilyesmire gondolok, de ez hogy néz ki a gyakorlatban?
Annyi, hogy ugyanabba a a könyvtárba bemásolod azt az asm-et amire hivatkozni akarsz és a forrásba beírod. Pl:
Csatolok két asm-et ami itt megjelent eggyik cikkből van. A main a fő program forrása, az m_bank pedig PIC16-osoknál megszokott bankváltást tartamazza. Én nem próbáltam sosem.
A kérdésedre kétféle megoldás létezik.
Az egyik megoldás, ami talán a legegyszerűbb, az a projekt több forrásfájlra tagolása. Ilyenkor egy forrásfájl erősen elkülönül a főprogramtól, néhány belépési pontja van, a változók főleg lokálisak. Természetesen lehet globális változókat használni, ilyenkor csak egy helyen kell deklarálni, a nevét fel kell sorolni a globális címkék között, míg a többi forrásban external hivatkozásként kell megadni. Ugyanez vonatkozik a program címkéire, szubrutinok belépési pontjaira. A projekthez hozzá kell adni mindegyik forrásállományt.
Egy külön fordított szubrutin váza:
Másik lehetőség, hogy az MPLib könyvtárszerkesztővel létrehozunk egy egy objekt könyvtárat. (Én nem, már nincs hozzá türelmem, hogy ezen a módszeren átrágjam magam. ![]() A hozzászólás módosítva: Aug 4, 2015
Szia!
Nézz körül a Májki honlapján. Van sok macro és include file, azokból gyakorolhatsz, elleshetsz valamit. itt
Kedves fórumtársak!
A segítsségeteket szeretném kérni. Egy távvezérlőt szeretnék építeni, adó és vevő oldalon egyaránt PIC12F1840-el. Ezt az adó-vevő párt néztem ki hozzá. (Legalábbis remélem, hogy ez egy pár) Adó: RFM117-868S1 Vevő: RFM217-868S1 Ebben szeretném a segítsségeteket kérni, hogy ezt hogyan tudnám megvalósítani. Semmi jártasságom nincs az adatkommunikáció terén. Előre is köszönöm. |
Bejelentkezés
Hirdetés |