86138

Программа опроса малой клавиатуры и обработки прерываний от большой

Курсовая

Информатика, кибернетика и программирование

Программа опрашивает маленькую клавиатуру с параллельной обработкой прерываний от большой, т. е. от последовательного порта. В качестве реакции на поступившее прерывание программа выводит значение нажатой на большой клавиатуре клавиши.

Русский

2015-04-03

69 KB

3 чел.

Московский Государственный Институт Электроники и Математики

(Технический Университет)

Курсовая работа по курсу

МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ

программа опроса малой клавиатуры и обработки прерываний от большой

Выполнила:

Студентка группы С-84

Белова О.

Преподаватель:

Гудков Ю.И.

Москва 2005 г.


Содержание

[1] Содержание

[2]
Блок-схема

[3]
Текст программы с комментариями


Описание работы программы 

Программа опрашивает маленькую клавиатуру с параллельной обработкой прерываний от большой, т. е. от последовательного порта. В качестве реакции на поступившее прерывание программа выводит значение нажатой на большой клавиатуре клавиши.

По адресу 8000 размещается основная программа, 8023 – обработка прерывания. В основной программе таймер настраивается на работу в 16-ричном режиме и разрешается прерывание от последовательного порта, после чего начинается непосредственно опрос малой клавиатуры (метка SCAN). Номер проверяемой клавиши ns инициализируется единицей. Сама процедура опроса реализована как вложенный цикл: внешний цикл FOR_1 для счета строк , внутренний FOR_2 – для счета столбцов. И тот и другой счетчики уменьшаются от 4х до 1. В начале внешнего цикла задается исходный байт сканирования (11111110). После задержки, организованной с помощью таймера в виде подпрограммы WAIT, значение из порта считывается и анализируется далее после загрузки счетчика столбцов. Значение из порта сдвигается вправо через перенос: в случае появления нуля – то есть нажатой клавиши – бит переноса  равен нулю, в обратном случае он установлен. В случае, если  клавиша не нажата, переходим к метке KEYPRESS_END: увеличиваем номер проверяемой клавиши, завершаем внутренний цикл. В случае выхода из первого цикла (закончился проверяемый столбец), сдвигаем байт сканирования влево циклически и завершаем внешний цикл. По завершении внешнего цикла – безусловный переход к началу сканирования SCAN.

В случае нажатия клавиши начинается ее обработка (KEYPRESS_BEGIN). Из массива KEYTABLE считывается ASCII-код ее значения в зависимости от номера ns, после чего символ выводится на экран (подпрограмма PUT_SYM). В рамках подпрограммы печати символа осуществляется очистка бита TI, копирование значения нажатой клавиши в аккумулятор, ожидание, пока установится TI и снова его очистка.

Начиная с 8023 адреса расположена процедура обработки прерывания. Она сохраняет в стеке текущее значение аккумулятора. Затем проверяет, установлен ли флаг прерывания. В случае его установки, она снова его сбрасывает, после чего печатает содержимое SBUF с помощью той же подпрограммы PUT_SYM.


Блок-схема



Текст программы с комментариями

  ns equ 2Fh ;номер нажатой клавиши на малой клавиатуре

  org 8000h

  ljmp INIT

  org 8023h ;обработка прерывания от большой клавиатуры

  push ACC

  push PSW

CHECK_RI: ;проверка флага прерывания

  jnb RI, QUIT_INT

  clr RI

  mov A, SBUF

  call PUT_SYM

QUIT_INT: ;завершение обработки прерывания

  pop PSW

  pop ACC

  reti

INIT:

  setb RS0 ;иcпользуем 1-й банк региcтров

  clr RS1

  anl tmod, #0F0h ;настраиваем таймер для работы в 16-разрядном режиме

  orl tmod, #01h

  clr TR0

  mov A,#0FFH

  mov P1,A

  mov IP, #0 :присвоение всем видам прерывания низшего приоритета

  mov IE, #10010000B ;разрешаем прерывания от приемопередатчика

SCAN:

  mov ns,#01h ;номер проверяемой клавиши

  mov R7,#11111110b ;исходный байт сканирования

  mov R6,#2 ;регистр, используемый для задержки

  call WAIT

  mov R1,#04h ;Загрузим счетчик строк = 4.

FOR_1: ;Первый цикл. Производится опрос матрицы клавиатуры по строкам.

mov P1,R7 ;Перешлем байт из регистра R7 в порт 1.

mov R6,#2

call WAIT

;Читаем значение из порта и проводим его анализ.

  mov 2Eh,P1 ;Запишем байт из порта в ячейку 2E.

  mov R2,#04h ;Загрузим счетчик столбцов = 4.

FOR_2: ;Второй цикл. Производим опрос значений в строке матрицы клавиатуры.

  mov A,2EH ;Запишем значение из ячейки 2E в A.

  rlc A ;Сдвиг аккумулятора вправо через перенос.

  mov 2EH,A ;Запишем в ячейку 2E значение из A.

  jc KEYPRESS_END ;Если не нажата клавиша переход к KEYPRESS_END

KEYPRESS_BEGIN: ;Обработка нажатой клавиши. Запишем ее значение.

  mov A,ns ;Записываем в A порядковый номер нажатой клавиши

  call KEYTABLE ;читаем из массива значение кнопки,

  call PUT_SYM  ;а затем выводим значение кнопки через SBUF.

  jmp SCAN ;Переход к началу сканирования.

KEYPRESS_END:

  inc ns ;Увеличиваем номер клавиши.

 djnz R2,FOR_2 ;Завершение второго цикла (FOR_2).

 

;Завершение первого цикла после обработки строки матрицы.

  mov A,R7 ;Загружаем в аккумулятор байт сканирования.

  rl A ;Сдвинем байт сканирования влево циклически.

  mov R7,A ;Записываем аккумулятор в байт сканирования.

  djnz R1,FOR_1 ;Завершение первого цикла (FOR_1).

;Завершение основного цикла.

  jmp SCAN ;Переходим к началу сканирования матрицы.

KEYTABLE: ;Процедура чтения массива значений клавиш.

  movc A,@A+PC ;Записываем в A значение из ячейки A+PC.

  ret ;Завершение подпрограммы чтения массива.

  db '8','C','2','5','7','0','1','4','x','D','A','-','9','B','3','6'

  

PUT_SYM: ;вывод символа

  clr TI        

  mov SBUF,A

  jnb TI, $     

  clr TI

  ret

WAIT: ;задержка с помощью таймера

  mov TH0, #0

  mov TL0, #0

  setb TR0

LOOP:

  jnb TF0, $

  clr TF0

  djnz R6,LOOP

  clr TR0

  ret

QUIT:

  nop

  end


 

А также другие работы, которые могут Вас заинтересовать

58954. Володимир Винниченко. «Федько - халамидник». Щедрий на добро внутрішній світ героя. Федько як особистість. Образи Федька і Толі 57 KB
  Мета: допомогти учням розібратися в складнощах характерів та вчинків героїв оповідання; розвивати навички виразного читання, переказу, виділення головних епізодів та деталей, висловлення власного ставлення до прочитаного, обґрунтування своєї думки...
58955. Микола Вороний. «Євшан – зілля». Поема про необхідність повернення людині історичної пам’яті, усвідомлення своєї національної приналежності 51 KB
  Мета: створити умови для ознайомлення учнів із життям і творчістю Миколи Вороного з історичною основою та змістом поеми Євшан-зілля; сприяти розвитку навичок вдумливого виразного читання; коментування прочитаного визначення особливостей літературного твору...
58956. Пристрої введення та виведення інформації 178.71 KB
  Що таке інформація За допомогою чого передають інформацію Види інформації Як називають повідомлення яке не несе корисної інформації Що називають елементною базою компютера Що таке швидкодія Що розуміють під терміном апаратне забезпечення...
58957. Виховний захід: «Прощавай, початкова школо!» 87.5 KB
  Всі вони народилися в одному селі ходили до однієї незвичайної школи і навіть вчилися в одному класі. Вперше чую Важко уявити Це мабуть був клас одних вундеркіндів Їх що збирали в клас з усього селища Ведуча. Починаємо пряму трансляцію із загальноосвітньої школи...
58958. Вплив антропогенних факторів на репродуктивну функцію людини 162 KB
  І кожен з вас мріятиме щоб його дитина була гарною розумною а головне здоровою. Коли маля росте здоровим розвивається фізично і розумово то батьки безмежно щасливі. Щоб вона стала здоровою батьки йдуть на все.
58959. Урок. Пори року 348 KB
  Мета: розвивати початкові навички використання елементів взаємодії з комп’ютером – списків та закладок у діалогових вікнах; ознайомити учнів з особливостями погоди в різні пори року; розвивати елементи логічного мислення, пам’ять, увагу, кмітливість...
58960. Аналіз поеми М. Гоголя «Мертві душі». Чичиков герой нашого часу? 57 KB
  Мета: проаналізувати образ Чичикова; вдосконалювати вміння висловлювати та доводити свої думки аргументувати свої вислови узагальнювати; розкривати творчі здібності учнів; прищеплювати звичку з повагою ставитися до думок інших людей...
58961. «Я є рушниця, радістю набита, якою вистрілю на честь життя» (до 100-річчя з дня народження Богдана-Ігоря Антонича) 151.5 KB
  Моя країно верховинна ні не забуть твоїх черемх коли над ними місяць лине вівсяним калачем 3 учень: Так це БогданІгор Антонич який в горах де ближче сонця перший раз приглянувся небу дописує черговий вірш до збірки Книга Лева.
58962. Особові займенники 371 KB
  Мета: Вчити розпізнавати особові займенники; визначати особу число відмінок займенників; формувати вміння користуватись відмінковими формами займенників в усному й писемному мовленні та влучно використовувати особові займенники; розвивати увагу мислення...