online kép - Fájl  tubefájl feltöltés file feltöltés - adja hozzá a fájlokat onlinefedezze fel a legújabb online dokumentumokKapcsolat
  
 

Letöltheto dokumentumok, programok, törvények, tervezetek, javaslatok, egyéb hasznos információk, receptek - Fájl kiterjesztések - fajltube.com

Online dokumentumok - kep
  

Matlab Bevitelkezelés





felso sarok

egyéb tételek

jobb felso sarok
 
 
bal also sarok   jobb also sarok

Matlab Bevitelkezelés

Tartalom
Program a bevitelkezelésre és a bevitel-szimulálás

Program a bevitelkezelésre és a bevitel-szimulálás

Bevinni adatot a PIC-be hasonlóképpen tudunk, mint ahogyan kivittük az elözö számban. Csak ezúttal a PORTA-t használjuk és nem írni fogunk bele, hanem olvasni belöle.
Példaképpen készítsünk egy olyan programot, ami beolvassa a kapcsolók állását, majd azoknak megfelelöen kigyújtja az elsö és/vagy második LED-et. (A többi LED-et most nem használjuk.) A kapcsolókat a PORTA elsö és második lábára kötöttük (RA0 és RA1), tehát ezeket kell elöször beolvasnunk, majd kiírnunk a PORTB-re, ahova is a LED-eket kötöttük. Kezdjünk is neki!
Elsö lépésként vegyünk elö valamilyen fájlmenedzsert (pl. Windows Intézö, Windows Commander, stb.), majd az elö 818d36i zö leckében elkészült "elso.asm" programunkról készítsünk egy másolatot ugyanabba a könyvtárba "masodik.asm" néven. Nyissuk meg az MPLAB-ot. Ha nem használtuk az elözö lecke óta, megkérdezi hogy az utolsó projekten ("tan.pjt") akarunk-e dolgozni. Azon akarunk, tehát nyomjuk meg a Yes gombot. Ha nem kapunk ilyen kérdést, vagy azóta már dolgoztunk más projekten is, akkor a Project/Open project menüponttal (vagy a CTRL+F2-vel) nyissuk meg a "tan.pjt" fájlt. Zárjuk be az "elso.asm" ablakát, majd a File/Open menüponttal nyissuk meg a "masodik.asm"-et. Méretezzük át az új ablakot úgy, hogy ne takarjon semmit sem. Ha megvagyunk, klikkeljünk a Project/Edit Project menüpontra, vagy nyomjunk CTRL+F3-at. Jelöljük ki az "elso [.asm]" sort, majd nyomjuk meg a Delete Node gombot.



Ezután nyomjuk meg az Add Node gombot és a megjelenö panelen nyissuk meg a "masodik.asm" fájlt. Az MPLAB ekkor figyelmeztet minket, hogy a végleges fájl neve meg fog változni. Nyomjuk meg az OK gombot elöször a figyelmeztetö üzeneten, aztán az Edit Project ablakban. Tanácsos most elmenteni a projektet a Project/Save Project menüponttal.
Megjegyzés: Eredetileg egy projekt egy programhoz szól, az egyszerüség kedvéért mi azonban végig ugyanabban a projektben fogunk dolgozni, hogy ne kelljen újra meg újra beállítani a projekt tulajdonságait.
Töröljük ki a
CBLOCK...ENDC részt. Ezután menjünk a VISSZA címkéhez és töröljünk ki onnantól lefele mindent!

Ezután mentsük el a fájlt a File/Save menüponttal, vagy a CTRL+S billentyükkel. Most annyit tettünk, hogy átvettük az elözö programból az inicializációs részt. Megcsonkított programunk aljára gépeljük be az alábbi részt:

VISSZA  MOVFW    PORTA         MOVWF    PORTB         GOTO     VISSZA         END

A kód magáért beszél. Egy MOVFW utasítással beolvassuk PORTA tartalmát az akkumulátorba (emlékezzünk hogyan kell értelmezni a MOV után álló két karaktert!), majd MOVWF utasítással kiírjuk azt a PORTB-re. Ezután visszaugrunk az elejére. A programot CTRL+F10-zel le tudjuk fordítani és a már megismert F7-es léptetéssel nyomon követni hogy hogyan müködne egy PIC-ben. A watch ablakba vegyük fel a PORTA regisztert is, ekkor láthatjuk hogy a kapcsolók milyen pozicióban vannak. (Emlékeztetöül: tegyük aktívvá a watch ablakot, majd nyomjuk meg az Insert billentyüt. Itt válasszuk ki vagy gépeljük be a PORTA-t, majd nyomjuk meg az ADD gombot. Vagy a Properties gombbal is felvehetjük, ezzel rögtön át is tehetjük a kijelzést binárisra. Végül nyomjuk meg a Close-t.)
Kísérletképpen nézzük meg, hogyan viselkedne a program a különbözö kapcsolóállásokra. Ugyebár F7-tel remekül láthatjuk hogyan müködik a program, de a PORTA-t változtatni kéne futás közben is. Ehhez készítenünk kell egy szimulációs fájlt, melyben leírjuk hogy az egyes idöpillanatokban hogyan változnak a portokon a bitek. Válasszuk ki a File/New menüpontot, az új szövegablakba meg gépeljük be az alábbi sorokat: (TAB-ot használjunk az oszlopok elválasztására!)



STEP    RA1    RA0 10      0      0 15      0      1 20      1      0 25      1      1

A STEP oszlop jelzi, hogy hanyadik lépésnél kell életbe lépnie a változásnak. Az RA1 és RA0 pedig a PORTA elsö két lábára kötött kapcsolókat állítja be virtuálisan.
Ezután a File/Save As menüponttal mentsük el a munkamappánkba "bevitel.sti" néven! (Az "sti" kiterjesztés nagyon fontos!) Méretezzük át és rakjuk az ablakot olyan helyre, ahol nem zavar. Most válasszuk ki a Debug/Simulator Stimulus/Pin Stimulus/Enable menüpontot, majd válasszuk ki a "bevitel.sti" fájlt.

Ez utóbbi akcióval azt értük el, hogy mostantól hibakeresés közben az MPLAB figyelembe veszi a szimulációs fájlunkat. Most kezdjük el léptetni F7-tel a programot. Láthatjuk, hogy a megfelelö idöpontokban átvált PORTA értéke, és a program müködése szerint átíródik a LED-ekre kötött PORTB is. Remek! Égessük is bele a PIC-ünkbe hogy láthassuk élöben is! (A szimulációs fájl nem szól bele a fordításba.)

Hoppá, ez valahogyan élöben nem müködik! Pedig az MPLAB-ban még minden rendben volt. Két jelenséggel nézünk most szembe, ha minden igaz: a LED akkor világítanak ha nem nyomjuk a gombokat, valamint (ez nem biztos hogy elöjön) a többi LED közül is pár világít.
Na akkor vegyük nagyító alá a problémát! A kapcsolók azért müködnek fordítva, mert elektronikusan így kötöttük be öket. Vagyis a PORTA folyamatosan "1"-et kap, csak akkor kap "0"-t, ha megnyomjuk a megfelelö lábra kapcsolt gombot. Tehát ez rendben van. Na de mi van a második jelenséggel? Nos, ott szimplán az a helyzet, hogy a PORTA többi lába nincs sehova sem bekötve, így a PIC felélesztésekor azok akármilyen állapotot felvehetnek. Ezt a jelenséget maszkolással tudjuk kiküszöbölni. A maszkolást úgy képzeljük el, ahogyan a valóságban is kinéz. Amikor egy felíratot festenek nagyüzemben, azt rendszerint úgy teszik, hogy a felületre ráhelyeznek egy müanyaglapot (maszkot), amiböl ki van vágva a felirat. Ezután lesprézik festékkel az egészet és a lap elvétele után csak a felirat marad hátra a felületen. Így müködik ez itt is. Elöször beolvassuk a PORTA tartalmát, melyet egy maszkon átviszünk. A maszk a számunkra lényegtelen biteket nullára állítja (függetlenül hogy mi volt az értéke), a többit érintetlenül hagyja. Nekünk ez arra lesz jó, hogy a PORTA-nak az elsö két bitén kívül az összes többi bit legyen nulla, így csak azok a LED-ek fognak müködni, amelyek ténylegesen kapnak vezérlést. egészítsük ki programunkat az alábbi ANDLW sorral:



VISSZA  MOVFW    PORTA         ANDLW    B'00000011'         MOVWF    PORTB         GOTO     VISSZA         END

Az ANDLW utasításban az "LW" ugyanazt jelenti mint a MOV utasításoknál. Az ANDLW ún. "és" müveletet végez az akkumulátor és az operandus között. Hogy ez pontosan mit is jelent, egyelöre nem kell foglalkoznunk vele, mindössze annyi a lényeg, hogy az akkumulátornak minden olyan bitét nullázza, ahol az operandusban is nulla van. (A többit meg békén hagyja.)
Például:

W értéke:         B'00110011' ANDLW operandusa: B'00000011' W új értéke:      B'00000011'

vagy

W értéke:         B'10111010' ANDLW operandusa: B'00000011' W új értéke:      B'00000010'

vagy

W értéke:         B'11110100' ANDLW operandusa: B'00000011' W új értéke:      B'00000000'

Látható a példákból hogy hogyan müködik ez az utasítás. Tehát ha beiktatjuk a programba, a többi LED garantáltan nem fog világítani, csak az elsö kettö.
Ha már ilyen ügyesen kiküszöböltük ezt a problémát, oldjuk meg a másikat is, vagyis hogy akkor világítson egy LED, ha megnyomunk egy gombot és ne akkor ha elengedjük. Ehhez a XORLW utasítást alkalmazzuk, ami ún. "kizáró vagy" müveletet végez az akkumulátor és az operandus között.
Ha az operandus csupa egyesekböl áll (vagyis decimálisan 255 az értéke), akkor az akkumulátor minden bitét megfordítja. Más néven ahol eddig "1" volt, oda nulla kerül és ahol "0" volt, oda egy kerül.
Programunk tehát így változik:

VISSZA  MOVFW    PORTA         XORLW    B'11111111'         ANDLW    B'00000011'         MOVWF    PORTB         GOTO     VISSZA         END



Így a program már tökéletesen fog müködni a PIC-ben.
A kész programot letölthetjük
innen

Kis háttér-információ a logikai müveletekröl:
Az alap logikai müveletek az AND (és), OR (vagy), XOR (kizáró vagy), valamint a NOT (nem).
Ezek úgy müködnek mint bármilyen matematikai müvelet, csak bitekkel. A NOT kivételével mindegyik két taggal dolgozik. Íme az "igazságtáblázatuk", vagyis hogy milyen eredményt produkálnak a különbözö esetekben:

AND 1. tag    2. tag    eredmény 0         0         0 0         1         0 1         0         0 1         1         1

OR 1. tag    2. tag    eredmény 0         0         0 0         1         1 1         0         1 1         1         1

XOR 1. tag    2. tag    eredmény 0         0         0 0         1         1 1         0         1 1         1         0

NOT tag    eredmény 0      1 1      0

Vagyis így lehet megfogalmazni ezek szabályait:
AND: az eredmény csak akkor lehet "1", ha mindkét tag értéke "1".
OR: az eredmény csak akkor lehet "1", ha legalább az egyik tag értéke "1".
XOR: az eredmény csak akkor lehet "1", ha csak és kizárólag az egyik tag értéke "1".
NOT: az eredmény mindig a tag ellentéte. (Itt csak egy tag lehet.)


Találat: 409







Felhasználási feltételek