Pergésmentesítés

A VIK Wikiből
A lap korábbi változatát látod, amilyen Gogerham (vitalap | szerkesztései) 2013. május 19., 20:51-kor történt szerkesztése után volt. (Új oldal, tartalma: „<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: ; tim…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

.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