diff --git a/firmware.asm b/firmware.asm index a12cdce..8e391b1 100644 --- a/firmware.asm +++ b/firmware.asm @@ -46,14 +46,21 @@ .equ POLLING_STATE = 0x03 .equ COMPLETION_STATE = 0x04 -.equ TRUE = 1 -.equ FALSE = 0 +; +; SW Flags states constants +.equ SW_FLAG_1 = 0xe0 +.equ SW_FLAG_2 = 0xd0 +.equ SW_FLAG_3 = 0xb0 +.equ SW_FLAG_4 = 0x70 .macro init_stack_p ; Setup stack pointer ldi @0, low(@1) out SPL, @0 .endm +; +; @0 - I/O Register +; @1 - Data to write .macro outi ; Out to i/o reg push r16 ldi r16, @1 @@ -71,6 +78,8 @@ pop r16 .endm +; +; @0 - New state .macro set_state push r16 lds r16, CURRENT_STATE_ADDRESS @@ -80,13 +89,6 @@ pop r16 .endm -.macro set_sw_flag - push r19 - ldi r19, @0 - sts SW_FLAGS_ADDRESS, r19 - pop r19 -.endm - .dseg ; Data segment .org SRAM_START @@ -105,7 +107,7 @@ SW_FLAGS_ADDRESS: .byte 0x01 ; ; Setup vectors rjmp start ; Program start at RESET vector -reti ; External Interrupt Request 0 +reti ; External Interrupt Request 0 / inactive rjmp PCINT0_vect ; Pin Change Interrupt Request 0 / active reti ; Pin Change Interrupt Request 1 / inactive reti ; Watchdog Time-out / inactive @@ -127,7 +129,7 @@ reti ; USI Overflow / inactive PCINT0_vect: push r17 push r18 - + ; // TODO update flag only in POLLING state of MCU in r18, SREG in r17, PINA ; Load current pins status of PINA andi r17, 0xf0 ; Get pins status of only buttons @@ -144,7 +146,6 @@ reti start: init_stack_p r16, RAMEND ; Init stack pointer of MCU set_state INIT_STATE ; Turn MCU state to initialization - set_sw_flag 0x00 loop: ; Program loop lds r16, CURRENT_STATE_ADDRESS init: ; Init state @@ -159,7 +160,7 @@ loop: ; Program loop lds r18, SW_FLAGS_ADDRESS led_1: - cpi r18, 0xe0 + cpi r18, SW_FLAG_1 brne led_off_1 led_on_1: sbi LED_PORT, 0 @@ -167,7 +168,7 @@ loop: ; Program loop led_off_1: cbi LED_PORT, 0 led_2: - cpi r18, 0xd0 + cpi r18, SW_FLAG_2 brne led_off_2 led_on_2: sbi LED_PORT, 1 @@ -175,7 +176,7 @@ loop: ; Program loop led_off_2: cbi LED_PORT, 1 led_3: - cpi r18, 0xb0 + cpi r18, SW_FLAG_3 brne led_off_3 led_on_3: sbi LED_PORT, 2 @@ -183,7 +184,7 @@ loop: ; Program loop led_off_3: cbi LED_PORT, 2 led_4: - cpi r18, 0x70 + cpi r18, SW_FLAG_4 brne led_off_4 led_on_4: sbi LED_PORT, 3 diff --git a/firmware.hex b/firmware.hex index ad57f48..ba9a2b8 100644 --- a/firmware.hex +++ b/firmware.hex @@ -1,28 +1,28 @@ :020000020000FC :100000001CC018950EC01895189518951895189538 :100010001895189518951895189518951895189578 -:1000200018951F932F932FB719B3107F84D0109377 +:1000200018951F932F932FB719B3107F7FD010937C :1000300062002FBF2F911F9118950FED0DBF0F93E9 :1000400000916000009361000F9301E00093600055 -:100050000F910F913F9330E0309362003F910091F8 -:100060006000013061F44FD00F9300916000009365 -:1000700061000F9302E0009360000F910F91023036 -:10008000B1F420916200203E11F4D89A01C0D898B2 -:10009000203D11F4D99A01C0D998203B11F4DA9A85 -:1000A00001C0DA98203711F4DB9A01C0DB980330E5 -:1000B00001F4043001F4D3CF1F932F933F934F9358 -:1000C0004BB30F9301EF0BBB0F9135D011E033E031 -:1000D00020EF110F210F2BBB2ED03A95C9F70F93AC -:1000E00008EF0BBB0F9127D018E033E020EF1695F7 -:1000F000210F2BBB20D03A95C9F74BBB4F913F91B5 -:100100002F911F91089510D008D001D0089516E0C6 -:10011000D3DF1A95E9F71BD0089500E10BBF00EF7C -:1001200002BB0027789408950FE00ABB02950BBB31 -:10013000BA9AC29808952F933F9321E43FEE3A95DF -:10014000F1F72A95E1F700003F912F9108958F93E1 -:100150009F9324E683EC99E00197F1F72A95D1F774 -:1001600024E69F918F9108954D656D6F7279206C93 -:1001700065642067616D652E205772697474656EC1 -:1001800020627920536572676579205961726B6FBF -:0C019000762032372E30392E32303231DA +:100050000F910F9100916000013061F44FD00F9328 +:1000600000916000009361000F9302E00093600034 +:100070000F910F910230B1F420916200203E11F4F3 +:10008000D89A01C0D898203D11F4D99A01C0D998C6 +:10009000203B11F4DA9A01C0DA98203711F4DB9A88 +:1000A00001C0DB98033001F4043001F4D3CF1F9377 +:1000B0002F933F934F934BB30F9301EF0BBB0F91D4 +:1000C00035D011E033E020EF110F210F2BBB2ED0E4 +:1000D0003A95C9F70F9308EF0BBB0F9127D018E0A3 +:1000E00033E020EF1695210F2BBB20D03A95C9F7AE +:1000F0004BBB4F913F912F911F91089510D008D085 +:1001000001D0089516E0D3DF1A95E9F71BD00895C2 +:1001100000E10BBF00EF02BB0027789408950FE0C9 +:100120000ABB02950BBBBA9AC29808952F933F93CE +:1001300021E43FEE3A95F1F72A95E1F700003F916F +:100140002F9108958F939F9324E683EC99E0019774 +:10015000F1F72A95D1F724E69F918F9108954D6587 +:100160006D6F7279206C65642067616D652E205714 +:1001700072697474656E206279205365726765795F +:10018000205961726B6F762032372E30392E323023 +:0201900032310A :00000001FF