ВУЗ:
Составители:
При необходимости состояние вывода OC0A может быть изменено принуди-
тельно, записью логической 1 в разряд FOC0A регистра TCCR0B. Прерывание
при этом не генерируется и сброс счетного регистра не производится.
2.24.3. Пример формирования частоты звучания ноты
В качестве примера выберем формирование частоты ноты в музыкальном ав-
томате. В нем имеются константы частоты нот и время звучания ноты (константы
длительности). Кроме того, в подпрограммах формируются длительности задерж-
ки 20 мс и 120 мс.
Фрагмент программы формирования звучания ноты приведен ниже:
;загрузка константы частоты в регистр сравнения
Out OCR1AH,XH
Out OCR1AL,XL
;формирование длительности ноты и воспроизведение ее
Ldi tmp,0b01000000 ;включение режима переключения вывода OC1A
Time1:
Rcall Time_120ms ;вызов подпрограммы задержки 120 мс
Dec Ntim ; в NTIM загружена константа длительности ноты
Brne Time1 ; когда NTIM станет равным 0, то выполняем программу дальше
Ldi tmp,0b10000000 ; по этому коду OC1A переключается в 0, то есть пре-
кращается звучание
; подпрограмма формирования задержки 20 мс
Time_20ms:
Ldi YL,low(3000)
Ldi YH,(3000)
Ms_20
Sbiw YL,1 ; вычитание из YL единицы
Brne ms_20 ; когда результат станет равным нулю, возвращаемся из под-
программы
Ret
; подпрограмма задержки 120 мс
Time_120ms:
Rcall Time_20ms
Rcall Time_20ms
Rcall Time_20ms
Rcall Time_20ms
66
Страницы
- « первая
- ‹ предыдущая
- …
- 64
- 65
- 66
- 67
- 68
- …
- следующая ›
- последняя »