|
|
1. sor: |
1. sor: |
| <code>
| | |
| .def temp = r16
| |
| .def pattern = r17
| |
| .def pushed = r18
| |
|
| |
| ; megfelelö IT ugrást ki kell cserélni erre:
| |
| jmp TIMER_IT ; Timer0 Compare Match Handler
| |
|
| |
| M_INIT:
| |
| ; timer inicializálás
| |
|
| |
| ldi temp, 0x0f
| |
| ; mivel az eszköz 11059200 Hz-es órajellel üzemel ezt osztjuk 1024-el (TCCR0 .....111)
| |
| ; CTC üzemmód (Clear Timer on Compare match), kimenet tiltás (TCCR0 00001...)
| |
| out TCCR0, temp
| |
| ldi temp, 107
| |
| ; így 10800 HZ-en számlál az idözitö, század másodpercenként kérjük a megszakítás így 108-as modulusú üzemmód kell (OCR0 107)
| |
| out OCR0, temp
| |
| ldi temp, 0x02
| |
| ; OCIE0 bitet (......1.) be kell lönünk, hogy TCNT0 == OCR0 esetén legyen IT
| |
| out TIMSK, temp
| |
|
| |
| ldi pressed, 0x00
| |
|
| |
| sei ; globális IT engedélyezése
| |
|
| |
| M_LOOP:
| |
| tst pressed ; csak akkor nem nulla, ha lenyomás történt
| |
| breq M_LOOP ; ha nem történt akkor várunk
| |
| clr pressed ; ha történt akkor töröljük és cselekedjünk
| |
|
| |
| ; itt kell cselekedni
| |
|
| |
| jmp M_LOOP
| |
|
| |
| TIMER_IT:
| |
| push temp ; mentjük az aktuális tempet
| |
| in temp, SREG ; és a státusz regiszter tartalmát
| |
| push temp
| |
|
| |
| in temp, PINE ; beolvasunk a 4/9 ananászról (BTN0-3)
| |
| bst temp, 5 ; BTN0 értékét tároljuk SREG T bitjébe
| |
|
| |
| lsl pattern ; az eddigi mintát árrébb toljuk balra eggyel (elsö alkalommal 0-kat shiftelünk)
| |
| bld pattern, 0 ; a felszabadult indexre bedobjuk BTN0 mostani értékét SREG T bitjéböl
| |
|
| |
| andi pattern, 0x0f ; a felsö 4 bitet eldobjuk
| |
| cpi pattern, 0x0C ; az alsó 4 bit, ha 1100 (C) akkor valaki tényleg megnyomta a gombot
| |
| brne NOT_PRESSED ; ha nem 1100 akkor telhet még az idö
| |
| inc pressed ; ha 1100 volt akkor gombnyomás volt
| |
| NOT_PRESSED:
| |
| pop temp
| |
| out SREG, temp ; visszatöltjük a státuszregisztert
| |
| pop temp ; visszatöltjük a temp IT elötti értékét
| |
| reti ; visszatérünk
| |
| </code>
| |
| --[[Szerkesztő:Gogerham|Gogerham]] ([[Szerkesztővita:Gogerham|vita]]) 2013. május 19., 21:04 (UTC)
| |