Разработка программы перевода десятичных чисел стандартной клавиатуры в BIN и HEX код по команде с матричной клавиатуры
Программирование микроконтроллера 51 серии на ввод символов от матричной и стандартной клавиатуры ПК, вывод введенных символов в BIN и HEX кодах. Использование прерывания от СОМ порта и таймера ТО. Алгоритм обработчиков прерываний: от таймера и СОМ порта.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 24.08.2009 |
Размер файла | 52,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
3
Кафедра "Информационно-коммуникационные технологии"
Курсовая работа
по дисциплине "Микропроцессорные системы"
Москва 2008
Аннотация
В курсовой работе разрабатывается программа перевода десятичных чисел стандартной клавиатуры в BIN и HEX код по команде с матричной клавиатуры. Работа выполняется на учебном стенде с использованием системы-прототип на основе микроконтроллера 51 семейства.
Оглавление
- Аннотация 2
- Техническое задание 4
- Анализ технического задания 4
- Алгоритм основной программы 5
- Алгоритмы обработчиков прерываний 6
- Алгоритм обработчика от таймера 6
- Алгоритм обработки прерывания от СОМ-порта 7
- Листинг…………………………………………………………………………….7
- Выводы. 22
- Список литературы. 24
- Техническое задание
- Реализовать программу с использованием системы прерываний, отвечающую следующим требованиям:
1. Ввод с клавиатуры символов 0…9.
2. Ввод с матричной клавиатуры команды перевода символа.
3. Перевод символа.
4. Вывод переведенного символа.
Анализ технического задания
В соответствии с техническим заданием программа должна выполнять:
1. Прием символа от матричной клавиатуры.
2. Прием символа от стандартной клавиатуры.
3. Перевод символа, принятого от матричной клавиатуры, в BIN или HEX код.
4. Вывод BIN или HEX кодов символа.
Прием символа от матричной клавиатуры реализуется с помощью определения нажатой клавиши в обработчике данных прерываний. Ввод символа от компьютерной клавиатуры реализуется с помощью прерываний от СOM порта (бит RI). Вывод символа реализуется с помощью прерываний от COM порта (бит TI). Основная программа инициализирует прерывания от COM порта и таймера T0, после чего ожидает любого из перечисленных прерываний.
Соответствие битов порта P1 и контактов матричной клавиатуры:
Алгоритм основной программы
3
Алгоритмы обработчиков прерываний
Алгоритм обработчика от таймера
3
Алгоритм обработки прерывания от COM порта
3
Листинг
ORG 8000H
jmp start
org 800BH
jmp preryv_timer
org 8023H
jmp preryv_port
start:
thconst equ 24 ;251
tlconst equ 0
MOV SP,#70H
setb EA
setb ET0 ;
setb ES ;
clr EX0
clr EX1
setb PS ;
clr PT0
clr EX0
clr EX1
clr PS
setb PT0
setb TR0 ;
CLK_KHZ equ 11000
eqiv equ 41h
eq_count equ 42h
ROMD equ 40h
hexconv equ 20h
keybit equ 21h.0
keycode equ 22h
in1 equ P1.4
in2 equ P1.5
in3 equ P1.6
in4 equ P1.7
out1 equ P1.0
out2 equ P1.1
out3 equ P1.2
out4 equ P1.3
keyb equ P1
MOV R0,#ROMD
MOV R1,#0
clr keybit
cycle:
jmp cycle
preryv_timer:
push ACC
push PSW
clr TR0
clr TF0
mov TH0, #thconst
mov TL0, #tlconst
setb TR0
call opros
polnendt0:
pop PSW
pop ACC
reti
opros:
clr ea
mov keyb, #255
clr ti
call oproskey
mov a, keycode
mov R6, #255
oprosdreb:
cjne A, keycode, nokey
call oproskey
djnz R6, oprosdreb
mov A, R5
cjne A, keycode, newkey
jmp nokey
newkey: mov R5,keycode
jb keycode.0, bin
jb keycode.1, decim
jb keycode.2, hex
jb keycode.3, ascii
jmp nokey
bin:
mov sbuf, #'B'
jnb ti, $
clr ti
jnb keybit, frombincall
call tobin
jmp binend
frombincall: call frombin
binend: jmp endopros
decim:
mov sbuf, #'D'
jnb ti, $
clr ti
jnb keybit, fromdeccall
call todec
jmp decend
fromdeccall: call fromdec
decend: jmp endopros
hex:
mov sbuf, #'H'
jnb ti, $
clr ti
jnb keybit, fromhexcall
call tohex
jmp hexend
fromhexcall: call fromhex
hexend: jmp endopros
ascii:
mov sbuf, #'A'
jnb ti, $
clr ti
jnb keybit, fromasciicall
call toascii
jmp asciiend
fromasciicall: mov R7, ROMD
asciiend: jmp endopros
jmp endopros
endopros:
cpl keybit
nokey:
setb ea
ret
;--обработка прерывания от последовательного порта-
preryv_port:
push ACC
clr TI;
jnb RI, vihoduart
clr RI
mov A, sbuf
mov @R0, A
mov A, @R0
mov SBUF,A ;вывод вводимово обратно на экран
cjne A, #08, not_backspace ; символ бекспейса
dec R1
dec R0
cjne R1, #255, not_backspace ; если первым нажали backspace
dec R1
dec R0
not_backspace:
INC R1
INC R0 ;увеличиваем адрес
vihoduart:
pop ACC
reti
; конец обработки прерывания от последовательного порта--
;----функция хексконвертации аргумент кодсимвола в аккумуляторе выход код в аккумуляторе
hexconvert:
mov hexconv, A
jb hexconv.6, hexcon21
subb A, #'0'
jmp hexcon22
hexcon21:
subb A, #55 ; В случае если символ A-F
hexcon22:
ret
;---------из хекс-----------
fromhex:
clr A
cjne R1, #0, fromhex2
mov R7, #0 ; 0 цифр результат 0
fromhex2: cjne R1, #1, fromhex3
mov A, ROMD
call hexconvert
mov R7, A
fromhex3: cjne R1, #2, fromhex4
mov A, ROMD; 2 цифры результат
call hexconvert
swap A ; обмен тетрадами
mov R7, A
mov A, ROMD+1; вторая тетрада
call hexconvert
orl A, R7 ; логическое или для объедин тетрад в один байт
mov R7, A
fromhex4:
ret
;---------из двоичной----------
frombin:
MOV R0,#ROMD ;начальный адрес куда класть информацию
clr A
cjne R1, #0, frombin2
mov R7, #0 ; 0 цифр результат 0
jmp frombinend
frombin2: ;здесь работаем над введеними байтами
cjne @R0, #'0', frombin1
clr C
jmp frombin3
frombin1: setb C
frombin3:
RLc A
inc R0 ;увеличиваем адрес
DJNZ R1, frombin2 ;цикл
mov R7,A
frombinend:
ret
;---------из десятичной-----------
fromdec:
MOV R0,#ROMD ;начальный адрес куда класть информацию
clr A
clr C
cjne R1, #0, fromdec2
mov R7, #0 ; 0 цифр результат 0
fromdec2: cjne R1, #1, fromdec3
mov A, ROMD ; одна цифра результат ее код - код нуля
subb A, #'0'
mov R7, A
fromdec3: cjne R1, #2, fromdec4
mov A, ROMD; 2 цифры результат
subb A, #'0'
mov B, #10
mul ab
mov R7, a
mov A, ROMD+1; сложение с единицами
subb A, #'0'
add A, R7
mov R7, a
fromdec4: cjne R1, #3, fromdec5
mov A, ROMD; 3цифры сотни
subb A, #'0'
mov B, #100
mul ab
mov R7, a
mov A, ROMD+1; десятки
subb A, #'0'
mov B, #10
mul ab
add A, R7
mov R7, a
mov A, ROMD+2; сложение с единицами
subb A, #'0'
add A, R7
mov R7, a
fromdec5:
ret
;---------в десятичную-----------
todec:
mov A, R7
mov B, #100
div ab
add A, #'0'
mov ROMD, A
mov A,B
mov b, #10
div Ab
add A, #'0'
mov ROMD+1, A
mov a, b
add A, #'0'
mov ROMD+2, A
mov r1, #3
call vivod
ret
;---------в двоичную-----------
tobin:
mov A, R7
mov r1, #8
mov r0, #ROMD
tobin2: ;здесь работаем над байтами
rlc A
jc tobin1
mov @R0, #'0'
jmp tobin3
tobin1: mov @R0, #'1'
tobin3: inc r0
DJNZ R1, tobin2 ;цикл
mov r1, #8
call vivod
ret
;---------в хекс-----------
; коды цифр 0-9 48-57 коды A-F 65-70
tohex:
mov A, R7
anl A, #15
clr C
subb A,#10
jnc tohexAF1
add A, #58; прибавляем 10 которые вычли и код 0 итого 48+10=58
jmp tohex11
tohexAF1: add A, #65 ;прибавляем код A
tohex11:
mov ROMD+1, A
mov A, R7
anl A, #240
swap A
clr C
subb A,#10
jnc tohexAF2
add A, #58; прибавляем 10 которые вычли и код 0 итого 48+10=58
jmp tohex21
tohexAF2: add A, #65 ;прибавляем код A
tohex21:
mov ROMD, A
mov r1, #2
mov r0, #ROMD
call vivod
ret
;----в ASCII---------
toascii:
mov ROMD, R7
mov R0, #ROMD
mov R1, #1
call vivod
ret
;---------вывод-----------
vivod:
PUSH ACC
clr EA
clr ti; ;процедура вывода
MOV R0,#ROMD ;начальный адрес куда класть информацию
RDMORE2:
mov A, @R0
mov sbuf, A ;
jnb ti, $
clr ti
inc R0 ;увеличиваем адрес
DJNZ R1,RDMORE2 ;цикл
clr ti;
mov sbuf, #13;CR
jnb ti, $
clr ti
mov sbuf, #10 ;LF
jnb ti, $
clr ti
; сброс указалей адреса и количста символов
mov R1,#0
mov R0, #ROMD
setb EA
POP ACC
RET
; -------опрос кнопок клавы---------
oproskey:
mov keyb, #255
mov keycode, #0
clr in1
jb out2, oproskey2
setb keycode.0 ; нажата клавиша 1
oproskey2:
jb out3,oproskey3
setb keycode.1 ; нажата клавиша 2
oproskey3:
jb out4,oproskey4
setb keycode.2 ; нажата клавиша 3
oproskey4:
setb in1
clr in2
jb out2,oproskey5
setb keycode.3 ; нажата клавиша 4
oproskey5:
ret
ENDВыводы
В курсовой работе запрограммирован микроконтроллер 51 серии на ввод символов от матричной и стандартной клавиатуры ПК, вывод введенных символов и перевод символов в BIN и HEX. Программа использует прерывания от СOM порта и таймера T0.
Список литературы
1. Гудков Ю. И. - Конспект лекций и семинаров по дисциплине “Микропроцессорные системы”.
2. Документация и описание команд 8051.
3. Сединин В.И., Микушин А.В. - Программирование микропроцессорных систем на языке ASM-51.
Подобные документы
Разработка микроконтроллерной системы на основе AT90S8535 подключенных к нему электроприборов. Эскизный проект цифрового устройства ограниченной сложности. Расчет потребляемой мощности таймера, алгоритма управления, программы микроконтроллера.
курсовая работа [292,7 K], добавлен 12.04.2009Микропроцессорные системы и микроконтроллеры. Разработка схемы и программы микроконтроллера. Симуляция проекта в программе Proteus 7. Прерывание программы по внешнему сигналу, поступающему в процессор. Устройство и настройка канала порта на ввод-вывод.
контрольная работа [551,8 K], добавлен 26.01.2013Разработка принципиальной схемы и описание работы контроллера клавиатуры/дисплея КР580ВД79. Схема сопряжения микроконтроллера с фотоимпульсным датчиком. Расчет потребляемого тока от источника питания. Блок-схема программы вывода информации на индикацию.
курсовая работа [736,9 K], добавлен 18.02.2011Понятие о микропроцессорах и микроконтроллерах. Блок управления и его функции. Структура разряда порта микроконтроллера. Структура внутренней памяти данных. Работа с внешней памятью данных и подключение внешней памяти. Принцип работы и настройка таймера.
презентация [665,8 K], добавлен 06.02.2012Разработка программы, реализующей таймер прямого хода на базе микроконтроллера AT90S8515. Приложение и среда программирования Algorithm Builder, ее преимущества. Принципиальная схема и назначение переменных. Описание основной программы и подпрограмм.
курсовая работа [1,2 M], добавлен 19.03.2012Структурная схема микроконтроллерной системы. Схемы подключения микроконтроллера, цифровых и аналоговых сигналов, линейного дисплея и клавиатуры. Текст главной программы на языке Ассемблера для МК51. Программа ввода и обработки аналоговой информации.
курсовая работа [372,6 K], добавлен 19.12.2013Розробка таймера на базі мікроконтролера AT90S8515. Опис принципової електричної схеми блоку клавіатури і індикації. Використання периферійних пристроїв. Таблиця робочих регістрів. Підпрограми обробки переривання таймера, Oproskl та рахунку часу.
курсовая работа [3,3 M], добавлен 27.02.2014Выбор элементной базы. Анализ ресурсов ввода-вывода. Структура алгоритма программы. Состав и назначение отдельных элементов. Подпрограммы табличной перекодировки напряжения в давление, вывода числа на индикацию, обработчика прерывания от таймера.
курсовая работа [1,1 M], добавлен 21.12.2010Традиционный LPT-порт и расширения параллельного порта. Физический и электрический интерфейс порта, передача данных. Схема памяти и блок электрических ключей. Структура и принцип работы блока сопряжения. Разработка и изготовление печатного основания.
курсовая работа [2,1 M], добавлен 11.02.2012Описание работы схемы таймера, собранного на микросхемах повышенной степени интеграции и энергоэкономичности. Потребляемая мощность, формирователь звукового сигнала, счетчики минут и часов, регистр памяти. Размешение элементов, программа для фотоплоттера.
курсовая работа [340,9 K], добавлен 07.01.2010