Счётчик нажатий |
Главная / ЭКВМ / Программы для ЭКВМ / Работа с оборудованием |
Нередко встречается задача подсчёта количества дискретных сигналов от механических, оптических или иных датчиков. Это может использоваться для учёта каких-либо объектов или процессов в системах автоматики, подсчёта числа посетителей, количества распадов и т.п. Конечно, можно изготовить специализированное изделие, оснащённое дискретным входом, индикатором, контроллером, блоком питания etc; можно воспользоваться и существующими промышленными контроллерами. Но нетрудно выполнить такое устройство и на базе ЭКВМ. Программа "Счётчик"
Компактный язык ЭКВМ позволяет разместить программу в 37 байтах. Файл schetchik.mkp (37 байт, КС 19319/157)
Исходный текст для кросс-компилятораФайл schetchik.mkl .CHARSET 1251 ; Файл schetchik.mkl ; Подсчёт количества сигналов по линии BUSY SCH .EQU 20 ; .ORG 0 CX P M SCH ; счётчик 1 PP M 9148 ; Сброс всех прерываний PP M 9130 ; Разрешение прерываний PP M 9090 ; Режим работы параллельного порта - статический .NUML BUSY ENT 1 PP M 9131 ; Прерывание 1, приоритет 1, вектор BUSY PP M 9156 ; Разрешить аппаратное прерывание сигнала BUSY 0 ENT ENT ENT ; Очистка стека A1: GOTO A1 ; Бесконечный цикл BUSY: P RM SCH 1 + P M SCH K SCR PP RTN .END Программа "Счётчик нажатий (ЭКР)"
Дополним программу блоком, который подавляет дребезг контактов, проверяя надёжность срабатывания повторным опросом через определённые промежутки времени. Параметры количества и периодичности опросов можно настраивать, изменяя константы в тексте программы. Кроме того, добавим в строку комментариев подсказку. Для изменения текста достаточно откорректировать строку программы. Несмотря на использование прерываний, алгоритм устранения дребезга при помощи таймера и вывод подсказки, программа имеет размер 82 байта (из них 16 байт - текстовая строка). Файл schetchik1.mkp (82 байта, КС 13187/237)
Исходный текст для кросс-компилятораФайл schetchik1.mkl .CHARSET 1251 ; Файл schetchik1.mkl ; Подсчёт количества сигналов по линии BUSY ; Сигнал от кнопки, возможен дребезг контактов ; Информация в строке комментариев SCH .EQU 20 ; Регистр для счёта .ORG 0 CX P M SCH ; счётчик 1 PP M 9148 ; Сброс всех прерываний PP M 9130 ; Разрешение прерываний PP M 9090 ; Режим работы параллельного порта - статический .NUML BUSY ENT 1 PP M 9131 ; Прерывание 1, приоритет 1, вектор BUSY PP M 9156 ; Разрешить аппаратное прерывание сигнала BUSY .NUML STR PP M 9026 ; Строка комментариев 0 ENT ENT ENT ; Очистка стека K SCR A1: GOTO A1 ; Бесконечный цикл BUSY: 5 M0 ; Если сигнал от кнопки - устранение дребезга повторным считыванием BUSY1: PP RM 9092 8 K AND F X=0 BUSYE ; Проверка BUSY 2 PP M 9050 ; Задержка 0,02 с BUSY2: PP RM 9050 F X=0 BUSY2 FL0 BUSY1 0 ENT ENT ; Очистка стека P RM SCH 1 + P M SCH K SCR BUSYE: PP RTN STR: .TEXT "Счётчик нажатий\0" .END Программа "Счётчик нажатий (ГРФ)"
Программа, использующая функции графического экрана, занимает 136 байт. Файл schetchik3.mkp (136 байт, КС 28224/152)
Исходный текст для кросс-компилятораФайл schetchik3.mkl .CHARSET 1251 ; Файл schetchik3.mkl ; Подсчёт количества сигналов по линии BUSY ; Сигнал от кнопки, возможен дребезг контактов ; Для вывода информации используется грфический экран ; Регистры памяти SCH .EQU 20 ; Регистр для счёта POSX .EQU 21 ; Горизонтальная позиция числа FSCH .EQU 22 ; Признак нажатия .ORG 0 CX P M SCH ; счётчик 1 PP M 9148 ; Сброс всех прерываний PP M 9130 ; Разрешение прерываний PP M 9090 ; Режим работы параллельного порта - статический .NUMT BUSY ENT 1 PP M 9131 ; Прерывание 1, приоритет 1, вектор BUSY PP M 9156 ; Разрешить аппаратное прерывание сигнала BUSY 60 P M POSX A0: ; Вывести результат на графический экран 2 PP M 9010 ; Инициализация графического экрана 20 ENT 24 PP M 9000 ; Позиция 24,20 .NUM STR PP M 9021 ; Вывод строки 1 PP M 9003 ; Шрифт 1 32 P RM POSX PP M 9000 ; Позиция POSX,32 P RM SCH PP M 9023 ; Вывод числа 0 P M FSCH ; Очистить признак K GRPH A1: P RM FSCH F X=0 A0 ; Если установлен - перерисовать GOTO A1 ; Бесконечный цикл TPOSX: .DB 60, 56, 51, 46, 42, 37, 33, 28, 24 STR: .TEXT "Счётчик нажатий\0" ;======================= Прерывание последовательного порта BUSY: 5 M0 ; Если сигнал от кнопки - устранение дребезга повторным считыванием BUSY1: PP RM 9092 8 K AND F X=0 BUSYE ; Проверка BUSY 2 PP M 9050 ; Задержка 0,02 с BUSY2: PP RM 9050 F X=0 BUSY2 FL0 BUSY1 P RM SCH 1 + P M SCH F LG K INT .NUMT TPOSX ; Таблица позиций числа в зависимости от числа десятичных разрядов + K PRGM P M POSX ; Позиция по X 1 P M FSCH ; Признак BUSYE: PP RTN .END Программа "Счётчик нажатий (ГИ)"
Программа с использованием графического интерфейса занимает 165 байт. Файл schetchik2.mkp (165 байт, КС 22298/140)
Исходный текст для кросс-компилятораФайл schetchik2.mkl .CHARSET 1251 ; Файл schetchik2.mkl ; Подсчёт количества сигналов по линии BUSY ; Сигнал от кнопки, возможен дребезг контактов ; Для вывода информации используется интерфейс пользователя ; Команды экранных форм: TAB .EQU 96 LDX .EQU 104 LDY .EQU 105 TYPE .EQU 101 ATYPE .EQU 78 LDADR .EQU 77 SQU .EQU 89 FRAME .EQU 91 DRAWP .EQU 84 DRAWB .EQU 86 TXTP .EQU 83 TXTB .EQU 85 TXTK .EQU 87 PREXP .EQU 92 PRFORM .EQU 93 PRHEX .EQU 94 MCALL .EQU 102 RETUM .EQU 103 JNEZ .EQU 1 JM .EQU 56 END .EQU 255 ; Регистры памяти SCH .EQU 20 ; Регистр для счёта POSX .EQU 21 ; Горизонтальная позиция числа FSCH .EQU 22 ; Признак нажатия .ORG 0 CX P M SCH ; счётчик 2 PP M 9010 ; инициализация графического экрана 1 PP M 9148 ; Сброс всех прерываний PP M 9130 ; Разрешение прерываний PP M 9090 ; Режим работы параллельного порта - статический PP M 9200 ; 1 - разрешение интерфейса .NUMT TFORM PP M 9201 ; главная таблица форм TFORM CX PP M 9202 ; стартовое меню - 0 PP M 9203 ; активный элемент - 0 .NUMT BUSY ENT 1 PP M 9131 ; Прерывание 1, приоритет 1, вектор BUSY PP M 9156 ; Разрешить аппаратное прерывание сигнала BUSY 60 P M POSX A0: 64 PP M 9208 ; Нарисовать форму 0 P M FSCH ; Очистить признак A1: P RM FSCH F X=0 A0 ; Если установлен - перерисовать GOTO A1 ; Бесконечный цикл ;======================= Прерывание последовательного порта BUSY: 5 M0 ; Если сигнал от кнопки - устранение дребезга повторным считыванием BUSY1: PP RM 9092 8 K AND P X=0 BUSYE ; Проверка BUSY 2 PP M 9050 ; Задержка 0,02 с BUSY2: PP RM 9050 F X=0 BUSY2 FL0 BUSY1 P RM SCH 1 + P M SCH F LG K INT .NUMT TPOSX ; Таблица позиций числа в зависимости от числа десятичных разрядов + K PRGM P M POSX ; Позиция по X 1 P M FSCH ; Признак BUSYE: PP RTN ;====================== TPOSX: .DB 60, 56, 51, 46, 42, 37, 33, 28, 24 STR: .TEXT "Счётчик нажатий\0" ;====================== Главная таблица форм TFORM: .DB 0 .DA F0 .DB END ;====================== Форма F0 .BASE F0: .DB 0 ;максимальный номер элемента .DBB F0DE, F0PI, F0PO, F0PL, F0PR, F0RI, F0KM F0DE: .DB 0 ;таблица флагов действий F0PI: F0PO: F0PL: F0PR: .DB 0,0 F0KM: .DBB F0KM0 F0RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 24, 20 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA STR .DB TYPE, 1 ; шрифт 1 .DB TAB, 60, 32 ; позиция .DB LDX ; Позиция по X из POSX .DA POSX .DB PREXP, 16 ; Вывод результата SCH .DA SCH F0KM0: .DB END .END Файлы программ доступны на странице "Работа с оборудованием" |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |