Помощь в написании студенческих работ
Антистрессовый сервис

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

Лабораторная работаПомощь в написанииУзнать стоимостьмоей работы

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

Опрос дискретных датчиков программным методом (реферат, курсовая, диплом, контрольная)

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

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

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

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

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

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

В составе УОС имеется матричная 3×4 клавиатура 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 — Адреса опроса столбцов клавиатуры.

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

Адрес опроса.

(SW3, SW6, SW9, SW12).

9006h.

(SW4, SW7, SW10, SW13).

9005h.

(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 алгоритма, желательно содержимое аккумулятора, А инвертировать, тогда скан — коды нажатых кнопок клавиатуры:

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

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

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

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

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

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

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

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

h — код.

Обозначение.

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

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

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

«2».

«1».

«4».

«5».

«7».

«8».

;

АА.

«#».

СС.

«*».

«0».

А.

;

В.

«9».

С.

;

D.

«6».

Е.

«3».

F.

;

Ход работы.

1. Выполнить задание. Составить блок-схему Задание После нажатия кнопки SW15индицировать «пульсирующее» число 0404h на статическом индикаторе.

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

$INCLUDE (E:MK51CompilerASM51MODMOD51).

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,#1111b; гашение всех знакомест.

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:MK51CompilerASM51MODMOD51).

=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.

008 °F =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.

009 °F =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 знакоместе.

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

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

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

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

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

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

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

001 °F 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.

:100 000 0020B2FD740090A004F0740490A000F09061.

:1 000 1000B000F0120021740F90A004F012002180B3.

:0A002000E279FF7AFFDAFED9FA2236.

:01FF.

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

+ +.

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

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

$nolist.

$include (C:MK51CompilerASM51MODMOD51).

$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,#1111b ;(0fh)выделение младшего полубайта.

;данных (маскирование) — лог «И» .

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

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

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

CALL CODER.

jmpindikacija.

stolbec2:

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

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

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

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

;данных (маскирование) — лог «И» .

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

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

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

CALL CODER.

jmpindikacija.

stolbec3:

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

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

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

ANLA,#1111b;(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.

:1 000 000 074 0090A004F090A000F07D007E007F00BE.

:1 000 100 090 9006E0F4540F600B120086640012000A.

:100 020 009 302 004 989 9525E0F4540F600B12008693.

:10 003 000 640 112 009 120 298 565 6323E0F4540F60B1.

:1 000 4000CF120086640F1200930DFCED6401601462.

:1 000 5000ED64026017ED6403601BED6404601EED47.

:1 000 600 064 0560A6EC90B000F0FE80A4ECC44E9055.

:1 000 7000B000F0809BEC90A000F0FF8093ECC44FA8.

:100 080 0090A000F0808A79057AFF7BFFDBFEDAFA28.

:1 000 9000D9F622048322020104050708000A0C0095.

:0600A00000090006030048.

:01FF.

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

5LAGE 1.

1 $nolist.

67 $list.

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.

0010 80 Start:

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

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

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

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

86 ;данных (маскирование) — лог «И» .

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

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

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

001E 120 093 90 CALL CODER.

0021 20 049 92 jmpindikacija.

0024 94 stolbec2:

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

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

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

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

99 ;данных (маскирование) — лог «И» .

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

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

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

0032 120 093 103 CALL CODER.

0035 20 049 105 jmpindikacija.

0038 106 stolbec3:

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

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

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

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

111 ;данных (маскирование) — лог «И» .

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

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

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

0046 120 093 115 CALL CODER.

0049 117 indikacija:

0049 0D 118 INC R5.

004A FC 119 mov R4, A.

004B ED 121 mov A, R5.

5L PAGE 2.

004C 6401 122 xrl A,#01h.

004E 6014 123 JZ M1.

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.

005A ED 133 mov A, R5.

005B 6404 134 xrl A,#04h.

005D 601E 135 JZ M4.

005 °F ED 137 mov A, R5.

0060 6405 138 xrl A,#05h.

0062 60A6 139 JZ inicializacija.

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.

006C 148 M2:

006C EC 149 mov A, R4.

006D C4 150 SWAP A.

006E 4E 151 ORL A, R6.

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

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

0073 809B 154 jmp Start.

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.

007D 163 M4:

007D EC 164 mov A, R4.

007E C4 165 SWAP A.

007 °F 4 °F 166 ORL A, R7.

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

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

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

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 ;выход из подпрограммы.

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 ;<<*>>

009 °F 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 ;==================================================.

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

Показать весь текст
Заполнить форму текущей работой