- •Лабораторна робота №3
- •Текст програми
- •Interrupt movwf w_copy ;Сохраняем контекст
- •Incf number,f ;Подготавливаемся к воспроизведению следующей мелодии
- •Incf counter,f ;Инкрементируем счетчик номера ноты
- •Incf number,f ;Подготавливаемся к воспроизведению следующей мелодии
- •Xorwf temp3,w ;Последний светодиод был?
- •Приводимо текст нех файла:
- •Використані команди:
- •Висновки:
Xorwf temp3,w ;Последний светодиод был?
jnz Snake2label ;Нет - следующий светодиод
decfsz TEMP2,F ;Последний круг был?
goto RIGHT_SNAKE ;Нет - еще круг
return
; --- НАЧАЛО ОСНОВНОЙ ПРОГРАММЫ ---
;__________________________________________________________________________________________________
Begin movf PORTA,F ;Приводим в соответствие
movf PORTB,F ;защелки портов
bcf STATUS,RP1
bsf STATUS,RP0 ;Обращение к банку 1 для доступа к TRIS и OPTION_REG
mvi TRISA,B'00000001';Устанавливаем выводы порта А как 'OOxOOOOI'
mvi TRISB,B'00000000';Устанавливаем выводы порта B как 'OOOOOOOO' (I-in, O-out)
mvi OPTION_REG,0 ;Коэффициент деления 2
bcf STATUS,RP0 ;Обращение к банку 0
clrf PORTA
mvi PORTB,0FFh ;Гасим светодиоды
clrf OUT
clrf NUMBER
movlw BYTE00 ;Заносим адрес ячейки BYTE00
movwf ADDRESS ;в ячейку ADDRESS (см обработчик прерываний)
mvi LONGTIMER,5 ;Начальное значение - воспроизведение через 5 циклов
clrf TMR0
mvi INTCON,B'10100000' ;Разрешаем прерывания по переполнению TMR0
GOTO Mainloop_label
;--------------------------------------------------------------------------------------------------
Mainloop_label ;ОСНОВНОЙ ЦИКЛ
;ЭФФЕКТ 11 - "змейка" вправо
mvi TIME,DELAY5 ;Задержка между сменой комбинаций
mvi TEMP2,5 ;Сколько оборотов влево
mvi CHANGE,D'255' ;Изменение скорости (ускорение на 1)
call RIGHT_SNAKE
mvi TEMP2,5 ;Сколько оборотов влево
mvi CHANGE,D'1' ;Изменение скорости (замедление на 1)
call RIGHT_SNAKE
decf LONGTIMER,F ;Цикл пройден - декрементируем
goto Mainloop_label ;Возвращаемся к началу основного цикла
;--------------------------------------------------------------------------------------------------
;МЕЛОДИИ
;--------------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------------
Melody11 mvi SPEED,D'140' ;Темп исполнения
;Три танкиста (хитрость - коды нот хранятся в EEPROM)
bsf STATUS,RP0 ;Управляющие регистры EEPROM все в банке 1 (PIC16F628)
mvi EEADR,D'107' ;Начальный адрес данной мелодии - со 107-й ячейки
EE3_label bsf STATUS,RP0 ;Банк 1
bsf EECON1,RD ;Команда чтения данных из EEPROM
nop ;Пауза для гарантии чтения
movf EEDATA,W ;Пересылаем прочитанные данные в W
bcf STATUS,RP0 ;Банк 0
call Sound ;Воспроизведение
bsf STATUS,RP0 ;Банк 1
incf EEADR,F ;Инкремент адреса
movf EEADR,W
bcf STATUS,RP0 ;Банк 0
xorlw D'128' ;21 нота всего в данной мелодии
jz Finish ;Если нота была последней - переход
goto EE3_label
data B'10010010' ; ;Игрушка (из к/ф) - 49 нот
data B'01111010'
data B'01101100'
data B'01010100'
data B'01111010'
data B'01111010'
data B'01101010'
data B'01111010'
data B'01011100'
data B'01000100'
data B'11111100'
data B'00110010'
data B'01000010'
data B'01010100'
data B'11111010'
data B'01010010'
data B'10001010'
data B'10001010'
data B'01111010'
data B'01110010'
data B'01111100'
;--------------------------------------------------------------------------------------------------
GOTO Begin
end