ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
2735 Топик полностью
v3 (28.12.2003 08:58, просмотров: 1) ответил AlexandrM на Подскажите нужно проиграть мелодию на AVR. Кто это делал? Если можно примерчик на С
Пример TIM1_OVF:
out TCNT1H,sndFrH
out TCNT1L,sndFrL
reti

; Мелодия КОНЕЦ РЕЖИМА до-ре-ми-фа-соль-ля-си...
; Прерывание TOIE1 перегружает TCNT1H, TCNT1L из sndFr.
PlayEnd:
sei
clr temp
out TCCR1B,temp ; TCNT1 stop
out OCR1AH,temp
out OCR1AL,temp
ldi temp,$40
out TCCR1A,temp
ldi temp,(1< out TIMSK,temp
ldi ZL,low(tbSound*2)
ldi ZH,high(tbSound*2)
clr currkey
PlayEnd_m1:
lpm
tst r0 ; конец?
breq PlayEnd_m2
mov sndFrH,r0 ; ст.байт
adiw Zl,1
lpm
mov sndFrL,r0 ; мл.байт делителя частоты
adiw Zl,1
ldi temp,1 ; TCNT1 тактируется CK
out TCCR1B,temp
wdr
ldi valWait,20 ; ~100ms
rcall delay
tst currkey ; проверка нажатия какой-либо клавиши
brne PlayEnd_m2
rjmp PlayEnd_m1
PlayEnd_m2:
clr temp
out TCCR1B,temp ; TCNT1 stop
out TIMSK,temp
ret

; sound
tbSound:
.db $c4,$4a ; До 1-я октава ст.,мл. 523,3Hz
.db $ca,$cc ; Рэ
.db $d0,$9b ; Ми
.db $d3,$44 ; Фа
.db $d8,$25 ; Соль
.db $dc,$7e ; Ля
.db $e0,$5e ; Си 987,7Hz

.db $e2,$25 ; 2-я октава
.db $e5,$18
.db $e8,$4e
.db $e9,$a3
.db $ec,$13
.db $ee,$40
.db $f0,$2b

.db $f1,$13 ; 3-я октава
.db $f2,$b4
.db $f4,$28
.db $f4,$d2
.db $f6,$0a
.db $f7,$20
.db $f8,$18
; в обратном порядке
.db $f7,$20
.db $f6,$0a
.db $f4,$d2
.db $f4,$28
.db $f2,$b4
.db $f1,$13 ; 3-я октава

.db $f0,$2b
.db $ee,$40
.db $ec,$13
.db $e9,$a3
.db $e8,$4e
.db $e5,$18
.db $e2,$25 ; 2-я октава

.db $e0,$5e ; Си 987,7Hz
.db $dc,$7e ; Ля
.db $d8,$25 ; Соль
.db $d3,$44 ; Фа
.db $d0,$9b ; Ми
.db $ca,$cc ; Рэ
.db $c4,$4a ; До 1-я октава ст.,мл. 523,3Hz
.db 0