mirror of
https://github.com/sergeyyarkov/attiny24a_memory-led-game.git
synced 2026-10-11 10:18:58 +03:00
refactor: buttons handling
This commit is contained in:
parent
8009d0c44e
commit
9dbdb2458f
78
firmware.asm
78
firmware.asm
@ -81,10 +81,10 @@
|
|||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro set_sw_flag
|
.macro set_sw_flag
|
||||||
push r16
|
push r19
|
||||||
ldi r16, @0
|
ldi r19, @0
|
||||||
sts SW_FLAGS_ADDRESS, r16
|
sts SW_FLAGS_ADDRESS, r19
|
||||||
pop r16
|
pop r19
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.dseg ; Data segment
|
.dseg ; Data segment
|
||||||
@ -126,41 +126,16 @@ reti ; USI Overflow / inactive
|
|||||||
; Interrupt service routines
|
; Interrupt service routines
|
||||||
PCINT0_vect:
|
PCINT0_vect:
|
||||||
push r17
|
push r17
|
||||||
|
push r18
|
||||||
|
|
||||||
sbis PINA, PINA4
|
in r18, SREG
|
||||||
rjmp sw_check_1
|
in r17, PINA ; Load current pins status of PINA
|
||||||
sbic PINA, PINA4
|
andi r17, 0xf0 ; Get pins status of only buttons
|
||||||
rjmp sw_2nd
|
rcall delay_50ms
|
||||||
|
sts SW_FLAGS_ADDRESS, r17 ; Update flag status in SRAM
|
||||||
|
out SREG, r18
|
||||||
|
|
||||||
sw_2nd:
|
pop r18
|
||||||
sbis PINA, PINA5
|
|
||||||
rjmp sw_check_2
|
|
||||||
sbic PINA, PINA5
|
|
||||||
rjmp sw_clr
|
|
||||||
|
|
||||||
rjmp PCINT0_vect_end
|
|
||||||
sw_1:
|
|
||||||
; lds r17, SW_FLAGS_ADDRESS
|
|
||||||
; cpi r17, 0x01
|
|
||||||
; breq sw_clr
|
|
||||||
sw_check_1:
|
|
||||||
set_sw_flag 0x01
|
|
||||||
rjmp PCINT0_vect_end
|
|
||||||
sw_check_2:
|
|
||||||
set_sw_flag 0x02
|
|
||||||
rjmp PCINT0_vect_end
|
|
||||||
; sw_check_flag:
|
|
||||||
; lds r16, SW_FLAGS_ADDRESS
|
|
||||||
; sbis PINA, PINA4
|
|
||||||
; ldi r16, 0x01
|
|
||||||
; sw_flag_1:
|
|
||||||
; cpi r16, 0x01
|
|
||||||
; brne sw_flag_not_found
|
|
||||||
; sts SW_FLAGS_ADDRESS, r16
|
|
||||||
; sw_flag_not_found:
|
|
||||||
sw_clr:
|
|
||||||
set_sw_flag 0x00
|
|
||||||
PCINT0_vect_end:
|
|
||||||
pop r17
|
pop r17
|
||||||
reti
|
reti
|
||||||
|
|
||||||
@ -169,7 +144,7 @@ reti
|
|||||||
start:
|
start:
|
||||||
init_stack_p r16, RAMEND ; Init stack pointer of MCU
|
init_stack_p r16, RAMEND ; Init stack pointer of MCU
|
||||||
set_state INIT_STATE ; Turn MCU state to initialization
|
set_state INIT_STATE ; Turn MCU state to initialization
|
||||||
|
set_sw_flag 0x00
|
||||||
loop: ; Program loop
|
loop: ; Program loop
|
||||||
lds r16, CURRENT_STATE_ADDRESS
|
lds r16, CURRENT_STATE_ADDRESS
|
||||||
init: ; Init state
|
init: ; Init state
|
||||||
@ -182,26 +157,39 @@ loop: ; Program loop
|
|||||||
cpi r16, SHOWING_STATE
|
cpi r16, SHOWING_STATE
|
||||||
brne polling
|
brne polling
|
||||||
|
|
||||||
led_1:
|
|
||||||
lds r18, SW_FLAGS_ADDRESS
|
lds r18, SW_FLAGS_ADDRESS
|
||||||
cpi r18, 0x01
|
led_1:
|
||||||
|
cpi r18, 0xe0
|
||||||
brne led_off_1
|
brne led_off_1
|
||||||
led_on_1:
|
led_on_1:
|
||||||
sbi LED_PORT, 0
|
sbi LED_PORT, 0
|
||||||
rcall delay_50ms
|
|
||||||
rjmp led_2
|
rjmp led_2
|
||||||
led_off_1:
|
led_off_1:
|
||||||
cbi LED_PORT, 0
|
cbi LED_PORT, 0
|
||||||
led_2:
|
led_2:
|
||||||
lds r18, SW_FLAGS_ADDRESS
|
cpi r18, 0xd0
|
||||||
cpi r18, 0x02
|
|
||||||
brne led_off_2
|
brne led_off_2
|
||||||
led_on_2:
|
led_on_2:
|
||||||
sbi LED_PORT, 1
|
sbi LED_PORT, 1
|
||||||
rcall delay_50ms
|
rjmp led_3
|
||||||
rjmp polling
|
|
||||||
led_off_2:
|
led_off_2:
|
||||||
cbi LED_PORT, 1
|
cbi LED_PORT, 1
|
||||||
|
led_3:
|
||||||
|
cpi r18, 0xb0
|
||||||
|
brne led_off_3
|
||||||
|
led_on_3:
|
||||||
|
sbi LED_PORT, 2
|
||||||
|
rjmp led_4
|
||||||
|
led_off_3:
|
||||||
|
cbi LED_PORT, 2
|
||||||
|
led_4:
|
||||||
|
cpi r18, 0x70
|
||||||
|
brne led_off_4
|
||||||
|
led_on_4:
|
||||||
|
sbi LED_PORT, 3
|
||||||
|
rjmp polling
|
||||||
|
led_off_4:
|
||||||
|
cbi LED_PORT, 3
|
||||||
polling: ; Polling state
|
polling: ; Polling state
|
||||||
cpi r16, POLLING_STATE
|
cpi r16, POLLING_STATE
|
||||||
brne completion
|
brne completion
|
||||||
|
|||||||
51
firmware.hex
51
firmware.hex
@ -1,29 +1,28 @@
|
|||||||
:020000020000FC
|
:020000020000FC
|
||||||
:100000002DC018950EC01895189518951895189527
|
:100000001CC018950EC01895189518951895189538
|
||||||
:100010001895189518951895189518951895189578
|
:100010001895189518951895189518951895189578
|
||||||
:1000200018951F93CC9B07C0CC9900C0CD9B09C0ED
|
:1000200018951F932F932FB719B3107F84D0109377
|
||||||
:10003000CD990DC011C00F9301E0009362000F91A4
|
:1000300062002FBF2F911F9118950FED0DBF0F93E9
|
||||||
:100040000BC00F9302E0009362000F9105C00F9365
|
:1000400000916000009361000F9301E00093600055
|
||||||
:1000500000E0009362000F911F9118950FED0DBF06
|
:100050000F910F913F9330E0309362003F910091F8
|
||||||
:100060000F9300916000009361000F9301E00093F3
|
:100060006000013061F44FD00F9300916000009365
|
||||||
:1000700060000F910F9100916000013061F449D050
|
:1000700061000F9302E0009360000F910F91023036
|
||||||
:100080000F9300916000009361000F9302E00093D2
|
:10008000B1F420916200203E11F4D89A01C0D898B2
|
||||||
:1000900060000F910F91023081F4209162002130B5
|
:10009000203D11F4D99A01C0D998203B11F4DA9A85
|
||||||
:1000A00019F4D89A4ED001C0D8982091620022301D
|
:1000A00001C0DA98203711F4DB9A01C0DB980330E5
|
||||||
:1000B00019F4D99A46D001C0D998033001F404301C
|
:1000B00001F4043001F4D3CF1F932F933F934F9358
|
||||||
:1000C00001F4D9CF1F932F933F934F934BB30F93CB
|
:1000C0004BB30F9301EF0BBB0F9135D011E033E031
|
||||||
:1000D00001EF0BBB0F9135D011E033E020EF110F92
|
:1000D00020EF110F210F2BBB2ED03A95C9F70F93AC
|
||||||
:1000E000210F2BBB2ED03A95C9F70F9308EF0BBB0E
|
:1000E00008EF0BBB0F9127D018E033E020EF1695F7
|
||||||
:1000F0000F9127D018E033E020EF1695210F2BBB8E
|
:1000F000210F2BBB20D03A95C9F74BBB4F913F91B5
|
||||||
:1001000020D03A95C9F74BBB4F913F912F911F914A
|
:100100002F911F91089510D008D001D0089516E0C6
|
||||||
:10011000089510D008D001D0089516E0D3DF1A95C5
|
:10011000D3DF1A95E9F71BD0089500E10BBF00EF7C
|
||||||
:10012000E9F71BD0089500E10BBF00EF02BB0027E9
|
:1001200002BB0027789408950FE00ABB02950BBB31
|
||||||
:10013000789408950FE00ABB02950BBBBA9AC29857
|
:10013000BA9AC29808952F933F9321E43FEE3A95DF
|
||||||
:1001400008952F933F9321E43FEE3A95F1F72A95D6
|
:10014000F1F72A95E1F700003F912F9108958F93E1
|
||||||
:10015000E1F700003F912F9108958F939F9324E63C
|
:100150009F9324E683EC99E00197F1F72A95D1F774
|
||||||
:1001600083EC99E00197F1F72A95D1F724E69F9166
|
:1001600024E69F918F9108954D656D6F7279206C93
|
||||||
:100170008F9108954D656D6F7279206C656420676D
|
:1001700065642067616D652E205772697474656EC1
|
||||||
:10018000616D652E205772697474656E20627920E6
|
:1001800020627920536572676579205961726B6FBF
|
||||||
:10019000536572676579205961726B6F76203237CB
|
:0C019000762032372E30392E32303231DA
|
||||||
:0801A0002E30392E32303231CD
|
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user