mirror of
https://github.com/sergeyyarkov/attiny24a_memory-led-game.git
synced 2026-10-11 10:18:58 +03:00
refactor: set ctc mode on timer
This commit is contained in:
parent
755e720961
commit
35beeb8709
57
firmware.asm
57
firmware.asm
@ -58,6 +58,12 @@
|
|||||||
.equ SW_FLAG_3 = 0xb0
|
.equ SW_FLAG_3 = 0xb0
|
||||||
.equ SW_FLAG_4 = 0x70
|
.equ SW_FLAG_4 = 0x70
|
||||||
|
|
||||||
|
; Value that stored in OCR0A for each tone
|
||||||
|
; 880Hz = 71
|
||||||
|
; 785Hz = 80
|
||||||
|
; 590Hz = 105
|
||||||
|
; 440Hz = 142
|
||||||
|
|
||||||
.include "macros.asm" ; Include macros
|
.include "macros.asm" ; Include macros
|
||||||
|
|
||||||
.dseg ; Data segment
|
.dseg ; Data segment
|
||||||
@ -127,6 +133,11 @@ loop: ; Program loop
|
|||||||
showing: ; Showing state
|
showing: ; Showing state
|
||||||
cpi mcu_state_r, SHOWING_STATE
|
cpi mcu_state_r, SHOWING_STATE
|
||||||
brne polling
|
brne polling
|
||||||
|
rcall show_sequence
|
||||||
|
; set_state POLLING_STATE
|
||||||
|
polling: ; Polling state
|
||||||
|
cpi mcu_state_r, POLLING_STATE
|
||||||
|
brne completion
|
||||||
|
|
||||||
lds r18, SW_FLAGS_ADDRESS
|
lds r18, SW_FLAGS_ADDRESS
|
||||||
led_1:
|
led_1:
|
||||||
@ -134,7 +145,8 @@ loop: ; Program loop
|
|||||||
brne led_off_1
|
brne led_off_1
|
||||||
led_on_1:
|
led_on_1:
|
||||||
sbi LED_PORT, 0
|
sbi LED_PORT, 0
|
||||||
outi OCR0A, 8
|
sbi BUZZ_DIR, BUZZ_PIN
|
||||||
|
outi OCR0A, 142
|
||||||
rjmp led_2
|
rjmp led_2
|
||||||
led_off_1:
|
led_off_1:
|
||||||
cbi LED_PORT, 0
|
cbi LED_PORT, 0
|
||||||
@ -143,7 +155,8 @@ loop: ; Program loop
|
|||||||
brne led_off_2
|
brne led_off_2
|
||||||
led_on_2:
|
led_on_2:
|
||||||
sbi LED_PORT, 1
|
sbi LED_PORT, 1
|
||||||
outi OCR0A, 10
|
sbi BUZZ_DIR, BUZZ_PIN
|
||||||
|
outi OCR0A, 71
|
||||||
rjmp led_3
|
rjmp led_3
|
||||||
led_off_2:
|
led_off_2:
|
||||||
cbi LED_PORT, 1
|
cbi LED_PORT, 1
|
||||||
@ -152,7 +165,8 @@ loop: ; Program loop
|
|||||||
brne led_off_3
|
brne led_off_3
|
||||||
led_on_3:
|
led_on_3:
|
||||||
sbi LED_PORT, 2
|
sbi LED_PORT, 2
|
||||||
outi OCR0A, 12
|
sbi BUZZ_DIR, BUZZ_PIN
|
||||||
|
outi OCR0A, 105
|
||||||
rjmp led_4
|
rjmp led_4
|
||||||
led_off_3:
|
led_off_3:
|
||||||
cbi LED_PORT, 2
|
cbi LED_PORT, 2
|
||||||
@ -161,19 +175,21 @@ loop: ; Program loop
|
|||||||
brne led_off_4
|
brne led_off_4
|
||||||
led_on_4:
|
led_on_4:
|
||||||
sbi LED_PORT, 3
|
sbi LED_PORT, 3
|
||||||
outi OCR0A, 15
|
sbi BUZZ_DIR, BUZZ_PIN
|
||||||
|
outi OCR0A, 80
|
||||||
rjmp polling
|
rjmp polling
|
||||||
led_off_4:
|
led_off_4:
|
||||||
cbi LED_PORT, 3
|
cbi LED_PORT, 3
|
||||||
polling: ; Polling state
|
|
||||||
cpi mcu_state_r, POLLING_STATE
|
|
||||||
brne completion
|
|
||||||
completion:
|
completion:
|
||||||
cpi mcu_state_r, COMPLETION_STATE ; Completion state
|
cpi mcu_state_r, COMPLETION_STATE ; Completion state
|
||||||
brne default
|
brne default
|
||||||
default: ; Do nothing
|
default: ; Do nothing
|
||||||
rjmp loop
|
rjmp loop
|
||||||
|
|
||||||
|
show_sequence: ; Show sequence of led
|
||||||
|
nop
|
||||||
|
ret
|
||||||
|
|
||||||
effect_1: ; Shift bits of an leds in port every 50ms
|
effect_1: ; Shift bits of an leds in port every 50ms
|
||||||
push r17
|
push r17
|
||||||
push r18
|
push r18
|
||||||
@ -221,6 +237,7 @@ ret
|
|||||||
MCU_Init:
|
MCU_Init:
|
||||||
rcall init_ports
|
rcall init_ports
|
||||||
rcall init_interrupts
|
rcall init_interrupts
|
||||||
|
rcall init_buzzer
|
||||||
rcall delay_before_start ; Init MCU and delay before start main program
|
rcall delay_before_start ; Init MCU and delay before start main program
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -245,22 +262,26 @@ init_interrupts:
|
|||||||
ldi temp_r, (1<<PCINT4) | (1<<PCINT5)| (1<<PCINT6) | (1<<PCINT7)
|
ldi temp_r, (1<<PCINT4) | (1<<PCINT5)| (1<<PCINT6) | (1<<PCINT7)
|
||||||
out PCMSK0, temp_r
|
out PCMSK0, temp_r
|
||||||
|
|
||||||
;
|
|
||||||
; Setup timer
|
|
||||||
ldi temp_r, (1<<WGM01) | (1<<COM0A0) ; CTC Mode
|
|
||||||
out TCCR0A, temp_r
|
|
||||||
|
|
||||||
ldi temp_r, 4
|
|
||||||
out OCR0A, temp_r
|
|
||||||
|
|
||||||
ldi temp_r, (1<<CS00) | (1<<CS01) ; Prescale
|
|
||||||
out TCCR0B, temp_r
|
|
||||||
|
|
||||||
clr temp_r
|
clr temp_r
|
||||||
|
|
||||||
sei ; Enable Global Interrupts
|
sei ; Enable Global Interrupts
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
init_buzzer:
|
||||||
|
cbi BUZZ_DIR, BUZZ_PIN
|
||||||
|
;
|
||||||
|
; Setup timer
|
||||||
|
ldi temp_r, (1<<COM0A0) | (1<<WGM01) ; Set CTC timer mode and toggle OC0A pin on Compare Match
|
||||||
|
out TCCR0A, temp_r
|
||||||
|
|
||||||
|
ldi temp_r, 14
|
||||||
|
out OCR0A, temp_r
|
||||||
|
|
||||||
|
ldi temp_r, (1<<CS01) ; Prescale on 8
|
||||||
|
out TCCR0B, temp_r
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
init_ports: ; Init MCU ports
|
init_ports: ; Init MCU ports
|
||||||
; Setup PORTA
|
; Setup PORTA
|
||||||
ldi temp_r, 0x0f
|
ldi temp_r, 0x0f
|
||||||
|
|||||||
48
firmware.hex
48
firmware.hex
@ -1,29 +1,31 @@
|
|||||||
:020000020000FC
|
:020000020000FC
|
||||||
:100000001CC018950EC01895189518951895189538
|
:100000001CC018950EC01895189518951895189538
|
||||||
:100010001895189518951895189518951895189578
|
:100010001895189518951895189518951895189578
|
||||||
:1000200018951F932F932FB719B3107F8ED010936D
|
:1000200018951F932F932FB719B3107F98D0109363
|
||||||
:1000300062002FBF2F911F9118950FED0DBF1093E8
|
:1000300062002FBF2F911F9118950FED0DBF1093E8
|
||||||
:1000400061000F9301E0009360000F911091600038
|
:1000400061000F9301E0009360000F911091600038
|
||||||
:10005000113041F45BD0109361000F9302E00093E4
|
:10005000113041F462D0109361000F9302E00093DD
|
||||||
:1000600060000F91123031F520916200203E31F492
|
:1000600060000F91123009F42FD0133051F5209118
|
||||||
:10007000D89A0F9308E006BF0F9101C0D898203D91
|
:100070006200203E39F4D89ABA9A0F930EE806BF70
|
||||||
:1000800031F4D99A0F930AE006BF0F9101C0D998B5
|
:100080000F9101C0D898203D39F4D99ABA9A0F93AC
|
||||||
:10009000203B31F4DA9A0F930CE006BF0F9101C0B8
|
:1000900007E406BF0F9101C0D998203B39F4DA9AE2
|
||||||
:1000A000DA98203731F4DB9A0F930FE006BF0F91F7
|
:1000A000BA9A0F9309E606BF0F9101C0DA9820377C
|
||||||
:1000B00001C0DB98133001F4143001F4C7CF1F9353
|
:1000B00039F4DB9ABA9A0F9300E506BF0F91D5CFBA
|
||||||
:1000C0002F933F934F934BB30F9301EF0BBB0F91C4
|
:1000C000DB98143001F4C2CF000008951F932F93E2
|
||||||
:1000D0003CD011E033E020EF110F210F2BBB35D0C6
|
:1000D0003F934F934BB30F9301EF0BBB0F913FD067
|
||||||
:1000E0003A95C9F70F9308EF0BBB0F912ED018E08C
|
:1000E00011E033E020EF110F210F2BBB38D03A95F0
|
||||||
:1000F00033E020EF1695210F2BBB27D03A95C9F797
|
:1000F000C9F70F9308EF0BBB0F9131D018E033E035
|
||||||
:100100004BBB4F913F912F911F91089517D009D06C
|
:1001000020EF1695210F2BBB2AD03A95C9F74BBB90
|
||||||
:1001100001D0089506E0D3DF0A95E9F722D0002741
|
:100110004F913F912F911F9108951AD00AD010D07E
|
||||||
:10012000089500E10BBF00EF02BB02E400BF04E052
|
:1001200001D0089506E0D2DF0A95E9F724D0002730
|
||||||
:1001300006BF03E003BF0027789408950FE00ABBD1
|
:10013000089500E10BBF00EF02BB002778940895FB
|
||||||
:1001400002950BBBBA9AC29808952F933F9321E46E
|
:10014000BA9802E400BF0EE006BF02E003BF0895C4
|
||||||
:100150003FEE3A95F1F72A95E1F700003F912F9194
|
:100150000FE00ABB02950BBBBA9AC29808952F9381
|
||||||
:1001600008958F939F9324E683EC99E00197F1F72C
|
:100160003F9321E43FEE3A95F1F72A95E1F700003D
|
||||||
:100170002A95D1F724E69F918F9108954D656D6F73
|
:100170003F912F9108958F939F9324E683EC99E00C
|
||||||
:100180007279206C65642067616D652E20577269F5
|
:100180000197F1F72A95D1F724E69F918F91089571
|
||||||
:100190007474656E206279205365726765792059A1
|
:100190004D656D6F7279206C65642067616D652EA9
|
||||||
:1001A00061726B6F762032372E30392E3230323119
|
:1001A000205772697474656E206279205365726796
|
||||||
|
:1001B0006579205961726B6F762032372E30392E77
|
||||||
|
:0401C0003230323176
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user