Опрос дискретных датчиков программным методом
Опрос состояния дискретных датчиков. Циклический опрос состояния выходного сигнала дискретного датчика. Распределение кодов нажатых кнопок в таблице клавиатуры. Программа ввода четырехзначного числа с клавиатуры. Расчет констант для подпрограммы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 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