Разработка программы перевода десятичных чисел стандартной клавиатуры в 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.