Опрос дискретных датчиков программным методом

Опрос состояния дискретных датчиков. Циклический опрос состояния выходного сигнала дискретного датчика. Распределение кодов нажатых кнопок в таблице клавиатуры. Программа ввода четырехзначного числа с клавиатуры. Расчет констант для подпрограммы.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 26.01.2013
Размер файла 1009,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Лабораторная работа

Опрос дискретных датчиков программным методом

Цель работы: изучить особенности организации опроса состояния дискретных датчиков программным методом .

Опрос состояния дискретных датчиков. Практически ни одна МПС не обходится без кнопок, переключателей, клавиатуры и других простейших дискретных датчиков на основе обычных механических контактов. При помощи такого вида периферийных элементов в МПС вводится различная информация, которая используется для изменения алгоритма работы её программы. Сигнал таких датчиков формируется путем замыкания (размыкания) электрической цепи механическими контактами. Сигнал, формируемый контактной парой, сопровождается «дребезгом» из-за появления отскока контактов, длительность которого составляет 8-12 мС (рис. 1).

Рисунок 1 - Сигнал, формируемый контактной парой

Если такой сигнал непосредственно подать на вход МПС, то он воспринимается как случайная последовательность пулей и единиц. Подавить влияние «дребезга» в сигнале на выходе контактной пары можно схемотехнически, путём установки специальных формирователей. В качестве такого формирователя выходного сигнала кнопки может использоваться RS-триггер. Для уменьшения аппаратных затрат применяют программное подавление «дребезга». Оно заключается в повторном опросе контактной пары с задержкой в 12мС (подбирается экспериментально для каждого типа используемого дискретного датчика), при совпадении результатов опроса кнопка была нажата, иначе в результате первого опроса был зафиксирован «дребезг».

Рисунок 2 - Функциональная схема лабораторной работы

В МПС управления технологическими процессами, в основном, используется два метода ввода данных: программный и по прерываниям. Программный метод предполагает циклический опрос состояния выходного сигнала дискретного датчика - флага готовности данных. Ввод данных по прерываниям предполагает реакцию МК51 только по приходу сигнала «запрос прерывания» (сигнала с выхода дискретного датчика). Рекомендуется ввод по прерываниям использовать для исключительных (аварийных) режимов работы МПС.

Источники дискретных сигналов стенда. Функциональная схема лабораторной работы №5 показана на рис. 3.

В составе УОС имеется две отдельные кнопки SW15, SW16, которые могут опрашиваться, как программно, так и по внешним прерываниям into, int1, соответственно.

В составе УОС имеется матричная 3x4 клавиатура SW3 - SW14. Клавиатура подключена к шине данных МК51 посредством регистра системного контроллера DD4 (Приложение А).

Опрос всей клавиатуры производится за три раза (за один раз считывается состояние одного столбца клавиатуры). Чтобы произвести опрос столбца клавиатуры (SW3, SW6.-SW9, SW12; SW4, SW7, SW10, S13; илиSW5, SW8, SW11, SW14), необходимо выставить на соответствующей линии адреса (АО, А1, А2 для первого, второго и третьего столбца соответственно) уровень логического нуля, а на других линиях уровень логической единицы. Для этого необходимо прочитать содержимое младшего полубайта ячейки внешней памяти данных по соответствующему адресу (табл. 1). Если кнопка клавиатуры нажата, то соответствующий бит(K.L0 - DO, ..., KL3 - D3) в считанном байте будет равен нулю, если же не нажата - единице.

Таблица 1 - Адреса опроса столбцов клавиатуры

Столбец (кнопки)

Адрес опроса

1

(SW3, SW6, SW9, SW12)

9006h

2

(SW4, SW7, SW10, SW13)

9005h

3

(SW5, SW8, SW11, SW14)

9003h

Алгоритм опроса столбца клавиатуры состоит из последовательности следующих шагов:

1) Формирование сканирующего адреса (9006h, 9005h, 9003h);

2) Сканирование состояния клавиатуры (чтение ячейки ВПД);

3) Выделение младшего полубайта данных;

3.1 Инверсия скан-кода

3.2 Маскирование старшей тетрады данных.

4) Определить, есть ли нажатие кнопки? Если нет, то перейти к п. 1;

5) Устранение «дребезга»;

6) Выполнить обработку скан - кода нажатой кнопки;

7) В соответствии с обработанным скан - кодом, из таблицы выбрать код нажатой клавиши.

Пункты 1 - 3, 5, 7 не вызывает затруднений, а п. 4, 6 рассмотрим подробнее.

После выполнения пунктов 1 -- 3 алгоритма, желательно содержимое аккумулятора А инвертировать, тогда скан - коды нажатых кнопок клавиатуры:

00000001 -ряд KL0 кнопки SW3 («1»), SW4 («2»), SW5 («3»);

00000010 -ряд KL1 кнопки SW6 («4»), SW7 («5»), SW8 («6»);

00000100 -ряд KL2 кнопки SW9 («7»), SW10 («8»), SW1 1 («9»);

00001000 -ряд KL3 кнопки SW12 («*»), SW13 («0»), SW14 («#»)

и в п. 4 будет проверка на нулевой код аккумулятора А.

Обработка скан - кода нажатой кнопки заключается в том, чтобы его «упаковать» и таким образом уменьшить число «пустых» ячеек таблицы кодов клавиатуры. Один из способов «упаковки» - проведение логической операции «ИСКЛЮЧАЮЩЕЕ ИЛИ» над скан - кодом и некоторой маской. Например, маска для столбца АО = 0 - 00h; для столбца А1 = 0 - 01h, для столбца А2 = 0 -0Fh. Тогда таблицы кодов клавиатуры (табл. 2) займёт всего 16 ячеек (4 «пустых» ячейки).

Таблица 2 - Распределение кодов нажатых кнопок в таблице клавиатуры

Адрес таблицы

h - код

Обозначение

(h - код мл. байта)

нажатой кнопки

нажатой кнопки

0

02

«2»

1

01

«1»

2

04

«4»

3

05

«5»

4

07

«7»

5

08

«8»

6

00

-

7

АА

«#»

8

СС

«*»

9

00

«0»

А

00

-

В

09

«9»

С

00

-

D

06

«6»

Е

03

«3»

F

00

-

Ход работы

1. Выполнить задание. Составить блок-схему

Задание

После нажатия кнопки SW15индицировать «пульсирующее» число 0404h на статическом индикаторе.

Содержимое файлов с расширениями ASM, LST,HEX:

$INCLUDE(E:\MK51\Compiler\ASM51\MOD\MOD51)

ORG 0

jb p3.2,$; опрос состояния кнопки SW15, если

; кнопка нажата-выполняется индикация

; числа 0404h на статическом индикаторе

Continue:

mov A,#0; установка в исходное состояние

mov DPTR,#0A004h ; статического индикатора

movx @DPTR,A;отменить гашение знакомест и

;индикацию десятичных точек

mov A,#04h ; записать в А число 04h

mov DPTR,#0A000h ; индикация числа 04h

movx @DPTR,A ; на 0 и 1 знакоместе

mov DPTR,#0B000h; индикация числа 04h

movx @DPTR,A ; на 2 и 3 знакоместе

CALL TIME; вызов подпрограммы задержки

mov A,#00001111b; гашение всех знакомест

mov DPTR,#0A004h ; статического

movx @DPTR,A; индикатора

CALL TIME ; вызов подпрограммы задержки

jmpContinue ; переход на начало программы

TIME: ; подпрограмма задержки

mov R1,#0FFh

C2: mov R2,#0FFh

djnz R2,$

djnz R1,C2

ret;выход из подпрограммы

END

521 PAGE 1

=1 1 $INCLUDE(E:\MK51\Compiler\ASM51\MOD\MOD51)

=1 2 ; REV. 1.0 MAY 23, 1984

0080 =1 3 P0 DATA 080H ;PORT 0

0081 =1 4 SP DATA 081H ;STACK POINTER

0082 =1 5 DPL DATA 082H ;DATA POINTER - LOW BYTE

0083 =1 6 DPH DATA 083H ;DATA POINTER - HIGH BYTE

0087 =1 7 PCON DATA 087H ;POWER CONTROL

0088 =1 8 TCON DATA 088H ;TIMER CONTROL

0089 =1 9 TMOD DATA 089H ;TIMER MODE

008A =1 10 TL0 DATA 08AH ;TIMER 0 - LOW BYTE

008B =1 11 TL1 DATA 08BH ;TIMER 1 - LOW BYTE

008C =1 12 TH0 DATA 08CH ;TIMER 0 - HIGH BYTE

008D =1 13 TH1 DATA 08DH ;TIMER 1 - HIGH BYTE

0090 =1 14 P1 DATA 090H ;PORT 1

0098 =1 15 SCON DATA 098H ;SERIAL PORT CONTROL

0099 =1 16 SBUF DATA 099H ;SERIAL PORT BUFFER

00A0 =1 17 P2 DATA 0A0H ;PORT 2

00A8 =1 18 IE DATA 0A8H ;INTERRUPT ENABLE

00B0 =1 19 P3 DATA 0B0H ;PORT 3

00B8 =1 20 IP DATA 0B8H ;INTERRUPT PRIORITY

00D0 =1 21 PSW DATA 0D0H ;PROGRAM STATUS WORD

00E0 =1 22 ACC DATA 0E0H ;ACCUMULATOR

00F0 =1 23 B DATA 0F0H ;MULTIPLICATION REGISTER

0088 =1 24 IT0 BIT 088H ;TCON.0 - EXT. INTERRUPT 0 TYPE

0089 =1 25 IE0 BIT 089H ;TCON.1 - EXT. INTERRUPT 0 EDGE FLAG

008A =1 26 IT1 BIT 08AH ;TCON.2 - EXT. INTERRUPT 1 TYPE

008B =1 27 IE1 BIT 08BH ;TCON.3 - EXT. INTERRUPT 1 EDGE FLAG

008C =1 28 TR0 BIT 08CH ;TCON.4 - TIMER 0 ON/OFF CONTROL

008D =1 29 TF0 BIT 08DH ;TCON.5 - TIMER 0 OVERFLOW FLAG

008E =1 30 TR1 BIT 08EH ;TCON.6 - TIMER 1 ON/OFF CONTROL

008F =1 31 TF1 BIT 08FH ;TCON.7 - TIMER 1 OVERFLOW FLAG

0098 =1 32 RI BIT 098H ;SCON.0 - RECEIVE INTERRUPT FLAG

0099 =1 33 TI BIT 099H ;SCON.1 - TRANSMIT INTERRUPT FLAG

009A =1 34 RB8 BIT 09AH ;SCON.2 - RECEIVE BIT 8

009B =1 35 TB8 BIT 09BH ;SCON.3 - TRANSMIT BIT 8

009C =1 36 REN BIT 09CH ;SCON.4 - RECEIVE ENABLE

009D =1 37 SM2 BIT 09DH ;SCON.5 - SERIAL MODE CONTROL BIT 2

009E =1 38 SM1 BIT 09EH ;SCON.6 - SERIAL MODE CONTROL BIT 1

009F =1 39 SM0 BIT 09FH ;SCON.7 - SERIAL MODE CONTROL BIT 0

00A8 =1 40 EX0 BIT 0A8H ;IE.0 - EXTERNAL INTERRUPT 0 ENABLE

00A9 =1 41 ET0 BIT 0A9H ;IE.1 - TIMER 0 INTERRUPT ENABLE

00AA =1 42 EX1 BIT 0AAH ;IE.2 - EXTERNAL INTERRUPT 1 ENABLE

00AB =1 43 ET1 BIT 0ABH ;IE.3 - TIMER 1 INTERRUPT ENABLE

00AC =1 44 ES BIT 0ACH ;IE.4 - SERIAL PORT INTERRUPT ENABLE

00AF =1 45 EA BIT 0AFH ;IE.7 - GLOBAL INTERRUPT ENABLE

00B0 =1 46 RXD BIT 0B0H ;P3.0 - SERIAL PORT RECEIVE INPUT

00B1 =1 47 TXD BIT 0B1H ;P3.1 - SERIAL PORT TRANSMIT OUTPUT

00B2 =1 48 INT0 BIT 0B2H ;P3.2 - EXTERNAL INTERRUPT 0 INPUT

00B3 =1 49 INT1 BIT 0B3H ;P3.3 - EXTERNAL INTERRUPT 1 INPUT

00B4 =1 50 T0 BIT 0B4H ;P3.4 - TIMER 0 COUNT INPUT

00B5 =1 51 T1 BIT 0B5H ;P3.5 - TIMER 1 COUNT INPUT

00B6 =1 52 WR BIT 0B6H ;P3.6 - WRITE CONTROL FOR EXT. MEMORY

00B7 =1 53 RD BIT 0B7H ;P3.7 - READ CONTROL FOR EXT. MEMORY

00B8 =1 54 PX0 BIT 0B8H ;IP.0 - EXTERNAL INTERRUPT 0 PRIORITY

00B9 =1 55 PT0 BIT 0B9H ;IP.1 - TIMER 0 PRIORITY

00BA =1 56 PX1 BIT 0BAH ;IP.2 - EXTERNAL INTERRUPT 1 PRIORITY

00BB =1 57 PT1 BIT 0BBH ;IP.3 - TIMER 1 PRIORITY

00BC =1 58 PS BIT 0BCH ;IP.4 - SERIAL PORT PRIORITY

521 PAGE 2

00D0 =1 59 P BIT 0D0H ;PSW.0 - ACCUMULATOR PARITY FLAG

00D2 =1 60 OV BIT 0D2H ;PSW.2 - OVERFLOW FLAG

00D3 =1 61 RS0 BIT 0D3H ;PSW.3 - REGISTER BANK SELECT 0

00D4 =1 62 RS1 BIT 0D4H ;PSW.4 - REGISTER BANK SELECT 1

00D5 =1 63 F0 BIT 0D5H ;PSW.5 - FLAG 0

00D6 =1 64 AC BIT 0D6H ;PSW.6 - AUXILIARY CARRY FLAG

00D7 =1 65 CY BIT 0D7H ;PSW.7 - CARRY FLAG

0000 66 ORG 0

0000 20B2FD 67 jb p3.2,$ ; опрос состояния кнопки SW15, если кнопка нажата - выполняется индикация числа 0404h на статическом индикаторе

0003 68 Continue:

0003 7400 69 mov A,#0 ; установка в исходное состояние статического индикатора

0005 90A004 70 mov DPTR,#0A004h ; отменить гашение знакомест и

0008 F0 71 movx @DPTR,A ; индикацию десятичных точек

0009 7404 72 mov A,#04h ; записать в А число 04h

000B 90A000 73 mov DPTR,#0A000h ; индикация числа 04h

000E F0 74 movx @DPTR,A ; на 0 и 1 знакоместе

000F 90B000 75 mov DPTR,#0B000h ; индикация числа 04h

0012 F0 76 movx @DPTR,A ; на 2 и 3 знакоместе

0013 120021 77 CALL TIME ; вызов подпрограммы задержки

0016 740F 78 mov A,#00001111b ; гашение всех знакомест

0018 90A004 79 mov DPTR,#0A004h ; статического

001B F0 80 movx @DPTR,A ; индикатора

001C 120021 81 CALL TIME ; вызов подпрограммы задержки

001F 80E2 82 jmpContinue ; переход на начало программы

0021 83 TIME: ; подпрограмма задержки

0021 79FF 84 mov R1,#0FFh

0023 7AFF 85 C2: mov R2,#0FFh

0025 DAFE 86 djnz R2,$

0027 D9FA 87 djnz R1,C2

0029 22 88 ret

89 END

VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND

521 PAGE 3

AC . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED

ACC. . . . . . . . . . . . . . . D ADDR 00E0H NOT USED

B. . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED

C2 . . . . . . . . . . . . . . . C ADDR 0023H

CONTINUE . . . . . . . . . . . . C ADDR 0003H

CY . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED

DPH. . . . . . . . . . . . . . . D ADDR 0083H NOT USED

DPL. . . . . . . . . . . . . . . D ADDR 0082H NOT USED

EA . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED

ES . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED

ET0. . . . . . . . . . . . . . . B ADDR 00A9H NOT USED

ET1. . . . . . . . . . . . . . . B ADDR 00ABH NOT USED

EX0. . . . . . . . . . . . . . . B ADDR 00A8H NOT USED

EX1. . . . . . . . . . . . . . . B ADDR 00AAH NOT USED

F0 . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED

IE . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED

IE0. . . . . . . . . . . . . . . B ADDR 0089H NOT USED

IE1. . . . . . . . . . . . . . . B ADDR 008BH NOT USED

INT0 . . . . . . . . . . . . . . B ADDR 00B2H NOT USED

INT1 . . . . . . . . . . . . . . B ADDR 00B3H NOT USED

IP . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED

IT0. . . . . . . . . . . . . . . B ADDR 0088H NOT USED

IT1. . . . . . . . . . . . . . . B ADDR 008AH NOT USED

OV . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED

P. . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED

P0 . . . . . . . . . . . . . . . D ADDR 0080H NOT USED

P1 . . . . . . . . . . . . . . . D ADDR 0090H NOT USED

P2 . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED

P3 . . . . . . . . . . . . . . . D ADDR 00B0H

PCON . . . . . . . . . . . . . . D ADDR 0087H NOT USED

PS . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED

PSW. . . . . . . . . . . . . . . D ADDR 00D0H NOT USED

PT0. . . . . . . . . . . . . . . B ADDR 00B9H NOT USED

PT1. . . . . . . . . . . . . . . B ADDR 00BBH NOT USED

PX0. . . . . . . . . . . . . . . B ADDR 00B8H NOT USED

PX1. . . . . . . . . . . . . . . B ADDR 00BAH NOT USED

RB8. . . . . . . . . . . . . . . B ADDR 009AH NOT USED

RD . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED

REN. . . . . . . . . . . . . . . B ADDR 009CH NOT USED

RI . . . . . . . . . . . . . . . B ADDR 0098H NOT USED

RS0. . . . . . . . . . . . . . . B ADDR 00D3H NOT USED

RS1. . . . . . . . . . . . . . . B ADDR 00D4H NOT USED

RXD. . . . . . . . . . . . . . . B ADDR 00B0H NOT USED

SBUF . . . . . . . . . . . . . . D ADDR 0099H NOT USED

SCON . . . . . . . . . . . . . . D ADDR 0098H NOT USED

SM0. . . . . . . . . . . . . . . B ADDR 009FH NOT USED

SM1. . . . . . . . . . . . . . . B ADDR 009EH NOT USED

SM2. . . . . . . . . . . . . . . B ADDR 009DH NOT USED

SP . . . . . . . . . . . . . . . D ADDR 0081H NOT USED

T0 . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED

T1 . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED

TB8. . . . . . . . . . . . . . . B ADDR 009BH NOT USED

TCON . . . . . . . . . . . . . . D ADDR 0088H NOT USED

TF0. . . . . . . . . . . . . . . B ADDR 008DH NOT USED

TF1. . . . . . . . . . . . . . . B ADDR 008FH NOT USED

TH0. . . . . . . . . . . . . . . D ADDR 008CH NOT USED

TH1. . . . . . . . . . . . . . . D ADDR 008DH NOT USED

TI . . . . . . . . . . . . . . . B ADDR 0099H NOT USED

521 PAGE 4

TIME . . . . . . . . . . . . . . C ADDR 0021H

TL0. . . . . . . . . . . . . . . D ADDR 008AH NOT USED

TL1. . . . . . . . . . . . . . . D ADDR 008BH NOT USED

TMOD . . . . . . . . . . . . . . D ADDR 0089H NOT USED

TR0. . . . . . . . . . . . . . . B ADDR 008CH NOT USED

TR1. . . . . . . . . . . . . . . B ADDR 008EH NOT USED

TXD. . . . . . . . . . . . . . .B ADDR 00B1H NOT USED

WR . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED

:1000000020B2FD740090A004F0740490A000F09061

:10001000B000F0120021740F90A004F012002180B3

:0A002000E279FF7AFFDAFED9FA2236

:00000001FF

Блок-схема к индивидуальному заданию

+ +

Программа

Реализовать программу ввода четырехзначного числа с клавиатуры. Это число индифицировать на статическом индикаторе.

Распечатка файла *.asm

$nolist

$include(C:\MK51\Compiler\ASM51\MOD\MOD51)

$list

ORG 0

movA,#0 ;отменить гашение знакомест

movDPTR,#0A004h ;и десятичные точки

movx @DPTR,A ;статического индикатора

movDPTR,#0A000h

movx @DPTR,A

inicializacija:

mov R5,#00h

mov R6,#00h

mov R7,#00h

Start:

movDPTR,#9006h;формирование сканирующего адреса 9003h

movxA,@DPTR; сканирование столбца клавиатуры (#,9,6,3)

CPLA; инрверсия содержимого аккумулятора

ANLA,#00001111b ;(0fh)выделение младшего полубайта

;данных (маскирование) - лог "И"

JZstolbec2 ;определения нажатия кнопки, если нет, на метку

CALLTIME ;устранение дребезга контактов

XRLA,#00h;упаковка кода для 1-го столбца лог "ИСКЛЮЧАЮЩЕЕ ИЛИ"

CALL CODER

jmpindikacija

stolbec2:

movDPTR,#9005h;формирование сканирующего адреса 9003h

movxA,@DPTR ;сканирование столбца клавиатуры (0,8,5,2)

CPLA;инрверсия содержимого аккумулятора

ANLA,#00001111b;(0fh)выделение младшего полубайта

;данных (маскирование) - лог "И"

JZstolbec3 ;определения нажатия кнопки, если нет, на метку

CALLTIME; устранение дребезга контактов

XRLA,#01;упаковка кода для 2-го столбца лог "ИСКЛЮЧАЮЩЕЕ ИЛИ"

CALL CODER

jmpindikacija

stolbec3:

movDPTR,#9003h;формирование сканирующего адреса 9003h

movxA,@DPTR; сканирование столбца клавиатуры (*,7,4,1)

CPLA;инрверсия содержимого аккумулятора

ANLA,#00001111b;(0fh)выделение младшего полубайта

;данных (маскирование) - лог "И"

JZStart ;определения нажатия кнопки, если нет, на метку

CALLTIME; устранение дребезга контактов

XRLA,#0fh;упаковка кода для 3-го столбца лог "ИСКЛЮЧАЮЩЕЕ ИЛИ"

CALL CODER

indikacija:

INC R5

mov R4,A

mov A,R5

xrl A,#01h

JZ M1

mov A,R5

xrl A,#02h

JZ M2

mov A,R5

xrl A,#03h

JZ M3

mov A,R5

xrl A,#04h

JZ M4

mov A,R5

xrl A,#05h

JZ inicializacija

M1:

movA,R4

movDPTR,#0B000h ;индикация результата операции

movx @DPTR,A ;на 1 и 2 знакоместе

mov R6,A

jmp Start

M2:

mov A,R4

SWAP A

ORLA,R6

movDPTR,#0B000h ;индикация результата операции

movx @DPTR,A ;на 1 и 2 знакоместе

jmp Start

M3:

mov A,R4

movDPTR,#0A000h ;индикация

movx @DPTR,A;на 3 и 4 знакоместе статического индикатора

mov R7,A

jmp Start

M4:

mov A,R4

SWAPA

ORLA,R7

movDPTR,#0A000h;индикация результата операции

movx @DPTR,A; на 3 и 4 знакоместе статического индикатора

jmpStart ;переход на начало программы

;======================================================

TIME: ;подпрограмма задержки

movR1,#5 ;загрузка константой 1 РОН R1

C4: movR2,#0ffh ;загрузка константой 144 РОН R2

C5: movR3,#0FFh ;загрузка константой FFh (255) РОН R3

C6: djnzR3,C6 ;первый цикл (метка С1)

djnzR2,C5 ;второй цикл (метка С2)

djnzR1,C4 ;третий цикл (метка С3)

ret ;вход из подпрограммы

;======================================================

CODER: ;подпрограмма перекодировки

incA ;смещение на 1

movcA,@A+PC ;загрузка в А кода символа

ret ;выход из подпрограммы

DB 2h ;<<2>>

DB 1h ;<<1>>

DB 4h ;<<4>>

DB 5h ;<<5>>

DB 7h ;<<7>>

DB 8h ;<<8>>

DB 0h ;<<->>

DB 0Ah ;<<#>>

DB 0Ch ;<<*>>

DB 0h ;<<0>>

DB 0h ;<<->>

DB 9h ;<<9>>

DB 0h ;<<->>

DB 6h ;<<6>>

DB 3h ;<<3>>

DB 0h ;<<->>

;======================================================

END

Распечатка файла *.hex

:10000000740090A004F090A000F07D007E007F00BE

:10001000909006E0F4540F600B120086640012000A

:1000200093020049909005E0F4540F600B12008693

:100030006401120093020049909003E0F4540F60B1

:10004000CF120086640F1200930DFCED6401601462

:10005000ED64026017ED6403601BED6404601EED47

:10006000640560A6EC90B000F0FE80A4ECC44E9055

:10007000B000F0809BEC90A000F0FF8093ECC44FA8

:1000800090A000F0808A79057AFF7BFFDBFEDAFA28

:10009000D9F622048322020104050708000A0C0095

:0600A00000090006030048

:00000001FF

Распечаткафайла *.lst

5LAGE 1

1 $nolist

67 $list

68

0000 69 ORG 0

0000 7400 70 mov A,#0 ;отменить гашение знакомест

0002 90A004 71 mov DPTR,#0A004h ;и десятичные точки

0005 F0 72 movx @DPTR,A ;статического индикатора

0006 90A000 73 mov DPTR,#0A000h

0009 F0 74 movx @DPTR,A

000A 75 inicializacija:

000A 7D00 76 mov R5,#00h

000C 7E00 77 mov R6,#00h

000E 7F00 78mov R7,#00h

79

0010 80 Start:

81

0010 909006 82 mov DPTR,#9006h ;формирование сканирующего адреса 9003h

0013 E0 83 movx A,@DPTR ;сканирование столбца клавиатуры (#,9,6,3)

0014 F4 84 CPL A ; инверсия содержимого аккумулятора

0015 540F 85 ANL A,#00001111b ;(0fh)выделение младшего полубайта

86 ;данных (маскирование) - лог "И"

0017 600B 87JZ stolbec2 ;определения нажатия кнопки, если нет, на метку

0019 120086 88 CALL TIME ;устранение дребезга контактов

001C 6400 89 XRL A,#00h ;упаковка кода для 1-го столбца

001E 120093 90 CALL CODER

91

0021 020049 92 jmpindikacija

93

0024 94 stolbec2:

0024 909005 95 mov DPTR,#9005h ;формирование сканирующего адреса 9003h

0027 E0 96 movx A,@DPTR ;сканирование столбца клавиатуры (0,8,5,2)

0028 F4 97 CPL A ; инверсия содержимого аккумулятора

0029 540F 98 ANL A,#00001111b ;(0fh)выделение младшего полубайта

99 ;данных (маскирование) - лог "И"

002B 600B 100 JZ stolbec3 ;определения нажатия кнопки, если нет, на метку

002D 120086 101 CALL TIME ;устранение дребезга контактов

0030 6401 102 XRL A,#01h ;упаковка кода для 2-го столбца

0032 120093 103 CALL CODER

104

0035 020049 105 jmpindikacija

0038 106 stolbec3:

0038 909003 107 mov DPTR,#9003h ;формирование сканирующего адреса 9003h

003B E0 108 movx A,@DPTR ;сканирование столбца клавиатуры (*,7,4,1)

003C F4 109 CPL A ; инверсия содержимого аккумулятора

003D 540F 110 ANL A,#00001111b ;(0fh)выделение младшего полубайта

111 ;данных (маскирование) - лог "И"

003F 60CF 112 JZ Start; определения нажатия кнопки, еслинет,на метку

0041 120086 113 CALL TIME ;устранение дребезга контактов

0044 640F 114 XRL A,#0fh ;упаковка кода для 3-го столбца

0046 120093 115 CALL CODER

116

0049 117 indikacija:

0049 0D 118 INC R5

004A FC 119 mov R4,A

120

004B ED 121 mov A,R5

5L PAGE 2

004C 6401 122 xrl A,#01h

004E 6014 123 JZ M1

124

0050 ED 125 mov A,R5

0051 6402 126 xrl A,#02h

0053 6017 127 JZ M2

128 0056 6403 130 xrl A,#03h

0058 601B 131 JZ M3

132

005A ED 133 mov A,R5

005B 6404 134 xrl A,#04h

005D 601E 135 JZ M4

136

005F ED 137 mov A,R5

0060 6405 138 xrl A,#05h

0062 60A6 139 JZ inicializacija

140

0064 141 M1:

0064 EC 142 movA,R4

0065 90B000 143 mov DPTR,#0B000h ;индикация результата операции

0068 F0 144 movx @DPTR,A ;на 1 и 2 знакоместе

0069 FE 145 mov R6,A

006A 80A4 146 jmp Start

147

006C 148 M2:

006C EC 149 mov A,R4

006D C4 150 SWAP A

006E 4E 151 ORL A,R6

006F 90B000 152 mov DPTR,#0B000h ;индикация результата операции

0072 F0 153 movx @DPTR,A ;на 1 и 2 знакоместе

0073 809B 154 jmp Start

155

0075 156 M3:

0075 EC 157 mov A,R4

0076 90A000 158 mov DPTR,#0A000h ;индикация

0079 F0 159 movx @DPTR,A ;на 3 и 4 знакоместе статического индикатора

007A FF 160 mov R7,A

007B 8093 161 jmp Start

162

007D 163 M4:

007D EC 164 mov A,R4

007E C4 165 SWAP A

007F 4F 166 ORL A,R7

0080 90A000 167 mov DPTR,#0A000h ;индикация результата операции

0083 F0 168 movx @DPTR,A ;на 3 и 4 знакоместе статического индикатора

0084 808A 169 jmpStart; переход на начало программы

170

171 ;==================================================

0086 172 TIME: ;подпрограмма задержки

0086 7905 173 mov R1,#5 ;загрузка константой 1 РОН R1

0088 7AFF 174 C4: mov R2,#0ffh ;загрузка константой 144 РОН R2

008A 7BFF 175 C5: mov R3,#0FFh ;загрузка константой FFh (255) РОН R3

008C DBFE 176 C6: djnz R3,C6 ;первый цикл (метка С1)

008E DAFA 177 djnz R2,C5 ;второй цикл (метка С2)

0090 D9F6 178 djnz R1,C4 ;третий цикл (метка С3)

0092 22 179 ret ;вход из подпрограммы

5L PAGE 3

180 ;===================================================

0093 181 CODER: ;подпрограмма перекодировки

0093 04 182 inc A ;смещение на 1

0094 83 183 movc A,@A+PC ;загрузка в А кода символа

0095 22 184 ret ;выход из подпрограммы

185

0096 02 186 DB 2h ;<<2>>

0097 01 187 DB 1h ;<<1>>

0098 04 188 DB 4h ;<<4>>

0099 05 189 DB 5h ;<<5>>

009A 07 190 DB 7h ;<<7>>

009B 08 191 DB 8h ;<<8>>

009C 00 192 DB 0h ;<<->>

009D 0A 193 DB 0Ah ;<<#>>

009E 0C 194 DB 0Ch ;<<*>>

009F 00 195 DB 0h ;<<0>>

00A0 00 196 DB 0h ;<<->>

00A1 09 197 DB 9h ;<<9>>

00A2 00 198 DB 0h ;<<->>

00A3 06 199 DB 6h ;<<6>>

00A4 03 200 DB 3h ;<<3>>

00A5 00 201 DB 0h ;<<->>

202 ;==================================================

203

204 END

VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND

5L PAGE 4

AC . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED

ACC. . . . . . . . . . . . . . . D ADDR 00E0H NOT USED

B. . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED

C4 . . . . . . . . . . . . . . . C ADDR 0088H

C5 . . . . . . . . . . . . . . . C ADDR 008AH

C6 . . . . . . . . . . . . . . . C ADDR 008CH

CODER. . . . . . . . . . . . . . C ADDR 0093H

CY . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED

DPH. . . . . . . . . . . . . . . D ADDR 0083H NOT USED

DPL. . . . . . . . . . . . . . . D ADDR 0082H NOT USED

EA . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED

ES . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED

ET0. . . . . . . . . . . . . . . B ADDR 00A9H NOT USED

ET1. . . . . . . . . . . . . . . B ADDR 00ABH NOT USED

EX0. . . . . . . . . . . . . . . B ADDR 00A8H NOT USED

EX1. . . . . . . . . . . . . . . B ADDR 00AAH NOT USED

F0 . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED

IE . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED

IE0. . . . . . . . . . . . . . . B ADDR 0089H NOT USED

IE1. . . . . . . . . . . . . . . B ADDR 008BH NOT USED

INDIKACIJA . . . . . . . . . . . C ADDR 0049H

INICIALIZACIJA . . . . . . . . . C ADDR 000AH

INT0 . . . . . . . . . . . . . . B ADDR 00B2H NOT USED

INT1 . . . . . . . . . . . . . . B ADDR 00B3H NOT USED

IP . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED

IT0. . . . . . . . . . . . . . . B ADDR 0088H NOT USED

IT1. . . . . . . . . . . . . . . B ADDR 008AH NOT USED

M1 . . . . . . . . . . . . . . . C ADDR 0064H

M2 . . . . . . . . . . . . . . . C ADDR 006CH

M3 . . . . . . . . . . . . . . . C ADDR 0075H

M4 . . . . . . . . . . . . . . . C ADDR 007DH

OV . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED

P. . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED

P0 . . . . . . . . . . . . . . . D ADDR 0080H NOT USED

P1 . . . . . . . . . . . . . . . D ADDR 0090H NOT USED

P2 . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED

P3 . . . . . . . . . . . . . . . D ADDR 00B0H NOT USED

PCON . . . . . . . . . . . . . . D ADDR 0087H NOT USED

PS . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED

PSW. . . . . . . . . . . . . . . D ADDR 00D0H NOT USED

PT0. . . . . . . . . . . . . . . B ADDR 00B9H NOT USED

PT1. . . . . . . . . . . . . . . B ADDR 00BBH NOT USED

PX0. . . . . . . . . . . . . . . B ADDR 00B8H NOT USED

PX1. . . . . . . . . . . . . . . B ADDR 00BAH NOT USED

RB8. . . . . . . . . . . . . . . B ADDR 009AH NOT USED

RD . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED

REN. . . . . . . . . . . . . . . B ADDR 009CH NOT USED

RI . . . . . . . . . . . . . . . B ADDR 0098H NOT USED

RS0. . . . . . . . . . . . . . . B ADDR 00D3H NOT USED

RS1. . . . . . . . . . . . . . . B ADDR 00D4H NOT USED

RXD. . . . . . . . . . . . . . . B ADDR 00B0H NOT USED

SBUF . . . . . . . . . . . . . . D ADDR 0099H NOT USED

SCON . . . . . . . . . . . . . . D ADDR 0098H NOT USED

SM0. . . . . . . . . . . . . . . B ADDR 009FH NOT USED

SM1. . . . . . . . . . . . . . . B ADDR 009EH NOT USED

SM2. . . . . . . . . . . . . . . B ADDR 009DH NOT USED

SP . . . . . . . . . . . . . . . D ADDR 0081H NOT USED

START. . . . . . . . . . . . . . C ADDR 0010H

5L PAGE 5

STOLBEC2 . . . . . . . . . . . . C ADDR 0024H

STOLBEC3 . . . . . . . . . . . . C ADDR 0038H

T0 . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED

T1 . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED

TB8. . . . . . . . . . . . . . . B ADDR 009BH NOT USED

TCON . . . . . . . . . . . . . . D ADDR 0088H NOT USED

TF0. . . . . . . . . . . . . . . B ADDR 008DH NOT USED

TF1. . . . . . . . . . . . . . . B ADDR 008FH NOT USED

TH0. . . . . . . . . . . . . . . D ADDR 008CH NOT USED

TH1. . . . . . . . . . . . . . . D ADDR 008DH NOT USED

TI . . . . . . . . . . . . . . . B ADDR 0099H NOT USED

TIME . . . . . . . . . . . . . . C ADDR 0086H

TL0. . . . . . . . . . . . . . . D ADDR 008AH NOT USED

TL1. . . . . . . . . . . . . . . D ADDR 008BH NOT USED

TMOD . . . . . . . . . . . . . . D ADDR 0089H NOT USED

TR0. . . . . . . . . . . . . . . B ADDR 008CH NOT USED

TR1. . . . . . . . . . . . . . . B ADDR 008EH NOT USED

TXD. . . . . . . . . . . . . . . B ADDR 00B1H NOT USED

WR . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED

Расчет констант для подпрограммы TIME:

Подпрограмма задержки в примере 1 на 12 мс:

Ntime=2call + 1mov+const *{1mov + 144 * [1mov + 255 * 2djnz + 2djnz] + 2djnz} +

Тзадержки= NtimeТмц=(5+1*{144*(1+255*2+2)+2+1})*1.628*10^-6=0,12с

Подпрограмма задержки для индивидуального задания на 1с:

Ntime=2call + 1mov+const *{1mov + 255 * [1mov + 255 * 2djnz + 2djnz] + 2djnz} + 2ret =

= 5 + const{3 + 255 513}

Тзадержки= NtimeТмц = (5+5*{255*(1+255*2+2)+2+1})*1.628*10^-6=1с

опрос дискретный датчик программа

Выводы

На лабораторной работе был изучен методы опроса клавиатуры. Были составлены программы, в результате выполнения которых были получены результаты на лабораторном стенде в соответствии с заданием.

Размещено на Allbest.ru


Подобные документы

  • Проектирование модуля ввода/вывода аналоговых, дискретных и цифровых сигналов, предназначенного для сбора данных со встроенных дискретных и аналоговых входов с последующей их передачей в сеть. Расчет временных задержек. Выбор резисторов на генераторе.

    курсовая работа [307,1 K], добавлен 25.03.2012

  • Блок-схема основной программы. Линейная и графическая схемы основной программы. Линейная и графическая схемы процедуры вычитания. Реализация ввода с клавиатуры числа, длиной не более 128 символов. Размещение числа в выделенной оперативной памяти.

    контрольная работа [73,4 K], добавлен 08.07.2012

  • Описание основных функциональных блоков системы и выбор элементной базы. Схема электрическая принципиальная. Описание программы, алгоритм функционирования. Проверка работоспособности, листинг, моделирование. Функции работы с индикатором. Опрос клавиатуры.

    курсовая работа [2,4 M], добавлен 21.03.2016

  • Эволюция компьютерной клавиатуры: рождение, телетайп, первые клавиатуры, емкостная клавиатура. Виды клавиатур: АТРасширенная, жесткоконтактная, АТХ-клавиатуры, мультимедийные и Win-клавиатуры. Эргономика клавиатур. Защита от пользователя.

    реферат [22,1 K], добавлен 09.11.2007

  • Разработка программного обеспечения для упрощения буквенно-цифрового ввода при невозможности использовать функционал стандартной буквенной клавиатуры. Классификация и установка драйверов. Выбор языка и среды программирования. Пользовательский интерфейс.

    курсовая работа [183,0 K], добавлен 12.03.2013

  • Функциональные возможности, предоставляемые Windows API. Услуги, дополнительные службы, графический и пользовательский интерфейсы устройства, библиотеки управления. Программа перевода текста в другую раскладку клавиатуры. Тестирование программы "TrueKey".

    контрольная работа [459,0 K], добавлен 13.06.2012

  • Правила создания Web-сайта по вопросам медицинского страхования: разработка главной страницы (фреймовая структура), разделов, посвященных вопросам обязательного и добровольного страхования, активной asp-страницы, содержащей опрос для посетителей.

    курсовая работа [2,3 M], добавлен 20.06.2010

  • Функции ввода с клавиатуры и вывода на экран, алгоритм вывода чисел. Генерация звуковых сигналов в ПЭВМ. Принципы работы видеосистемы: адресация и режимы работы адаптера CGA, режим работы дисплея. Таблица векторов прерываний в работе клавиатуры.

    отчет по практике [700,4 K], добавлен 23.11.2010

  • Принцип действия устройства сбора информации на базе микроконтроллера МК51: индикация, "рабочий режим" и передача данных персонального компьютера. Алгоритм начального опроса датчиков. Электрическая принципиальная схема устройства, текст программы.

    курсовая работа [102,5 K], добавлен 21.10.2012

  • Ознакомление с функциональными возможностями и структурой отладочного стенда EV8031/AVR. Изучение принципиальной схемы матричной некодирующей клавиатуры компьютеров и мобильных телефонов. Алгоритм опроса состояния клавиш и обработка кодов нажатий.

    лабораторная работа [1,1 M], добавлен 22.12.2019

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