Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

Valaki tudna segíteni?

544
Assembly programozásból van 2 feladat, amit nem nagyon értek:

1. feladat:

Készítsen programot, amely „futófényt” állít elő a következőképpen!

A bal szélső és a jobb szélső LED világít kezdetben, majd 1 helyiértékkel léptetünk mindig balra.
A késleltetést a TIMER1 segítségével „szoftveresen” oldja meg!
Ha a nyomógombot lenyomja, akkor álljon meg a fény! Mindaddig álljon a fény, amíg nyomva tartja a nyomógombot. Ha a nyomógombot elengedi, akkor induljon tovább a fény! A nyomógombot „szoftveresen” kezelje!

2.feladat:

Adott egy 10 elemű tömb a memóriában adattáblában tárolva.

Töltse át az adattábla tartalmát egy másik adatmemória területre!
Alakítsa át úgy a tömbelemeket, hogy minden tömbelem páros legyen!
Az átalakított tömbelemeket írja ki a LED sorra!
A feladatmegoldás során indirekt címzéssel dolgozzon!
Jelenleg 1 felhasználó nézi ezt a kérdést.
0
Felsőoktatás / Egyéb

Válaszok

1
Hát ez a kérdés így nagyon lóg a levegőben... Milyen mikrokontrollerről van szó? Az oké, hogy Assemblyben kell dolgozni, de azért nagyon nem mindegy, hogy x86 vagy valami 8 bites RISC architektúra. Ez azért is fontos, mert a TIMER1 perifériát is ennek megfelelően kell inicializálni. Ráadásul a feladat LED-ekről és nyomógombokról beszél, tehát nem csak a mikrokontrollert kellene ismerni, hanem annak környezetét is. Legalább azt, hogy melyik lábakra vannak kötve a LED-ek és a gombok, illetve hogy hogyan (high/low active?).

Az 1. feladathoz először inicializálni kell a timert, ezt általában memóriába ágyazott regisztereken keresztül lehet megtenni. Illetve ki kell tenni a LED-ekre az 100...001 mintát. A feladat azt mondja, hogy szoftveresen kell megoldani a késleltetést, tehát szerintem megszakítást nem használhatsz. Szóval beállítod megfelelően a timert, majd végtelen ciklusban lekérdezgeted az overflow flaget. Ha bebillent, akkor egy feltételes ugró utasítással mész a léptetést végző címhez. Ott először törlöd az overflow flaget, majd megnézed, hogy nyomják-e a gombot. Ha nem, akkor lehet léptetni. Neked itt egy olyan balra léptető utasítás kell, ami a fent kieső bitet alulról belépteti. Vagy ha ilyen nincs, akkor nyilván több utasításból kell megcsinálni (pl. aritmetikai shift balra, és a régi MSB-vel összevagyolni az új LSB-t).

A 2. feladatban az adatok átmozgatása gondolom triviális. Azt nem részletezte a feladat, hogy pontosan mit kellene csinálni a páratlan számokkal, úgyhogy én egyszerűen azt csinálnám, hogy az összes számot összeéselném az 111...1110 bitmintával. Ez a páros számokat (LSB=0) nem változtatja meg, a páratlanoknak pedig törli az LSB-jét, vagyis kivon belőlük 1-et. Az sem világos, hogy milyen formában kellene kiírni a számokat a LED-ekre (gondolom a 10 szám több bitet tartalmaz, mint ahány LED van). Esetleg a nyomógombokkal ki lehet választani, hogy melyik számot szeretnénk látni, vagy az 1. feladathoz hasonlóan egy timert használva lehet pl. másodpercenként más-más számot mutatni. Az indirekt címzés pedig azt jelenti, hogy az opkód által hivatkozott regiszterben/címen nem maga az adat található, hanem a memóriacíme (kb. mint a magas szintű nyelvekben a pointer). De hogy a Te mikrokontrollered pontosan milyen címzési módokat támogat, ahhoz megint csak tudni kellene a típust.
0