Fórum témák

» Több friss téma
Fórum » PIC programozás assemblyben
 
Témaindító: sonajkniz, idő: Máj 30, 2015
Témakörök:
Lapozás: OK   3 / 32
(#) nedudgi válasza sonajkniz hozzászólására (») Jún 23, 2015 /
 
Az mindenesetre tanulságos lenne, ha közzétennéd, mi volt a hiba, megoldás.
(#) sonajkniz válasza nedudgi hozzászólására (») Jún 23, 2015 / 1
 
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.
(#) Pali79 válasza sonajkniz hozzászólására (») Jún 23, 2015 /
 
Gratulálok! Látom nagyon bejött a grafikus kijelző!
(#) sonajkniz válasza Pali79 hozzászólására (») Jún 23, 2015 /
 
Elég rendesen bejött.
Hála neked és a cikkednek.
(#) Pali79 válasza sonajkniz hozzászólására (») Jún 23, 2015 /
 
Hát ennek igazán örülök! Már megérte megírni!
(#) sonajkniz hozzászólása Júl 16, 2015 / 1
 
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
(#) Pali79 válasza sonajkniz hozzászólására (») Júl 16, 2015 /
 
Szép munka! Gratulálok!
(#) sonajkniz válasza Pali79 hozzászólására (») Júl 16, 2015 /
 
Köszönöm!
(#) sonajkniz hozzászólása Júl 21, 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?
(#) ktamas66 válasza sonajkniz hozzászólására (») Júl 21, 2015 /
 
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).
(#) sonajkniz válasza ktamas66 hozzászólására (») Júl 21, 2015 /
 
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?
(#) ktamas66 válasza sonajkniz hozzászólására (») Júl 21, 2015 /
 
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.
(#) sonajkniz válasza ktamas66 hozzászólására (») Júl 21, 2015 /
 
Tehát kell egy ilyen sor?
MOVF PORTA,W
Vagy át is kell tárolni valahová?
(#) ktamas66 válasza sonajkniz hozzászólására (») Júl 21, 2015 /
 
Nem kell, ennyi elég.
(#) sonajkniz válasza ktamas66 hozzászólására (») Júl 21, 2015 /
 
Köszönöm!
(#) sonajkniz hozzászólása Aug 3, 2015 /
 
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?
  1. udata_acs          
  2. p         res     2            ;
  3. d         res     1            ;
  4. k         res     1            ;
  5. RST      CODE        
  6.           goto    start
  7.  
  8.  
  9. PGM      CODE
  10. start
(#) ktamas66 válasza sonajkniz hozzászólására (») Aug 3, 2015 /
 
Ajánlott olvasmány : Assembler User’s Guide
(#) Pali79 válasza ktamas66 hozzászólására (») Aug 3, 2015 /
 
Egy angol tudással nem rendelkezőnek nem sokat segít....
(#) ktamas66 válasza sonajkniz hozzászólására (») Aug 3, 2015 /
 
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
(#) sonajkniz válasza ktamas66 hozzászólására (») 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.
(#) fsub válasza sonajkniz hozzászólására (») Aug 3, 2015 /
 
Szia!
Kónya-Kopják könyv 186. oldalától van róla szó (a doksiban 94. oldaltól) : Bővebben: Link
(#) sonajkniz hozzászólása Aug 4, 2015 /
 
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?
(#) Pali79 válasza sonajkniz hozzászólására (») Aug 4, 2015 /
 
Amire te gondolsz azt szerintem az az include. Megírod az asm-et, majd a program elején behivatkozod.
(#) Hp41C válasza sonajkniz hozzászólására (») Aug 4, 2015 /
 
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.
(#) sonajkniz válasza Pali79 hozzászólására (») Aug 4, 2015 /
 
Ilyesmire gondolok, de ez hogy néz ki a gyakorlatban?
(#) Pali79 válasza sonajkniz hozzászólására (») Aug 4, 2015 /
 
Annyi, hogy ugyanabba a a könyvtárba bemásolod azt az asm-et amire hivatkozni akarsz és a forrásba beírod. Pl:
  1. #include "m_bank.asm"


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.
(#) nedudgi válasza sonajkniz hozzászólására (») Aug 4, 2015 /
 
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.
  1. ; Foprog
  2.     udata
  3. data1  res  1
  4. data2  res  1
  5.       global data1,data2
  6.       extern UARTrx,UARTtx,UARTini
  7. RESET_VECTOR CODE       0x0000
  8.         goto    init
  9. ; megszakítások kezelése
  10. init
  11. ;
  12.       call  UARTini
  13.       call  UARTrx
  14.       call  UARTtx
  15. ;
  16.       end

Egy külön fordított szubrutin váza:
  1. ; Szubrutin
  2.       extern  data1
  3.       global  UARTini,UARTrx,UARTtx
  4.       code
  5. UARTini:
  6. ;
  7. ; Az UART inicializálása
  8. ;
  9.       return
  10. ;
  11. UARTrx:
  12. ; vétel a soros vonalon
  13.       return
  14. UARTtx:
  15. ; adás a soros vonalon
  16.       return
  17. ;
  18.       end


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. ) Ebben az esetben az MPLib egy közös fájlba teszi az összes lefordított szubrutint, és az MPLink szerkesztő ebből az állományból csak azokat használja fel, amikre történik hivatkozás a főprogramban. Ennek a módszernek hátránya, hogy a könyvtári rutinokat komolyan meg kell tervezni, egy projekt archiválásakor külön gondot kell fordítani a könyvtári rutinok mentésére is. Manapság csak nagy projekt, több programozó esetén van értelme (szerintem) ennek a megoldásnak.
A hozzászólás módosítva: Aug 4, 2015
(#) sonajkniz hozzászólása Aug 4, 2015 /
 
Köszönöm a segítsséget!
(#) lóri válasza sonajkniz hozzászólására (») Aug 16, 2015 /
 
Szia!
Nézz körül a Májki honlapján. Van sok macro és include file, azokból gyakorolhatsz, elleshetsz valamit. itt
(#) sonajkniz hozzászólása Okt 3, 2015 /
 
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.
Következő: »»   3 / 32
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem