AVR feladatok

A VIK Wikiből
A lap korábbi változatát látod, amilyen Kiskoza (vitalap | szerkesztései) 2014. január 5., 10:58-kor történt szerkesztése után volt. (syntax highlight tesztelése - működik :))

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