<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=K%C3%A1rolyi+%C3%81ron</id>
	<title>VIK Wiki - Felhasználó közreműködései [hu]</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=K%C3%A1rolyi+%C3%81ron"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/Speci%C3%A1lis:Szerkeszt%C5%91_k%C3%B6zrem%C5%B1k%C3%B6d%C3%A9sei/K%C3%A1rolyi_%C3%81ron"/>
	<updated>2026-05-10T12:41:30Z</updated>
	<subtitle>Felhasználó közreműködései</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=AVR_feladatok&amp;diff=185607</id>
		<title>AVR feladatok</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=AVR_feladatok&amp;diff=185607"/>
		<updated>2015-05-05T11:38:58Z</updated>

		<summary type="html">&lt;p&gt;Károlyi Áron: 2-5 összeadó a zip-fájlból, apró hiba javítva.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Mérés_laboratórium_2.|Mérés laboratórium 2]]. tárgy ellenőrző méréséhez kiadott AVR-es feladatok lehetséges megoldásai:&lt;br /&gt;
{{Infobox&lt;br /&gt;
| cím = 2-1 Bináris számok beolvasása &lt;br /&gt;
| háttérszín = #C0ffee&lt;br /&gt;
| keretszín = black&lt;br /&gt;
| tartalom =&lt;br /&gt;
Í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!&lt;br /&gt;
{{Infobox-táblázat|&lt;br /&gt;
{{Infobox-táblázatsor|A kód nyelve|Assembly}}&lt;br /&gt;
{{Infobox-táblázatsor|Fejlesztőeszköz|Atmel® AVR® ATmega128}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
 ; Bináris számok beolvasása&lt;br /&gt;
 .def temp = r16&lt;br /&gt;
 .def led = r17&lt;br /&gt;
 &lt;br /&gt;
 M_INIT:&lt;br /&gt;
 	ldi temp, 0x00&lt;br /&gt;
 	sts DDRG, temp ; bemenetre állítjuk&lt;br /&gt;
 	ldi temp, 0xff&lt;br /&gt;
 	sts PORTG, temp ; felhúzzuk a kapcsolókat&lt;br /&gt;
 &lt;br /&gt;
 	ldi temp, 0x00&lt;br /&gt;
 	out DDRE, temp ; bemenetre állítjuk&lt;br /&gt;
 	ldi temp, 0xff&lt;br /&gt;
 	out PORTE, temp ; felhúzzuk a gombokat&lt;br /&gt;
 &lt;br /&gt;
 	ldi temp, 0xff&lt;br /&gt;
 	out DDRC, temp ; kimenetre állítjuk&lt;br /&gt;
 	ldi led, 0x00&lt;br /&gt;
 	out PORTC, led ; kikapcsoljuk a ledeket&lt;br /&gt;
 &lt;br /&gt;
 M_LOOP:&lt;br /&gt;
 	in temp, PINE&lt;br /&gt;
 	sbrs temp, 5 ; ha BT0 fel van engedve, akkor átugorja a következö utasítást&lt;br /&gt;
 	call LOW4&lt;br /&gt;
 	sbrs temp, 6 ; BT1&lt;br /&gt;
 	call HIGH4&lt;br /&gt;
 	jmp M_LOOP&lt;br /&gt;
 &lt;br /&gt;
 LOW4:&lt;br /&gt;
 	push temp&lt;br /&gt;
 	lds temp, PING&lt;br /&gt;
 	com temp&lt;br /&gt;
 	bst temp, 3 ; SW3 értéke T-be&lt;br /&gt;
 	bld led, 0; T-böl betölti led 0-as bitjébe&lt;br /&gt;
 	bst temp, 4 ; SW2&lt;br /&gt;
 	bld led, 1;&lt;br /&gt;
 	bst temp, 1 ; SW1&lt;br /&gt;
 	bld led, 2;&lt;br /&gt;
 	bst temp, 0 ; SW0&lt;br /&gt;
 	bld led, 3&lt;br /&gt;
 	pop temp&lt;br /&gt;
 	ret&lt;br /&gt;
 	&lt;br /&gt;
 HIGH4:&lt;br /&gt;
 	push temp&lt;br /&gt;
 	com temp&lt;br /&gt;
 	lds temp, PING&lt;br /&gt;
 	bst temp, 3 ; SW3 értéke T-be&lt;br /&gt;
 	bld led, 4; T-böl betölti led 0-as bitjébe&lt;br /&gt;
 	bst temp, 4 ; SW2&lt;br /&gt;
 	bld led, 5;&lt;br /&gt;
 	bst temp, 1 ; SW1&lt;br /&gt;
 	bld led, 6;&lt;br /&gt;
 	bst temp, 0 ; SW0&lt;br /&gt;
 	bld led, 7&lt;br /&gt;
 	out PORTC, led&lt;br /&gt;
 	pop temp&lt;br /&gt;
 	ret&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
{{Infobox&lt;br /&gt;
| cím = 2-2 Gombnyomás számláló&lt;br /&gt;
| háttérszín = #C0ffee&lt;br /&gt;
| keretszín = black&lt;br /&gt;
| tartalom =&lt;br /&gt;
Írjon egy programot az AVR Experiment kártyára, amely az INT nyomógomb lenyomására &lt;br /&gt;
(ill. pergésére) keletkező 1→0 átmeneteket számolja. Az INT nyomógomb változásait &lt;br /&gt;
megszakítással kezelje. A számláló 4 bites, tartalma a LED soron van kijelezve. &lt;br /&gt;
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 &lt;br /&gt;
másik nyomógombbal törölhető. &lt;br /&gt;
{{Infobox-táblázat|&lt;br /&gt;
{{Infobox-táblázatsor|A kód nyelve|Assembly}}&lt;br /&gt;
{{Infobox-táblázatsor|Fejlesztőeszköz|Atmel® AVR® ATmega128}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
 ; Gombnyomás számlálás&lt;br /&gt;
 .def temp = r16&lt;br /&gt;
 .def cnt = r17&lt;br /&gt;
 &lt;br /&gt;
 jmp INT4_IT ; INT4 Handler (INT gomb)&lt;br /&gt;
  &lt;br /&gt;
 M_INIT:&lt;br /&gt;
 	ldi temp, 0x00&lt;br /&gt;
 	out DDRE, temp ; bemenetre állítjuk&lt;br /&gt;
 	ldi temp, 0xff&lt;br /&gt;
 	out PORTE, temp ; felhúzzuk a gombokat&lt;br /&gt;
 &lt;br /&gt;
 	ldi temp, 0xff&lt;br /&gt;
 	out DDRC, temp ; kimenetre állítjuk&lt;br /&gt;
 	ldi cnt, 0x00&lt;br /&gt;
 	out PORTC, cnt ; kikapcsoljuk a ledeket&lt;br /&gt;
 	&lt;br /&gt;
 	ldi temp, 0x02 ; INT gomb, lefutóél-érzékeny&lt;br /&gt;
 	out EICRB, temp&lt;br /&gt;
 	ldi temp, 0x10 ; 4-es IT-vonal engedélyezése&lt;br /&gt;
  	out EIMSK, temp&lt;br /&gt;
 	sei ; globális IT engedélyezve&lt;br /&gt;
  &lt;br /&gt;
 M_LOOP:&lt;br /&gt;
 	in temp, PINE&lt;br /&gt;
 	sbrs temp, 5 ; ha BT0 fel van engedve, akkor átugorja a következö utasítást&lt;br /&gt;
 	call DEL_CNT&lt;br /&gt;
  	jmp M_LOOP&lt;br /&gt;
 &lt;br /&gt;
 DEL_CNT:&lt;br /&gt;
 	ldi cnt, 0x00&lt;br /&gt;
  	call LED&lt;br /&gt;
 	ret&lt;br /&gt;
 	&lt;br /&gt;
 LED:&lt;br /&gt;
 	out PORTC, cnt&lt;br /&gt;
 	ret&lt;br /&gt;
 	&lt;br /&gt;
 INT4_IT:&lt;br /&gt;
 	push temp&lt;br /&gt;
 	in temp, SREG&lt;br /&gt;
 	push temp&lt;br /&gt;
 	&lt;br /&gt;
 	cpi cnt, 0x0F&lt;br /&gt;
 	breq IT_END&lt;br /&gt;
 	inc cnt&lt;br /&gt;
 	call LED&lt;br /&gt;
 IT_END:&lt;br /&gt;
 	pop temp ;&lt;br /&gt;
 	out SREG, temp&lt;br /&gt;
 	pop temp&lt;br /&gt;
 	reti&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
{{Infobox&lt;br /&gt;
| cím = 2-5 Összeadó készítése&lt;br /&gt;
| háttérszín = #C0ffee&lt;br /&gt;
| keretszín = black&lt;br /&gt;
| tartalom =&lt;br /&gt;
Írjon egy programot az AVR Experiment kártyára, amely egy összeadót valósít meg. Az&lt;br /&gt;
összeadó 4 bites, előjel nélküli bináris kódolású operandusokkal dolgozik.&lt;br /&gt;
A számokat az SW0..3 kapcsolókon kell beállítani. Az IT gomb első megnyomásának&lt;br /&gt;
hatására a szám betöltődik a 8 bites eredményregiszterbe. Az eredményregiszter tartalmát a&lt;br /&gt;
LED0..7 jelzi ki. Az IT gomb második megnyomása beviszi a kapcsolókon beállított második&lt;br /&gt;
operandust, és rögtön hozzáadja az eredményregiszter tartalmához. Az IT gomb harmadik&lt;br /&gt;
megnyomása törli az eredményregisztert és alapállapotba viszi vissza az összeadót. A&lt;br /&gt;
nyomógomb pergésmentesítését oldja meg.&lt;br /&gt;
{{Infobox-táblázat|&lt;br /&gt;
{{Infobox-táblázatsor|A kód nyelve|Assembly}}&lt;br /&gt;
{{Infobox-táblázatsor|Fejlesztőeszköz|Atmel® AVR® ATmega128}}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
;jmp TIMER_IT; Timer0 Compare Match Handler &lt;br /&gt;
.def temp 	=r16 ; Temporary Register example &lt;br /&gt;
.def res 	=r17 ; Összeadás eredménye&lt;br /&gt;
.def state 	=r19 ; Aktuális állapot&lt;br /&gt;
.def pressed	=r20 ; Gombnyomást jelzo &amp;quot;flag&amp;quot;&lt;br /&gt;
.def pattern 	=r21 ; Bitminta pergésmentesítéshez&lt;br /&gt;
&lt;br /&gt;
M_INIT:&lt;br /&gt;
;&amp;lt; ki- és bemenetek inicializálása stb &amp;gt; &lt;br /&gt;
	; LED init&lt;br /&gt;
	ldi temp, 0xFF		; irány - kimenet&lt;br /&gt;
	out DDRC, temp&lt;br /&gt;
	ldi temp, 0x00		; egyik sem világít&lt;br /&gt;
	out PORTC, temp&lt;br /&gt;
&lt;br /&gt;
	; SW init&lt;br /&gt;
	ldi temp, 0x00		; irány - bemenet&lt;br /&gt;
	sts DDRG, temp		; G port -&amp;gt; out helyett sts!!&lt;br /&gt;
&lt;br /&gt;
	; BTN init&lt;br /&gt;
	ldi temp, 0x00		; irány - bemenet&lt;br /&gt;
	out DDRE, temp&lt;br /&gt;
&lt;br /&gt;
	; TIMER - csak pergésmentesítéshez&lt;br /&gt;
	ldi temp, 0x0f		; 1024-es eloosztó -&amp;gt; 10800Hz&lt;br /&gt;
	out TCCR0, temp	&lt;br /&gt;
	ldi temp, 107		; 108 ciklus -&amp;gt; 10800/108 = 100Hz&lt;br /&gt;
	out OCR0, temp&lt;br /&gt;
	ldi temp, 0x02		; TIMER IT engedélyezés&lt;br /&gt;
	out TIMSK, temp&lt;br /&gt;
&lt;br /&gt;
	ldi state, 0		; kezdoállapot&lt;br /&gt;
	ldi res, 0		; eredményreg. init&lt;br /&gt;
	ldi pressed, 0		; gomb nincs lenyomva&lt;br /&gt;
	ldi pattern, 0xff	; bitminta kezdetben csupa 1&lt;br /&gt;
&lt;br /&gt;
	sei			; globális IT engedélyezés&lt;br /&gt;
&lt;br /&gt;
M_LOOP: &lt;br /&gt;
	tst pressed		; test for zero&lt;br /&gt;
	breq M_LOOP		; ha nincs gombnyomás, ugrunk&lt;br /&gt;
	clr pressed		; gombnyomás esetén flag törlése&lt;br /&gt;
&lt;br /&gt;
	cpi state, 1		; 1-es állapot: OP1 betöltése&lt;br /&gt;
	breq OP1		;  és kijelzés&lt;br /&gt;
	cpi state, 2		; 2-es állapot: OP2 betöltés&lt;br /&gt;
	breq OP2		;  és összeadás, kijelzés&lt;br /&gt;
	cpi state, 3		; 3-as állapot: törlés, alapáll.&lt;br /&gt;
	breq CLEAR&lt;br /&gt;
&lt;br /&gt;
	jmp M_LOOP ; Endless Loop  &lt;br /&gt;
&lt;br /&gt;
TIMER_IT:			; TIMER IT rutin&lt;br /&gt;
	push temp		; mentés&lt;br /&gt;
	in temp, SREG&lt;br /&gt;
	push temp&lt;br /&gt;
&lt;br /&gt;
	; pergésmentesítés&lt;br /&gt;
	in temp, PINE		; gombok beolvasása&lt;br /&gt;
	bst temp, 5		; BT0 állapot eltárolása&lt;br /&gt;
	lsl pattern		; bitminta shiftelése balra&lt;br /&gt;
	bld pattern, 0		; az LSB helyére beszúrjuk &lt;br /&gt;
				; a gomb állapotát jelzo bitet&lt;br /&gt;
&lt;br /&gt;
	andi pattern, 0x0f	; felso 4 bitet eldobjuk&lt;br /&gt;
	cpi pattern, 0b00001100 ; 1100 bitminta?&lt;br /&gt;
	brne NOT_PRESSED	; ha nem, nincs gombnyomás,&lt;br /&gt;
				; vagy csak pergést észlel&lt;br /&gt;
&lt;br /&gt;
	; 1100 -&amp;gt; tényleges lefutó él&lt;br /&gt;
	inc pressed		; lenyomás történt, flag beáll.&lt;br /&gt;
	inc state		; következo állapot&lt;br /&gt;
&lt;br /&gt;
NOT_PRESSED:&lt;br /&gt;
	pop temp		; visszaállítás&lt;br /&gt;
	out SREG, temp&lt;br /&gt;
	pop temp&lt;br /&gt;
	reti&lt;br /&gt;
&lt;br /&gt;
OP1:				; elso operandus betöltése&lt;br /&gt;
	lds res, PING		; kapcsoló beolvasás, in helyett lds!&lt;br /&gt;
	bst res, 4		; SW2 bit áthelyezése a helyére&lt;br /&gt;
	bld res, 2&lt;br /&gt;
	com res			; switch aktív alacsonyból aktív magasba alakítása&lt;br /&gt;
	andi res, 0x0f		; felso 4 bit eldobása&lt;br /&gt;
	out PORTC, res		; kijelzés&lt;br /&gt;
	jmp M_LOOP&lt;br /&gt;
&lt;br /&gt;
OP2:				; második op. betöltés + összeadás&lt;br /&gt;
	lds temp, PING		; kapcsoló beolvasás, in helyett lds!&lt;br /&gt;
	bst temp, 4		; SW2 bit áthelyezése a helyére&lt;br /&gt;
	bld temp, 2&lt;br /&gt;
	com temp		; switch aktív alacsonyból aktív magasba alakítása&lt;br /&gt;
	andi temp, 0x0f		; felso 4 bit eldobása&lt;br /&gt;
&lt;br /&gt;
	add res, temp		; OP1, OP2 összeadás&lt;br /&gt;
	out PORTC, res		; kijelzés&lt;br /&gt;
	jmp M_LOOP&lt;br /&gt;
&lt;br /&gt;
CLEAR:				; alapállapotba állítás&lt;br /&gt;
	ldi state, 0		; kezdoáll.&lt;br /&gt;
	ldi res, 0		; eredményreg. törlés&lt;br /&gt;
	ldi temp, 0		; temp törlés&lt;br /&gt;
	out PORTC, res		; kijelzés&lt;br /&gt;
	jmp M_LOOP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[Kategória:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Károlyi Áron</name></author>
	</entry>
</feed>