„Pergésmentesítés” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
(Eltávolította a lap teljes tartalmát)
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)
 

A lap 2013. május 19., 21:09-kori változata