„AVR feladatok” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
5. sor: 5. sor:
 
| keretszín = black
 
| keretszín = black
 
| tartalom =
 
| tartalom =
 +
Írjon egy programot az AVR Experiment kártyára, amely 8 bites bináris számot olvas be a kapcsolósorról, két részletben. A kapcsolókon (SW0 -SW3) beállított értéket jobbról balra növekvő súlyozású 4 bites bináris számként kell kezelni. A 8 bites szám alsó (alacsonyabb súlyozású) része a BT0 nyomógombbal, a felső része a BT1 nyomógombbal vihető be. A BT1 gomb megnyomása után a bevitt 8 bites szám értéket jelezze ki a LED soron!
 
{{Infobox-táblázat|
 
{{Infobox-táblázat|
{{Infobox-táblázatsor|Írjon egy programot az AVR Experiment kártyára, amely 8 bites bináris számot olvas be a kapcsolósorról, két részletben. A kapcsolókon (SW0 -SW3) beállított értéket jobbról balra növekvő súlyozású 4 bites bináris számként kell kezelni. A 8 bites szám alsó (alacsonyabb súlyozású) része a BT0 nyomógombbal, a felső része a BT1 nyomógombbal vihető be. A BT1 gomb megnyomása után a bevitt 8 bites szám értéket jelezze ki a LED soron!}}
 
 
{{Infobox-táblázatsor|A kód nyelve|Assembly}}
 
{{Infobox-táblázatsor|A kód nyelve|Assembly}}
 
{{Infobox-táblázatsor|Fejlesztőeszköz|Atmel® AVR® ATmega128}}
 
{{Infobox-táblázatsor|Fejlesztőeszköz|Atmel® AVR® ATmega128}}
89. sor: 89. sor:
  
 
<code>
 
<code>
.def temp = r16
+
; Gombnyomás számlálás
 +
.def temp = r16
 +
.def cnt = r17
 +
 +
jmp INT4_IT ; INT4 Handler (INT gomb)
 +
 
 +
M_INIT:
 +
ldi temp, 0x00
 +
out DDRE, temp ; bemenetre állítjuk
 +
ldi temp, 0xff
 +
out PORTE, temp ; felhúzzuk a gombokat
 +
 +
ldi temp, 0xff
 +
out DDRC, temp ; kimenetre állítjuk
 +
ldi cnt, 0x00
 +
out PORTC, cnt ; kikapcsoljuk a ledeket
 +
 +
ldi temp, 0x02 ; INT gomb, lefutóél-érzékeny
 +
out EICRB, temp
 +
ldi temp, 0x10 ; 4-es IT-vonal engedélyezése
 +
  out EIMSK, temp
 +
sei ; globális IT engedélyezve
 +
 
 +
M_LOOP:
 +
in temp, PINE
 +
sbrs temp, 5 ; ha BT0 fel van engedve, akkor átugorja a következö utasítást
 +
call DEL_CNT
 +
  jmp M_LOOP
 +
 +
DEL_CNT:
 +
ldi cnt, 0x00
 +
  call LED
 +
ret
 +
 +
LED:
 +
out PORTC, cnt
 +
ret
 +
 +
INT4_IT:
 +
push temp
 +
in temp, SREG
 +
push temp
 +
 +
cpi cnt, 0x0F
 +
breq IT_END
 +
inc cnt
 +
call LED
 +
IT_END:
 +
pop temp ;
 +
out SREG, temp
 +
pop temp
 +
reti
 
</code>
 
</code>

A lap 2013. május 20., 16:33-kori változata

Mérés laboratórium 2. tárgy ellenőrző méréséhez kiadott AVR-es feladatok lehetséges megoldásai:

2-1 Bináris számok beolvasása

Írjon egy programot az AVR Experiment kártyára, amely 8 bites bináris számot olvas be a kapcsolósorról, két részletben. A kapcsolókon (SW0 -SW3) beállított értéket jobbról balra növekvő súlyozású 4 bites bináris számként kell kezelni. A 8 bites szám alsó (alacsonyabb súlyozású) része a BT0 nyomógombbal, a felső része a BT1 nyomógombbal vihető be. A BT1 gomb megnyomása után a bevitt 8 bites szám értéket jelezze ki a LED soron!

A kód nyelve
Assembly
Fejlesztőeszköz
Atmel® AVR® ATmega128


; Bináris számok beolvasása
.def temp = r16
.def led = r17

M_INIT:
	ldi temp, 0x00
	sts DDRG, temp ; bemenetre állítjuk
	ldi temp, 0xff
	sts PORTG, temp ; felhúzzuk a kapcsolókat

	ldi temp, 0x00
	out DDRE, temp ; bemenetre állítjuk
	ldi temp, 0xff
	out PORTE, temp ; felhúzzuk a gombokat

	ldi temp, 0xff
	out DDRC, temp ; kimenetre állítjuk
	ldi led, 0x00
	out PORTC, led ; kikapcsoljuk a ledeket

M_LOOP:
	in temp, PINE
	sbrs temp, 5 ; ha BT0 fel van engedve, akkor átugorja a következö utasítást
	call LOW4
	sbrs temp, 6 ; BT1
	call HIGH4
	jmp M_LOOP

LOW4:
	push temp
	lds temp, PING
	com temp
	bst temp, 3 ; SW3 értéke T-be
	bld led, 0; T-böl betölti led 0-as bitjébe
	bst temp, 4 ; SW2
	bld led, 1;
	bst temp, 1 ; SW1
	bld led, 2;
	bst temp, 0 ; SW0
	bld led, 3
	pop temp
	ret
	
HIGH4:
	push temp
	com temp
	lds temp, PING
	bst temp, 3 ; SW3 értéke T-be
	bld led, 4; T-böl betölti led 0-as bitjébe
	bst temp, 4 ; SW2
	bld led, 5;
	bst temp, 1 ; SW1
	bld led, 6;
	bst temp, 0 ; SW0
	bld led, 7
	out PORTC, led
	pop temp
	ret

2-2 Gombnyomás számláló

Írjon egy programot az AVR Experiment kártyára, amely az INT nyomógomb lenyomására (ill. pergésére) keletkező 1→0 átmeneteket számolja. Az INT nyomógomb változásait megszakítással kezelje. A számláló 4 bites, tartalma a LED soron van kijelezve. Kiegészítő feladat: A számláló az 1111 érték elérése után nem számol tovább, a számláló egy másik nyomógombbal törölhető.

A kód nyelve
Assembly
Fejlesztőeszköz
Atmel® AVR® ATmega128

; Gombnyomás számlálás
.def temp = r16
.def cnt = r17

jmp INT4_IT ; INT4 Handler (INT gomb)
 
M_INIT:
	ldi temp, 0x00
	out DDRE, temp ; bemenetre állítjuk
	ldi temp, 0xff
	out PORTE, temp ; felhúzzuk a gombokat

	ldi temp, 0xff
	out DDRC, temp ; kimenetre állítjuk
	ldi cnt, 0x00
	out PORTC, cnt ; kikapcsoljuk a ledeket
	
	ldi temp, 0x02 ; INT gomb, lefutóél-érzékeny
	out EICRB, temp
	ldi temp, 0x10 ; 4-es IT-vonal engedélyezése
 	out EIMSK, temp
	sei ; globális IT engedélyezve
 
M_LOOP:
	in temp, PINE
	sbrs temp, 5 ; ha BT0 fel van engedve, akkor átugorja a következö utasítást
	call DEL_CNT
 	jmp M_LOOP

DEL_CNT:
	ldi cnt, 0x00
 	call LED
	ret
	
LED:
	out PORTC, cnt
	ret
	
INT4_IT:
	push temp
	in temp, SREG
	push temp
	
	cpi cnt, 0x0F
	breq IT_END
	inc cnt
	call LED
IT_END:
	pop temp ;
	out SREG, temp
	pop temp
	reti