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

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    426,89 Кб
  • Опубликовано:
    2013-01-26
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-ряд 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

-


Ход работы

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

Задание

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


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

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

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

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

; числа 0404h на статическом индикаторе:A,#0; установка в исходное состояниеDPTR,#0A004h ; статического индикатора@DPTR,A;отменить гашение знакомест и

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

mov A,#04h ; записать в А число 04hDPTR,#0A000h ; индикация числа 04h@DPTR,A ; на 0 и 1 знакоместеDPTR,#0B000h; индикация числа 04h@DPTR,A ; на 2 и 3 знакоместеTIME; вызов подпрограммы задержкиA,#00001111b; гашение всех знакоместDPTR,#0A004h ; статического@DPTR,A; индикатораTIME ; вызов подпрограммы задержки; переход на начало программы: ; подпрограмма задержкиR1,#0FFh

C2: mov R2,#0FFhR2,$

djnz R1,C2;выход из подпрограммы

END

521 PAGE 1

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

=1 2 ; REV. 1.0 MAY 23, 1984

=1 3 P0 DATA 080H ;PORT 0

=1 4 SP DATA 081H ;STACK POINTER

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

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

=1 7 PCON DATA 087H ;POWER CONTROL

=1 8 TCON DATA 088H ;TIMER CONTROL

=1 9 TMOD DATA 089H ;TIMER MODE

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

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

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

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

=1 14 P1 DATA 090H ;PORT 1

=1 15 SCON DATA 098H ;SERIAL PORT CONTROL

=1 16 SBUF DATA 099H ;SERIAL PORT BUFFER

A0 =1 17 P2 DATA 0A0H ;PORT 2

A8 =1 18 IE DATA 0A8H ;INTERRUPT ENABLE

B0 =1 19 P3 DATA 0B0H ;PORT 3

B8 =1 20 IP DATA 0B8H ;INTERRUPT PRIORITY

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

E0 =1 22 ACC DATA 0E0H ;ACCUMULATOR

F0 =1 23 B DATA 0F0H ;MULTIPLICATION REGISTER

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PAGE 2

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

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

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

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

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

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

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

0000 66 ORG 0

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

68 Continue:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

79FF 84 mov R1,#0FFh

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

DAFE 86 djnz R2,$

D9FA 87 djnz R1,C2

22 88 ret

END1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND

PAGE 3. . . . . . . . . . . . . . . B ADDR 00D6H NOT USED. . . . . . . . . . . . . . . D ADDR 00E0H NOT USED. . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED. . . . . . . . . . . . . . . C ADDR 0023H. . . . . . . . . . . . C ADDR 0003H. . . . . . . . . . . . . . . B ADDR 00D7H NOT USED. . . . . . . . . . . . . . . D ADDR 0083H NOT USED. . . . . . . . . . . . . . . D ADDR 0082H NOT USED. . . . . . . . . . . . . . . B ADDR 00AFH NOT USED. . . . . . . . . . . . . . . B ADDR 00ACH NOT USED. . . . . . . . . . . . . . . B ADDR 00A9H NOT USED. . . . . . . . . . . . . . . B ADDR 00ABH NOT USED. . . . . . . . . . . . . . . B ADDR 00A8H NOT USED. . . . . . . . . . . . . . . B ADDR 00AAH NOT USED. . . . . . . . . . . . . . . B ADDR 00D5H NOT USED. . . . . . . . . . . . . . . D ADDR 00A8H NOT USED. . . . . . . . . . . . . . . B ADDR 0089H NOT USED. . . . . . . . . . . . . . . B ADDR 008BH NOT USED. . . . . . . . . . . . . . B ADDR 00B2H NOT USED. . . . . . . . . . . . . . B ADDR 00B3H NOT USED. . . . . . . . . . . . . . . D ADDR 00B8H NOT USED. . . . . . . . . . . . . . . B ADDR 0088H NOT USED. . . . . . . . . . . . . . . B ADDR 008AH NOT USED. . . . . . . . . . . . . . . B ADDR 00D2H NOT USED. . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED. . . . . . . . . . . . . . . D ADDR 0080H NOT USED. . . . . . . . . . . . . . . D ADDR 0090H NOT USED. . . . . . . . . . . . . . . D ADDR 00A0H NOT USED. . . . . . . . . . . . . . . D ADDR 00B0H. . . . . . . . . . . . . . D ADDR 0087H NOT USED. . . . . . . . . . . . . . . B ADDR 00BCH NOT USED. . . . . . . . . . . . . . . D ADDR 00D0H NOT USED. . . . . . . . . . . . . . . B ADDR 00B9H NOT USED. . . . . . . . . . . . . . . B ADDR 00BBH NOT USED. . . . . . . . . . . . . . . B ADDR 00B8H NOT USED. . . . . . . . . . . . . . . B ADDR 00BAH NOT USED. . . . . . . . . . . . . . . B ADDR 009AH NOT USED. . . . . . . . . . . . . . . B ADDR 00B7H NOT USED. . . . . . . . . . . . . . . B ADDR 009CH NOT USED. . . . . . . . . . . . . . . B ADDR 0098H NOT USED. . . . . . . . . . . . . . . B ADDR 00D3H NOT USED. . . . . . . . . . . . . . . B ADDR 00D4H NOT USED. . . . . . . . . . . . . . . B ADDR 00B0H NOT USED. . . . . . . . . . . . . . D ADDR 0099H NOT USED. . . . . . . . . . . . . . D ADDR 0098H NOT USED. . . . . . . . . . . . . . . B ADDR 009FH NOT USED. . . . . . . . . . . . . . . B ADDR 009EH NOT USED. . . . . . . . . . . . . . . B ADDR 009DH NOT USED. . . . . . . . . . . . . . . D ADDR 0081H NOT USED. . . . . . . . . . . . . . . B ADDR 00B4H NOT USED. . . . . . . . . . . . . . . B ADDR 00B5H NOT USED. . . . . . . . . . . . . . . B ADDR 009BH NOT USED. . . . . . . . . . . . . . D ADDR 0088H NOT USED. . . . . . . . . . . . . . . B ADDR 008DH NOT USED. . . . . . . . . . . . . . . B ADDR 008FH NOT USED. . . . . . . . . . . . . . . D ADDR 008CH NOT USED. . . . . . . . . . . . . . . D ADDR 008DH NOT USED. . . . . . . . . . . . . . . B ADDR 0099H NOT USED

PAGE 4. . . . . . . . . . . . . . C ADDR 0021H. . . . . . . . . . . . . . . D ADDR 008AH NOT USED. . . . . . . . . . . . . . . D ADDR 008BH NOT USED. . . . . . . . . . . . . . D ADDR 0089H NOT USED. . . . . . . . . . . . . . . B ADDR 008CH NOT USED. . . . . . . . . . . . . . . B ADDR 008EH NOT USED. . . . . . . . . . . . . . .B ADDR 00B1H NOT USED. . . . . . . . . . . . . . . B ADDR 00B6H NOT USED

:1000000020B2FD740090A004F0740490A000F09061

:10001000B000F0120021740F90A004F012002180B3

:0A002000E279FF7AFFDAFED9FA2236

:00000001FF

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














+                                                                        +













Программа

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

$nolist

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

$list0,#0 ;отменить гашение знакомест,#0A004h ;и десятичные точки@DPTR,A ;статического индикатора

movDPTR,#0A000h@DPTR,A:R5,#00hR6,#00hR7,#00h

Start:,#9006h;формирование сканирующего адреса 9003h,@DPTR; сканирование столбца клавиатуры (#,9,6,3); инрверсия содержимого аккумулятора,#00001111b ;(0fh)выделение младшего полубайта

;данных (маскирование) - лог "И";определения нажатия кнопки, если нет, на метку;устранение дребезга контактов,#00h;упаковка кода для 1-го столбца лог "ИСКЛЮЧАЮЩЕЕ ИЛИ"CODER:,#9005h;формирование сканирующего адреса 9003h,@DPTR ;сканирование столбца клавиатуры (0,8,5,2);инрверсия содержимого аккумулятора,#00001111b;(0fh)выделение младшего полубайта

;данных (маскирование) - лог "И";определения нажатия кнопки, если нет, на метку; устранение дребезга контактов,#01;упаковка кода для 2-го столбца лог "ИСКЛЮЧАЮЩЕЕ ИЛИ"CODER:,#9003h;формирование сканирующего адреса 9003h,@DPTR; сканирование столбца клавиатуры (*,7,4,1);инрверсия содержимого аккумулятора,#00001111b;(0fh)выделение младшего полубайта

;данных (маскирование) - лог "И";определения нажатия кнопки, если нет, на метку; устранение дребезга контактов,#0fh;упаковка кода для 3-го столбца лог "ИСКЛЮЧАЮЩЕЕ ИЛИ"

CALL CODER:R5R4,AA,R5A,#01hM1A,R5A,#02hM2A,R5A,#03hM3A,R5A,#04hM4A,R5A,#05hinicializacija

M1:,R4,#0B000h ;индикация результата операции@DPTR,A ;на 1 и 2 знакоместе

mov R6,AStart:A,R4A,R6

movDPTR,#0B000h ;индикация результата операции@DPTR,A ;на 1 и 2 знакоместе

jmp Start:A,R4

movDPTR,#0A000h ;индикация@DPTR,A;на 3 и 4 знакоместе статического индикатора

mov R7,AStart:A,R4,R7

movDPTR,#0A000h;индикация результата операции@DPTR,A; на 3 и 4 знакоместе статического индикатора;переход на начало программы

;======================================================: ;подпрограмма задержки,#5 ;загрузка константой 1 РОН R1: movR2,#0ffh ;загрузка константой 144 РОН R2: movR3,#0FFh ;загрузка константой FFh (255) РОН R3: djnzR3,C6 ;первый цикл (метка С1),C5 ;второй цикл (метка С2),C4 ;третий цикл (метка С3);вход из подпрограммы

;======================================================: ;подпрограмма перекодировки;смещение на 1,@A+PC ;загрузка в А кода символа;выход из подпрограммы2h ;<<2>>

DB 1h ;<<1>>4h ;<<4>>5h ;<<5>>7h ;<<7>>8h ;<<8>>0h ;<<->>0Ah ;<<#>>0Ch ;<<*>>0h ;<<0>>0h ;<<->>9h ;<<9>>0h ;<<->>6h ;<<6>>3h ;<<3>>0h ;<<->>

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

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

:10000000740090A004F090A000F07D007E007F00BE

:10001000909006E0F4540F600B120086640012000A

:1000200093020049909005E0F4540F600B12008693

:100030006401120093020049909003E0F4540F60B1

:10004000CF120086640F1200930DFCED6401601462

:10005000ED64026017ED6403601BED6404601EED47

:10006000640560A6EC90B000F0FE80A4ECC44E9055

:10007000B000F0809BEC90A000F0FF8093ECC44FA8

:1000800090A000F0808A79057AFF7BFFDBFEDAFA28

:10009000D9F622048322020104050708000A0C0095

:0600A00000090006030048

:00000001FF

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

LAGE 1

$nolist

$list

0000 69 ORG 0

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

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

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

0006 90A000 73 mov DPTR,#0A000h

F0 74 movx @DPTR,A

A 75 inicializacija:

A 7D00 76 mov R5,#00h

C 7E00 77 mov R6,#00h

E 7F00 78mov R7,#00h

79

80 Start:

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

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

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

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

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

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

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

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

001E 120093 90 CALL CODER

020049 92 jmpindikacija

94 stolbec2:

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

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

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

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

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

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

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

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

120093 103 CALL CODER

020049 105 jmpindikacija

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

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

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

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

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

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

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

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

0046 120093 115 CALL CODER

117 indikacija:

0D 118 INC R5

A FC 119 mov R4,A

B ED 121 mov A,R5

L PAGE 2

C 6401 122 xrl A,#01h

E 6014 123 JZ M1

ED 125 mov A,R5

6402 126 xrl A,#02h

6017 127 JZ M2

0056 6403 130 xrl A,#03h

601B 131 JZ M3

A ED 133 mov A,R5

B 6404 134 xrl A,#04h

D 601E 135 JZ M4

F ED 137 mov A,R5

6405 138 xrl A,#05h

60A6 139 JZ inicializacija

141 M1:

EC 142 movA,R4

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

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

0069 FE 145 mov R6,A

A 80A4 146 jmp Start

C 148 M2:

C EC 149 mov A,R4

D C4 150 SWAP A

E 4E 151 ORL A,R6

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

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

0073 809B 154 jmp Start

156 M3:

EC 157 mov A,R4

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

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

007A FF 160 mov R7,A

B 8093 161 jmp Start

D 163 M4:

D EC 164 mov A,R4

E C4 165 SWAP A

F 4F 166 ORL A,R7

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

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

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

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

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

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

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

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

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

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

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

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

L PAGE 3

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

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

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

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

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

02 186 DB 2h ;<<2>>

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

05 189 DB 5h ;<<5>>

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

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

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

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

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

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

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

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

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

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

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

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

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

END1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND

L PAGE 4. . . . . . . . . . . . . . . B ADDR 00D6H NOT USED. . . . . . . . . . . . . . . D ADDR 00E0H NOT USED. . . . . . . . . . . . . . . . D ADDR 00F0H NOT USED. . . . . . . . . . . . . . . C ADDR 0088H. . . . . . . . . . . . . . . C ADDR 008AH. . . . . . . . . . . . . . . C ADDR 008CH. . . . . . . . . . . . . . C ADDR 0093H. . . . . . . . . . . . . . . B ADDR 00D7H NOT USED. . . . . . . . . . . . . . . D ADDR 0083H NOT USED. . . . . . . . . . . . . . . D ADDR 0082H NOT USED. . . . . . . . . . . . . . . B ADDR 00AFH NOT USED. . . . . . . . . . . . . . . B ADDR 00ACH NOT USED. . . . . . . . . . . . . . . B ADDR 00A9H NOT USED. . . . . . . . . . . . . . . B ADDR 00ABH NOT USED. . . . . . . . . . . . . . . B ADDR 00A8H NOT USED. . . . . . . . . . . . . . . B ADDR 00AAH NOT USED. . . . . . . . . . . . . . . B ADDR 00D5H NOT USED. . . . . . . . . . . . . . . D ADDR 00A8H NOT USED. . . . . . . . . . . . . . . B ADDR 0089H NOT USED. . . . . . . . . . . . . . . B ADDR 008BH NOT USED. . . . . . . . . . . C ADDR 0049H. . . . . . . . . C ADDR 000AH. . . . . . . . . . . . . . B ADDR 00B2H NOT USED. . . . . . . . . . . . . . B ADDR 00B3H NOT USED. . . . . . . . . . . . . . . D ADDR 00B8H NOT USED. . . . . . . . . . . . . . . B ADDR 0088H NOT USED. . . . . . . . . . . . . . . B ADDR 008AH NOT USED. . . . . . . . . . . . . . . C ADDR 0064H. . . . . . . . . . . . . . . C ADDR 006CH. . . . . . . . . . . . . . . C ADDR 0075H. . . . . . . . . . . . . . . C ADDR 007DH. . . . . . . . . . . . . . . B ADDR 00D2H NOT USED. . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED. . . . . . . . . . . . . . . D ADDR 0080H NOT USED. . . . . . . . . . . . . . . D ADDR 0090H NOT USED. . . . . . . . . . . . . . . D ADDR 00A0H NOT USED. . . . . . . . . . . . . . . D ADDR 00B0H NOT USED. . . . . . . . . . . . . . D ADDR 0087H NOT USED. . . . . . . . . . . . . . . B ADDR 00BCH NOT USED. . . . . . . . . . . . . . . D ADDR 00D0H NOT USED. . . . . . . . . . . . . . . B ADDR 00B9H NOT USED. . . . . . . . . . . . . . . B ADDR 00BBH NOT USED. . . . . . . . . . . . . . . B ADDR 00B8H NOT USED. . . . . . . . . . . . . . . B ADDR 00BAH NOT USED. . . . . . . . . . . . . . . B ADDR 009AH NOT USED. . . . . . . . . . . . . . . B ADDR 00B7H NOT USED. . . . . . . . . . . . . . . B ADDR 009CH NOT USED. . . . . . . . . . . . . . . B ADDR 0098H NOT USED. . . . . . . . . . . . . . . B ADDR 00D3H NOT USED. . . . . . . . . . . . . . . B ADDR 00D4H NOT USED. . . . . . . . . . . . . . . B ADDR 00B0H NOT USED. . . . . . . . . . . . . . D ADDR 0099H NOT USED. . . . . . . . . . . . . . D ADDR 0098H NOT USED. . . . . . . . . . . . . . . B ADDR 009FH NOT USED. . . . . . . . . . . . . . . B ADDR 009EH NOT USED. . . . . . . . . . . . . . . B ADDR 009DH NOT USED. . . . . . . . . . . . . . . D ADDR 0081H NOT USED. . . . . . . . . . . . . . C ADDR 0010H

L PAGE 5. . . . . . . . . . . . C ADDR 0024H. . . . . . . . . . . . C ADDR 0038H. . . . . . . . . . . . . . . B ADDR 00B4H NOT USED. . . . . . . . . . . . . . . B ADDR 00B5H NOT USED. . . . . . . . . . . . . . . B ADDR 009BH NOT USED. . . . . . . . . . . . . . D ADDR 0088H NOT USED. . . . . . . . . . . . . . . B ADDR 008DH NOT USED. . . . . . . . . . . . . . . B ADDR 008FH NOT USED. . . . . . . . . . . . . . . D ADDR 008CH NOT USED. . . . . . . . . . . . . . . D ADDR 008DH NOT USED. . . . . . . . . . . . . . . B ADDR 0099H NOT USED. . . . . . . . . . . . . . C ADDR 0086H. . . . . . . . . . . . . . . D ADDR 008AH NOT USED. . . . . . . . . . . . . . . D ADDR 008BH NOT USED. . . . . . . . . . . . . . D ADDR 0089H NOT USED. . . . . . . . . . . . . . . B ADDR 008CH NOT USED. . . . . . . . . . . . . . . B ADDR 008EH NOT USED. . . . . . . . . . . . . . . B ADDR 00B1H NOT USED. . . . . . . . . . . . . . . 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с

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

Выводы

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


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!