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


 

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

25963. Основные конструкций крупнопанельного здания 28 KB
  Панели двух и трехслойные виброкирпичные панели с применением пластических масс являются разновидностями двух указанных основных групп. Однослойные панели в сравнении с многослойными требуют меньше металла менее трудоемки в изготовлении обеспечивают теплотехнический режим в помещении в таких стенах меньше мостиков холода достаточно прочны. В двухслойной панели одна скорлупа и слой утеплителя опасность накопления влаги в утеплителе не изолированном железобетонной плитой больше чем в трехслойной. Однослойные панели могут быть...
25965. ЗДАНИЯ ИЗ ОБЪЕМНО-ПРОСТРАНСТВЕННЫХ БЛОКОВ 193.5 KB
  ЗДАНИЯ ИЗ ОБЪЕМНОПРОСТРАНСТВЕННЫХ БЛОКОВ Преимуществом строительства зданий из объемнопространственных блоков по сравнению с крупнопанельным строительством является существенное сокращение затрат труда непосредственно на строительных площадках а также сроков возве дения зданий. Объемнопространственные блоки изготовляют на домостроительных заводах в виде полностью законченных оборудованных и отделанных объемных элементов на одну иногда и на две комнаты рис. изготовления монолитных блоков их формуют из железобетона тяжелого и легкого...
25966. Объемно-блочные дома имеют две основные конструктивные схемы: блочные и блочно-панельные 75 KB
  В зданиях блочнопанельной системы объемные блоки устанавливаются друг на друга а между ними укладываются панели перекрытий. Объемные блоки могут также размещаться в шахматном или другом порядке. Объемные блоки изготовляются из бетона при этом для наружных стен возможно использование керамзито перлито и шлакобетона. Сборные объемные блоки делают из готовых плоских железобетонных панелей.
25967. Аудит учета фондов и резервов 35 KB
  Если в учредительных документах предприятия не предусмотрено создание резервов капитала то предприятие не имеет права его создавать. При проверке резервного и специальных фондов аудитору следует знать что на большинстве предприятий формируется резервный капитал необходимый для их деятельности и социального развития коллектива. Резервный капитал учитывается на одноименном счете 82 и создается за счет прибыли до налогообложения если предусмотрено законодательством для покрытия непредвиденных потерь и убытков или за счет прибыли оставшейся...
25969. Аудит учредительных документов и формирования уставного капитала 29 KB
  При этом следует знать что для достижения этой цели аудиторами должны быть решены следующие задачи: определение юридического статуса предприятия сферы деятельности прав его функционирования; установление наличия лицензии по видам деятельности подлежащих лицензированию; проверка порядка формирования и изменения уставного складочного капитала и изучение его структуры. При проверке учредительных документов и формирования уставного капитала необходимо руководствоваться следующими основными нормативными документами: Гражданским кодексом часть...
25970. Аудиторская выборка 51.5 KB
  Аудиторская выборка дает возможность аудитору получить и оценить аудиторские доказательства в отношении некоторых характеристик элементов отобранных для того чтобы сформировать или помочь сформировать выводы касающиеся генеральной совокупности из которой произведена выборка; При разработке процедур аудита аудиторская организация или индивидуальный аудитор должны определить надлежащие методы отбора элементов подлежащих проверке при сборе аудиторских доказательств для достижения целей аудиторских тестов. Риск связанный с использованием...
25971. Аудиторская проверка финансовой (бухгалтерской) отчетности экономического субъекта 40.5 KB
  Цель аудита финансовых результатов и распределения прибыли установление достоверности отражения в учете и отчетности прибылей и убытков предприятия законности распределения и использования прибыли остающейся в распоряжении предприятия после налогообложения. Основными задачами данного вида аудита являются: оценка соответствия бухгалтерской финансовой отчетности данным синтетического и аналитического учета составляющих конечного финансового результата; подтверждение соответствия оформленных предприятием бухгалтерских операций...