Московский государственный институт электроники и математики
(технический университет)
Кафедра
«Информационно-коммуникационные технологии»
Курсовая работа
на тему:
«Калькулятор на основе микропроцессора»
по дисциплине:
«Микропроцессорные системы»
-
Выполнили:
Группа:
Проверил:
|
Куликов В.А.
Сарумов К.М.
С – 84
Гудков Ю.И.
|
Москва 2008 г.
Аннотация
В курсовой работе разрабатывается программа принимающая номер ноты с клавиатуры персонального компьютера и выводящая сигнал с соответствующей частотой на порт P1.0. В работе использовались прерывания от последовательного порта. Работа выполняется на системе “прототип” на основе микроконтроллера 51 семейства.
1. Техническое задание
Написать программу для микропроцессора семейства 51, имеющую следующие функции:
-
Ввод с клавиатуры числа от 1 до 7 (номера ноты)
-
Вывод результата (сигнала)на порт P1.0 и название ноты на монитор.
3. Алгоритм основной программы
Установка обработчика прерываний от com порта
Основная функция main:
Генерация сигнала на порт P1.0 в зависимости от значения региста R2
Установка разрешения прерываний:
-
разрешение всех прерываний
-
com порта
начало
4. Алгоритмы обработчиков прерываний
4.1 Алгоритм обработчика com порта
-
вывод номера ноты, полученной из com порта;
-
установка ring_flag;
Прерывание от
компьютерной клавиатуры
да
нет
начало
конец
5. Исходный код
org 8000h ;Начальная программа
ljmp Main
org 8023h ;Обработка прерываний по com порту
ljmp int_com
Main:
clr TI
clr RI
;разрешение прерываний
setb EA ;глобальное разрешение прерываний
setb ES ;разрешение прерываний по com порту
setb PS ;приоритет прерываний по com порту
mov R2,#49d
NOOOP:
mark_440: ; Ля
cjne R2,#49d,mark_880
clr P1.0
nop
mov R1, #173d
Zero_440:
nop
nop
nop
nop
djnz R1, Zero_440
setb P1.0
mov R1, #173d
Bit_440:
nop
nop
nop
nop
djnz R1, Bit_440
jmp mark_440
;--------------------------- 880Гц ; Ля 2 октава
mark_880: ;Ля 2 октава
cjne R2,#50d,mark_261
clr P1.0
mov R1, #74d
Zero_880:
nop
nop
nop
nop
nop
djnz R1, Zero_880
setb P1.0
mov R1, #47d
Bit_880:
nop
nop
nop
nop
nop
nop
nop
nop
nop
djnz R1, Bit_880
jmp mark_880
;--------------------------Нота До
mark_261: ;До
cjne R2,#51d,mark_494
clr P1.0
mov R1, #250d
Zero_261:
nop
nop
nop
nop
nop
djnz R1, Zero_261
setb P1.0
nop
nop
mov R1, #97d
Bit_261:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
djnz R1, Bit_261
jmp mark_261
;--------------------------Нота СИ
mark_494: ;Си
cjne R2,#52d,mark_880
clr P1.0
mov R1, #185d
Zero_494:
nop
nop
nop
djnz R1, Zero_494
setb P1.0
mov R1, #231d
Bit_494:
nop
nop
djnz R1, Bit_494
jmp mark_494
Nop
mark_bad_nota:
mov R2,#49d
jmp NOOOP
ret
int_com: ;Обработка прерываний по com порту
jnb RI, KON ;если кнопка не нажата, выйти
mov A, SBUF ;вывод введенного символа
mov SBUF, A ;
call EXCP ; подпрограмма вывода байта до конца
mov R2, A ;запись номера ноты в регистр R2
clr RI ;обнуление RI, для возможности нового прерывания по com порту
KON: ;конец обработки прерывания ком порта
reti
EXCP: ;ожидает пока весь байт будет выведен на экран
Waiting_byte:
jnb TI, Waiting_byte ; ждем пока не окончится передача байта (флаг TI = 1)
clr TI
ret