„Mérés laboratórum 2 - 1. mérés ellenőrző kérdései” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
(ML2-ből már nincs külön mérés 5 éves képzésnek)
63. sor: 63. sor:
  
 
==14. Adja meg egy 8 bites felfelé számláló assembly kódját (a teljes főciklust).==
 
==14. Adja meg egy 8 bites felfelé számláló assembly kódját (a teljes főciklust).==
Egy lehetséges megoldás:
+
Egy lehetséges megoldás (temp-et inicializáljuk 0-ba, majd folyamatosan növeljük.)
 
<pre>
 
<pre>
 
ldi temp, 0
 
ldi temp, 0
  
 
WHILE:
 
WHILE:
cpi temp, 255  ; Ha temp-255 = 0, akkor Z flag bebillen és akkor breq/brne utasítással ellenőrizhetjük
+
inc temp
breq KILEP   ; Ha bebillent akkor KILEP cimkére ugrunk
+
jmp WHILE
inc temp ; Ha nem léptünk ki breq-nál, akkor növeljük a temp értékét
 
jmp WHILE ; Vissza a WHILE címkére
 
 
 
KILEP:
 
nop ; Itt folytatjuk, ha kiléptünk a ciklusból
 
 
</pre>
 
</pre>
 
==15. Adja meg azt az assembly kódot, amely a PORTC minden bitjét kimenetként inicializálja.==
 
==15. Adja meg azt az assembly kódot, amely a PORTC minden bitjét kimenetként inicializálja.==

A lap 2014. február 28., 14:51-kori változata

AZ ELLENŐRZŐ KÉRDÉSEKRE ÖSSZEÍRT VÁLASZOK BEMAGOLÁSA/MEGTANULÁSA NEM HELYETTESÍTI A MÉRÉSI ÚTMUTATÓ ÁTOLVASÁSÁT!!! OLVASSÁTOK ÁT A JEGYZETEKET, MÉRÉSI ÚTMUTATÓKAT IS!!!

1. Miben különbözik az oszcilloszkóp a logikai analizátortól?

A logikai analizátorral egyidejűleg sok (16 - 256) jel vizsgálható, az oszcilloszkóppal általában csak kettő jel vizsgálható egyidejűleg. A logikai analizátor csak a jelek logikai értékét vizsgálja, tárolja, (1 bit felbontású mintavételezés,) az oszcilloszkóp a jel feszültségét, amplitúdóját is tarolja, megjeleníti (8 - 12 bit felbontással).

2. Mire szolgál a trigger? Tipikusan milyen paraméterei vannak?

Az analóg oszcilloszkópban a triggerjel az időeltérítést indítja, ezért az analóg oszcilloszkóp gyakorlatilag csak a triggerjel utáni jeltartományt jeleníti meg. Ki kell jelölni a vizsgálandó jelszakaszt, be kell állítani a vizsgálat amplitúdó-tartományát és időtartományát. A triggerelési feltételt úgy kell megválasztani, hogy a kijelzés stabil legyen, a trigger-esemény az ismétlődő jelnek mindig ugyanazon pontja legyen.

3. Hány különböző érték ábrázolható egy 8 bites kettes komplemens változó segítségével? Mi a legkisebb és a legnagyobb ábrázolható szám?

Összesen: 256 db
0,..,127 pozitiv számok (0b0000 0000 - 0b0111 1111)
-1,...,-128 negatív számok (0b1000 0000 - 0b1111 1111)

4. Adja meg decimális és bináris formában a következő számot: 0x42!

Dec: 66
Bin: 1000010

5. Mekkora a periódusideje egy 25 MHz-es négyszögjelnek?

(Mikó Laci megoldása alapján:)
f=25MHz=25*10^6 Hz
T(periódus idő) = 1 /f
T= 1/25*10^6 Hz =4*10^(-8) sec

6. Mit jelent az, hogy az ATmega128 8 bites mikrokontroller?

8 bites regiszterek, 16 (és 32) bites utasításkódok -> 8 bites mikrokontroller

7. Memória szervezés szempontjából milyen architektúrájú processzor az ATmega128?

Harvard architektúra. Külön adat és program memória.

8. Hány általános célú regisztere van az ATmega128-nak? Mi a különbség az első fél és a második fél használatában?

32 általános célú regiszter:
kiemelt fontosságú, 32 db 8 bites adat
szinte minden művelet rajtuk keresztül zajlik, „változók”
csak R16-R31 használható konstansokkal dolgozó műveletekhez (LDI, ANDI, SUBI…)

9. Hány regiszter tartozik egy I/O porthoz, mi ezeknek a funkciója?

Egy I/O porthoz 3 regiszter tartozik.
DDRx – irányregiszter, PORTx – bemenet felhúzása / kimeneti érték, PINX – ki/bemeneti érték

Ha DDRx = 1 -> kimenet, ekkor PORTx-re kerülhet a kimenetre írandó érték.
Ha DDRx = 0 -> bemenet, ekkor PORTx-szel szabályozzuk a port felhúzását.
PINx-et főleg bemeneti port esetén használjuk, innen olvassuk le a bemenet állapotát. (Pl.: kapcsoló állapota.)

10. Mi a PC? Mi a stack és a stack pointer? Mi a státusz regiszter?

PC: Program Counter, program számláló. Az aktuális utasítás címét tárolja 16 bites memóriában. Ugrások és elágazások közvetlenül módosítják az értékét. A CALL utasítás hatására a PC a verembe mentődik, RET innen tölti vissza a rutin végén.

A stack (verem) egy LIFO (last in first out) memóriatartomány a belső SRAM végén, a szubrutinok visszatérési címeire, ill. regiszterek átmeneti tárolására. A stack pointer (SP, veremmutató) 16 bites regiszter, verem tetejére mutat. Verem az alacsonyabb memóriacímek felé nő.

Státuszregiszter: nem része a regisztertömbnek, de igen fontos szerepe van az ún. státuszregiszternek, amely számos jelző bitet (flag) tartalmaz. A jelzőbitek egy része aritmetikai műveletek eredményétől függően változhat, de itt engedélyezhetjük/tilthatjuk a globális megszakítást is.

11. Mi az X, Y, Z regiszterek speciális funkciója?

Az ATmega128 regisztertömbjében 32 darab 8 bites regiszter található. Az utolsó 6 regiszterből képzett 3 darab 16 bites regiszterpár (elnevezésük: X, Y, Z) felhasználható 16 bites címzést használó load/store utasításokhoz (valamint létezik néhány aritmetikai utasítás, ami ezeken tud műveletet végezni).

12. Mire szolgál a CALL utasítás?

Assembly nyelvben a függvény helyett a szubrutin kifejezést használjuk. Egy szubrutint a CALL utasítással tudunk meghívni, a hívás hatására elmentődik a programszámláló a verembe, majd a szubrutinban folytatjuk a program végrehajtását. A szubrutin végén a RET utasítás hatására visszaállítódik a programszámláló a veremből (a CALL utasítást követő utasítás címére), így a program végrehajtása a CALL utasítás után folytatódik tovább.

13. Mi a különbség a JMP és a BREQ között?

A JMP utasítás egy feltétel nélküli ugró utasítás. A feltétel nélküli ugrás a C nyelvből száműzött (de létező) goto utasításra hasonlít. A JMP utasítással az operandusként szereplő címre ugrik a programszámláló, amit a fordító az általunk megadott címkéből számít ki.

A BREQ (Branch if equal) utasítás egy feltételes elágazó utasítás, párja a BRNE (Branch if not equal) utasítás. Ezekkel az utasításokkal a státusz regiszterben lévő Z flag állapota alapján készíthetünk elágazásokat.

14. Adja meg egy 8 bites felfelé számláló assembly kódját (a teljes főciklust).

Egy lehetséges megoldás (temp-et inicializáljuk 0-ba, majd folyamatosan növeljük.)

	ldi temp, 0

WHILE:
	inc temp
	jmp WHILE

15. Adja meg azt az assembly kódot, amely a PORTC minden bitjét kimenetként inicializálja.

.def temp = r16
ldi temp, 0xFF
out DDRC, temp

Levlistán szerepelt egy doksi a válaszokról, ezért felraktam ide is, kicsit jobban kiegészítve. -- Tóth Gábor - 2011.02.17.


BSC-n most ebből voltak az ellenőrző kérdések. Plusz kérdés: 9 bites visszacsatolt balra shiftelő shiftregiszter teljes assembly kódja.