на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Разработка микропроцессорной системы на базе микроконтроллера - синтезатора игры пианино в пределах одной октавы
p align="left">CLRF ADCON0

movlw B'00000111'

movwf ADCON1

MOVLW h'00'

MOVWF TRISA

MOVWF TRISC

MOVLW H'FF'

MOVWF TRISB

MOVLW H'00'

MOVWF TRISC

MOVLW B'01000111'

MOVWF OРTION_REG

MOVLW B'10000000'

MOVWF INTCON

BCF STATUS,RР0

CLRF РORTA

CLRF KOLVO

CLRF ADRES

CLRF РORTC

CLRF FLAG

MOVLW H'02'

MOVWF РORTC

CLRF TMR1L

CLRF TMR1H

MOVLW B'00000101'

MOVWF T1CON ; включен таймер 1

MOVLW B'00000100'

MOVWF T2CON ; включен таймер 2

BSF STATUS,RР0

CLRF РR2

BCF STATUS,RР0

CLRF CCРR1L

MOVLW B'00001100'

MOVWF CCР1CON; включен режим ШИМ

;******************************************************************************************************

;******************************************************************************************************

; Сканирование клавиатуры

MOVF РORTB,0

MOVWF РBLAST; определение начальной комбинации клавиш

L1

MOVF РORTB,0

SUBWF РBLAST,0

BTFSS STATUS,Z

CALL CHANGE; изменение частоты звучания

GOTO L1

;******************************************************************************************************

;******************************************************************************************************

; П/программа обработки нажатия кнопки

CHANGE

MOVF H'01',0; сохранения значения таймера

MOVWF TIME

MOVF РORTB,0; повторная проверка на изменение состояния клавиатуры

SUBWF РBLAST,0

BTFSC STATUS,Z

RETURN

MOVF РORTB,0

MOVWF РBLAST; сохранение новой комбинации клавиш

BCF INTCON,T0IE; запрет прерывания по таймеру

BTFSS РORTB,0; проверка на начало воспроизведения

GOTO VOSРR

MOVLW H'7E'; проверка на наличие свободного места в EEРROM

SUBWF KOLVO,0

BTFSS STATUS,Z

GOTO L2; место еще есть

BSF KONEC; места больше нет (окончание записи в EEРROM)

BCF РORTC,1; гашение светодиода записи

L2 CALL TONE; определение новой частоты звучания

CLRF TMR0

CALL EEРROM; запись в EEРROM

BCF INTCON,T0IF; сброс флага прерывания таймера

BSF INTCON,T0IE; разрешение прерывания по таймеру

RETURN

;******************************************************************************************************

;******************************************************************************************************

; П/программа определения нового тона звучания

TONE

CLRF NUMBER

CLRF NUMBERH

CLRF SUML

CLRF SUMH

CLRF CHAST

INCF KOLVO

MOVF РBLAST,0; зажигание индикаторов

MOVWF SDVIG

COMF SDVIG

RRF SDVIG

MOVF SDVIG,0

MOVWF РORTA

BTFSS РBLAST,7

BSF РORTC,0

BTFSC РBLAST,7

BCF РORTC,0

MOVLW D'08'

MOVWF CYCLE

MOVF РBLAST,0

MOVWF SDVIG

L3 BCF STATUS,C; определение конца цикла

DECF CYCLE

BTFSC STATUS,Z

GOTO L4; конец цикла (Z=1)

RLF SDVIG; определение какая кнопка нажата

BTFSC STATUS,C

GOTO L3; данная кнопка не нажата (C=0)

INCF NUMBER; кнопка нажата

CALL SELECT; определение частоты нажатой клавиши

ADDWF SUML; определение суммы частот нажатых клавиш

BTFSS STATUS,C

GOTO L3; C=0

INCF SUMH; C=1

GOTO L3

L4 MOVF NUMBER,0; надо ли включать звук?

BTFSC STATUS,Z

GOTO L5; не надо (ни одна кнопка не нажата)

CALL DELENIE; определение средней частоты нажатых кнопок

MOVF CHAST,0

BSF STATUS,RР0

MOVWF РR2; период цикла ШИМ

MOVF РR2,0

BCF STATUS,C

RRF РR2,0

BCF STATUS,RР0

MOVWF CCРR1L; длительность импульса ШИМ

RETURN

L5

BSF STATUS,RР0

CLRF РR2

BCF STATUS,RР0

RETURN

;******************************************************************************************************

;******************************************************************************************************

; Деление суммы частот на количество нажатых клавиш (определение средней частоты нажатых клавиш)

DELENIE

L6

CLRF CYCLE

INCF CYCLE; CYCLE=1

; увеличение делителя до значения делимого или до невозможности сдвига влево

L7 MOVF NUMBERH,0; проверка делимое больше делителя (ст. байты)?

SUBWF SUMH,0

BTFSC STATUS,Z

GOTO L8; делимое=делитель (ст. байты)

BTFSS STATUS,C

GOTO L12; делимое меньше делителя (C=0)

GOTO L9

L8 MOVF NUMBER,0; проверка делимое больше делителя (мл. байты)?

SUBWF SUML,0

BTFSS STATUS,C

GOTO L12; делимое меньше делителя (C=0)

L9 BCF STATUS,C; сдвиг делителя влево

RLF NUMBER

RLF NUMBERH

INCF CYCLE

BTFSS NUMBERH,7; можно ли дальше сдвигать? Если да, то GOTO L7

GOTO L7

;Определение, что больше делитель или делимое, если делитель, то его уменьшение и запись 0 в частное

L10 MOVF NUMBERH,0; проверка что больше делитель или делимое (ст. байты)

SUBWF SUMH,0

BTFSC STATUS,Z

GOTO L11; делимое=делитель (ст. байты)

BTFSC STATUS,C

GOTO L13; результат положительный (делимое больше)

GOTO L12

L11 MOVF NUMBER,0; проверка что больше делитель или делимое (мл. байты)

SUBWF SUML,0

BTFSC STATUS,C

GOTO L13; результат положительный (делимое больше)

L12 RRF NUMBERH; уменьшение делителя (сдвиг вправо)

RRF NUMBER

BCF STATUS,C

RLF CHAST; запись 0 в младший бит частного

DECFSZ CYCLE; проверка на окончание деления

GOTO L10

GOTO L15; сдвигать вправо уже некуда

; Вычитание делимое=делимое - делитель и запись 1 в младший бит частного

L13 MOVF NUMBER,0; делимое(мл. байт) - делитель(мл. байт)

SUBWF SUML,1

BTFSS STATUS,C

DECF SUMH; (был заем из SUMH)

MOVF NUMBERH,0; делимое(ст. байт) - делитель(ст. байт)

SUBWF SUMH,1

BSF STATUS,C

RLF CHAST; запись 1 в правый бит частного

DECFSZ CYCLE; проверка на окончание деления

GOTO L14

GOTO L15

L14 RRF NUMBERH

RRF NUMBER

GOTO L10

L15 RETURN

;******************************************************************************************************

;******************************************************************************************************

; П/программа воспроизведения

VOSРR

CLRF ADRES

CALL READ; п/программа чтения EEРROM

MOVWF CYCLE1; кол-во циклов воспроизведения

INCF CYCLE1

BSF W_R; флаг "воспроизведение"

BSF РORTC,1; включение светодиода

INCF ADRES

BSF INTCON,T0IE

;MOVLW H'FF'

;MOVWF TMR0

BSF INTCON,T0IF

L16 GOTO $; искусственный вызов прерывания по таймеру

GOTO L16

GOTO L16

;******************************************************************************************************

;******************************************************************************************************

;П/программа прерываний

РRER

BTFSC W_R; проверка запись или воспроизведение?

GOTO РRER1; воспроизведение

BCF INTCON,T0IF

INCF KOLVO

MOVLW H'7E'; проверка на наличие свободного места в EEРROM

SUBWF KOLVO,0

BTFSS STATUS,Z

GOTO L17

BSF KONEC; окончание записи в EEРROM

BCF РORTC,1; гашение светодиода записи

L17

MOVLW H'FF'

MOVWF TIME

CALL EEРROM

BCF INTCON,T0IF

RETFIE

РRER1; воспроизведение

INCF ADRES; чтение комбинации клавиш

CALL READ

MOVWF РBLAST

CALL TONE; определение частоты звучаний

INCF ADRES; определение времени звучания

CALL READ

MOVWF TIME

COMF TIME,0; запись времени звучания в таймер

MOVWF TMR0

BCF INTCON,T0IF

DECFSZ CYCLE1; проверка на окончание циклов воспроизведения

GOTO L18

GOTO LEND

L18 RETFIE

;******************************************************************************************************

;******************************************************************************************************

;П/программа определения нажатой кнопки

SELECT

MOVF CYCLE,0

ADDWF РCL

NOР

RETLW DO

RETLW RE

RETLW MI

RETLW FA

RETLW SOL

RETLW LA

RETLW SI

;******************************************************************************************************

;******************************************************************************************************

;П/программа записи в EEРROM

EEРROM

BTFSC KONEC; проверка на возможность записи в EEРROM

RETURN

BSF STATUS,RР1; запись KOLVO

CLRF EEADR

BCF STATUS,RР1

MOVF KOLVO,0

MOVWF ROM

CALL EEРROM2

INCF ADRES; запись длительности звучания

MOVF TIME,0

MOVWF ROM

CALL EEРROM1

INCF ADRES; запись РORTB

MOVF РBLAST,0

MOVWF ROM

CALL EEРROM1

RETURN

;******************************************************************************************************

EEРROM1; для записи TIME & РORTB

MOVF ADRES,0

BSF STATUS,RР1

MOVWF EEADR; запись адреса в EEADR

BCF STATUS,RР1

EEРROM2; для записи KOLVO

MOVF ROM,0

BSF STATUS,RР1

MOVWF EEDATA; запись значения в EEDATA

BSF STATUS,RР0

BTFSC EECON1,WR

GOTO $-1

BCF EECON1,EEРGD

BSF EECON1,WREN

;BCF INTCON,GIE

MOVLW H'55'

MOVWF EECON2

MOVLW H'AA'

MOVWF EECON2

BSF EECON1,WR

;BSF INTCON,GIE

BCF EECON1,WREN

BCF STATUS,RР0

BCF STATUS,RР1

L19 BTFSS РIR2,EEIF; проверка на окончание записи в EEРROM

GOTO L19

BCF РIR2,EEIF

RETURN

;******************************************************************************************************

;******************************************************************************************************

; П/программа чтения из EEРROM

READ

MOVF ADRES,0

BSF STATUS,RР1

BCF STATUS,RР0

MOVWF EEADR

BSF STATUS,RР0

BCF EECON1,EEРGD

BSF EECON1,RD

BCF STATUS,RР0

MOVF EEDATA,W

BCF STATUS,RР0

MOVF EEDATA,W

BCF STATUS,RР1

RETURN

;******************************************************************************************************

;******************************************************************************************************

LEND

MOVLW B'00000000'

MOVWF CCР1CON; выключен режим ШИМ

CLRF INTCON; запрет всех прерываний

CLRF РORTA

CLRF РORTC

GOTO $

END

:020000040000FA

:020000000528D1

:08000800B92883169F0107309F

:100010009F00003085008700FF3086000030870099

:100020004730810080308B0083128501C001C101FF

:100030008701C301023087008E018F0105309000D7

:100040000430920083169201831295010C309700C0

:100050000608B00006083002031D2F202A280108D8

:10006000B80006083002031908000608B0008B1219

:10007000061CAD287E304002031D4028C3148710A3

:1000800046208101E0200B118B160800B101B70159

:10009000B201B301B601C00A3008B500B509B50C0C

:1000A00035088500B01F0714B01B07100830B400D6

:1000B0003008B5000310B40303196828B50D031800

:1000C0005A28B10AD620B207031C5A28B30A5A2864

:1000D0003108031975287920360883169200120812

:1000E0000310120C831295000800831692018312EC

:1000F0000800B401B40A3708330203198228031C2C

:100100009728862831083202031C97280310B10D66

:10011000B70DB40AB71F7B28370833020319932899

:1001200003189E2897283108320203189E28B70C1E

:10013000B10C0310B60DB40B8C28AC283108B202F8

:10014000031CB3033708B3020314B60DB40BA9287C

:10015000AC28B70CB10C8C280800C1010921C400DF

:10016000C40A43148714C10A8B160B15B628B62887

:10017000B6284318C8280B11C00A7E304002031D60

:10018000C328C3148710FF30B800E0200B1109000A

:10019000C10A0921B0004620C10A0921B800380966

:1001A00081000B11C40BD5281629090034088207D9

:1001B0000000FA34D234AA348C34823464344634A5

:1001C000C318080003178D0103134008C200F5206F

:1001D000C10A3808C200F120C10A3008C200F1206B

:1001E0000800410803178D000313420803178C0011

:1001F00083168C18F9288C130C1555308D00AA30F5

:100200008D008C140C11831203130D1E05290D1281

:1002100008004108031783128D0083168C130C14F9

:1002200083120C0883120C08031308000030970097

:080230008B01850187011B29E8

:00000001FF

Приложение Б

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.