Переключатель гирлянд


Главная / ЭКВМ / Программы для ЭКВМ / Работа с оборудованием

Описание

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

Переключатель гирлянд предназначен для подключения к клавишным ЭВМ, имеющим параллельный порт с восьмиразрядной шиной данных, например к ЭКВМ "Электроника МК-152".

Количество светодиодов в каждом из каналов гирлянды может составлять от одного до четырёх.

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

Внимание! При сборке устройств, коммутирующих опасное для жизни напряжение переменного тока 220 В, необходимо предусмотреть защиту от случайного прикосновения к токоведущим частям и выполнять требования техники безопасности при проведении работ. По способу защиты человека от поражения электрическим током устройство должно соответствовать требованиям классов I или II по ГОСТ 12.2.007.0-75.

Программа могжет быть использована для управления не только гирляндами, но и любыми другими исполняющими устройствами или приёмниками энергии.

Программа "Переключатель гирлянд"

Программа размещается в памяти программ ЭКВМ с нулевой страницы.

Программа состоит из двух частей - собственно управляющей программы (97 байт с нулевого адреса) и одной или нескольких таблиц, размещенных в памяти программ ЭКВМ и описывающих временные диаграммы работы переключателя гирлянд. Каждая таблица содержит диаграмму работы и количество её повторов. Таблицы распологаются в памяти ЭКВМ постранично - с адресов, кратных 100 начиная с 100. Всего в память может быть загружено от 1 до 99 таблиц.

Запуск программы производится нажатием клавиш "В/О", "С/П". Останов выполнения программы - нажатием "С/П".


Файл girljanda-1.mkp версия 1.0 от 05.03.2011

  0 1 2 3 4 5 6 7 8 9
Программа (КС 10975/165)
000 Cx П A 2 F 10x П 9 1 PP П 90 90 PP П
010 90 93 Cx PP П 90 91 ИП A ИП 9 - F x=0
020 27 8 6 PP П 90 26 С/П Cx П A ИП A
030 ИП 9 + П A ИП 9 F x2 - F x≠0 27 ИП A K ИПРГ
040 F x≠0 16 П 0 K NOT F x≠0 16 ПП 52 F L0 46
050 БП 29 ИП A 1 + PP П 90 42 PP ИП 90
060 44 ИП 9 × PP ИП 90 44 + F x≠0 85 PP П
070 90 50 PP ИП 90 44 PP П 90 91 PP ИП 90
080 50 F x=0 78 БП 58 В/О 8Dh A5h E2h 20h
090 E2h A0h A1h ABh A8h E6h 00h      
Диаграмма 1 (КС 18995/5)
100 05h 00h 0Fh 01h 00h 0Fh 02h 00h 0Fh 04h
110 00h 0Fh 08h 00h 0Fh 10h 00h 0Fh 20h 00h
120 0Fh 40h 00h 0Fh 80h 00h 00h      
Диаграмма 2 (КС 18995/5)
200 05h 00h 0Fh 80h 00h 0Fh 40h 00h 0Fh 20h
210 00h 0Fh 10h 00h 0Fh 08h 00h 0Fh 04h 00h
220 0Fh 02h 00h 0Fh 01h 00h 00h      
Диаграмма 3 (КС 19295/245)
300 0Ah 00h 14h 05h 00h 14h 0Ah 00h 14h 14h
310 00h 14h 28h 00h 14h 50h 00h 14h A0h 00h
320 14h 41h 00h 14h 82h 00h 00h      
Диаграмма 4 (КС 19295/245)
400 0Ah 00h 14h 82h 00h 14h 41h 00h 14h A0h
410 00h 14h 50h 00h 14h 28h 00h 14h 14h 00h
420 14h 0Ah 00h 14h 05h 00h 00h      
Конец списка диаграмм (КС 25245/255)
500 00h                  

Структура программы

Адрес Выполняемые действия
00-04 Занесение начальных значений 0 в RA (адрес таблицы) и 100 в R9 (константа)
05-15 Установка статического режима работы параллельного порта, тип операции - запись. Сброс всех линий
16-20 Сравнение текущего адреса таблицы со 100, если не равен, то переход на 27
21-26 Вывод сообщения "Нет таблиц" и останов программы.
27-28 Обнуление адреса текущей таблицы в RA
29-32 Увеличение адреса текущей таблицы в RA на 100
33-37 Сравнение адреса текущей таблицы с 10000. Если выход за границу памяти программ - переход к адресу 27.
38-39 Извлечение из памяти программ байта по адресу текущей страницы - количество повторов
40-41 Сравнение количества повторов с нулём, если ноль - переход на адрес 16 по признаку окончания списка таблиц
42-45 Запись количества повторов в R0, сравнение его с числом 0FFh при помощи логической операции NOT. Переход на адрес 16, если байт равен 0FFh - это, вероятно, пустая страница
46-47 Обращение к подпрограмме однократного выполнения диаграммы по адресу 52
48-49 Цикл по R0, переход на адрес 46
50-51 Переход на адрес 29
52-57 Начало подпрограммы однократного выполнения диаграммы. Извлечение из RA адреса текущей таблицы, увеличение его на единицу для пропуска количества повторов и запись адреса начала диаграммы в индексный регистр памяти программ
58-66 Считывание двух байтов из таблицы, вычисление длительности очередного шага в сотых долях секунд
67-68 Если длительность равна 0 - конец диаграммы, переход на адрес 85
69-71 Запись длительности очередного шага в таймер 0
72-77 Считывание одного байта из таблицы и передача его на шину данных параллельного порта
78-82 Ожидание окончания работы таймера 0 - эта задержка формирует длительность очередного шага
83-84 Безусловный переход на адрес 58
85 Возврат из подпрограммы
86-96 Текстовая строка "Нет таблиц"

Каждая таблица должна записываться с начала страницы. В кросс-компиляторе для этого может использоваться псевдооператор ".PAGE".

Таблица диаграммы работы состоит из строк по три байта. В первых двух байтах хранится продолжительность очередного шага диаграммы. В первом - целые секунды, во втором - сотые доли. В третьем байте находятся данные для передачи в порт. Если продолжительность равна нулю, этот байт не считывается, поэтому последняя строка каждой таблицы может состоять только из двух байт.

Из-за особенностей программы каждая таблица должна занимать не более одной страницы - то есть ста байт. Это 32 шага, с учётом байтов количества повторов и окончания таблицы.


Исходный текст для кросс-компилятора

Файл girljanda-1.mkl

; Программа "Переключатель гирлянд" 
; Управление линиями параллельного порта
; в соответствии с заданными диаграммами работы
; любое количество диаграмм загружается в виде таблиц 
; начиная со страницы 1
; структура таблицы - в комментариях

; версия 1.0 от 05.03.2011

; Используемые регистры
; R0 - цикл 
; R9=100 (константа)
; RA - начало очередной диаграммы


.CHARSET 1251		; Кодировка текстовых строк по cp1251 (Win)
.ORG 0 	
	CX
	MA		; В RA число 0
	2
	F 10^X
	M9		; Константа 100
	1
	PP M 9090	; Статический режим работы параллельного порта
	PP M 9093	; Тип операции - запись
	CX
	PP M 9091	; Сброс линий порта

A0:	RMA
	RM9 
	- 
	F X=0 A1	; Если адрес диаграммы не равен 100 - перейти
			; Если адрес окончания списка равен 100
	.NUML TXT1	; то вывести строку TXT1 "Нет диаграмм" (Она на этой же странице)
	PP M 9026	; Вывод в строку комментариев
	R/S		; С/П

A1:	CX		
	MA		; В RA число 0
			; Это на сто меньше, чем адрес начала первой диаграммы
A2:	RMA
	RM9 +		; Увеличить адрес текущей диаграммы на 100
	MA
	RM9 FX^2	; =10000
	-
	F X!=0 A1	; Если В RA 10000 - перейти на начало цикла диаграмм, 
			; так как последней нет - вся память занята
	RMA		; В RA - адрес текущей диаграммы
	K PRGM		; Считать содержимое памяти программ 
	F X!=0 A0	; Если 0 - перейти к повтору полного цикла диаграмм
	M0		; Запомнить число в R0 для организации очередного цикла
	K NOT		; Операция логической инверсии байта NOT(255) = 0
	F X!=0 A0	; Если 255 (0FFh) - вероятна пустая страница, перейти к повтору цикла диаграмм
A3:	GSB UPR		; Обращение к подпрограмме UPR
	FL0 A3		; Цикл повтора текущей диаграммы по содержимому R0
	GOTO A2		; Бесконечный цикл по списку диаграмм

;=============== "UPR" - подпрограмма однократного вывода диаграммы в параллельный порт
; Адрес начала диаграммы в RA, первый байт диаграммы - количество повторов

UPR:	RMA 		; Пропустить первый (т.е. нулевой) байт страницы
	1
	+
	PP M 9042	; Индексный регистр памяти программ 
	
UPR1:	PP RM 9044	; Считывание байта из памяти данных (с автоинкрементом)
	RM9 *		; x 100
	PP RM 9044	; Считывание байта из памяти данных (с автоинкрементом)
	+		; В RX - длительность шага диаграммы в сотых долях секунды
	F X!=0	UPR_E	; Длительность шага равна нулю - выход
	PP M 9050	; Загрузить интервал в таймер 0	
	PP RM 9044	; Считывание байта состояния линий порта
	PP M 9091	; Запись в порт

UPR2:	PP RM 9050	; Проверить состояние таймера 0
	F X=0 UPR2	; Повторять, пока не обнулится
	GOTO UPR1 	; Перейти к следующей строке таблицы
UPR_E:	RTN		; В/О

;================= Текстовые строки

TXT1:	.TEXT "Нет таблиц\0"

;========================= Диаграмма 1
; Первый байт - количество повторов от 1 до 254 включительно
; байты 1 и 2 каждой группы - длительность шага в секундах и сотых долях, 
; байт 3 в каждой группе - активные линии порта на данном шаге
; Линии: D0-младший бит (01h), D7 - старший бит (80h)
; Для этой программы не более 32 групп - диаграмма должна умещаться на одной странице

.PAGE			; Начало новой страницы (псевдооператор)
	.DB	5	; Количество повторов диаграммы 1
	.DB	0,15,1		; 0,15 c - D0
	.DB	0,15,2		; 0,15 c - D1 
	.DB	0,15,4		; 0,15 c - D2
	.DB	0,15,8		; 0,15 c - D3
	.DB	0,15,16		; 0,15 c - D4
	.DB	0,15,32		; 0,15 c - D5
	.DB	0,15,64		; 0,15 c - D6
	.DB	0,15,128	; 0,15 c - D7
	.DB	0,0	; Конец диаграммы 1

;========================= Диаграмма 2
.PAGE
	.DB	5	;  Количество повторов диаграммы 2
	.DB	0,15,128	; 0,15 c - D7
	.DB	0,15,64		; 0,15 c - D6
	.DB	0,15,32		; 0,15 c - D5
	.DB	0,15,16		; 0,15 c - D4
	.DB	0,15,8		; 0,15 c - D3
	.DB	0,15,4		; 0,15 c - D2
	.DB	0,15,2		; 0,15 c - D1
	.DB	0,15,1		; 0,15 c - D0
	.DB	0,0	; Конец диаграммы 2

;========================= Диаграмма 3
.PAGE
	.DB	10	;  Количество повторов диаграммы 3
	.DB	0,20,5		; 0,2 c - D0, D2
	.DB	0,20,0Ah	; 0,2 c - D1, D3
	.DB	0,20,14h	; 0,2 c - D2, D4
	.DB	0,20,28h	; 0,2 c - D3, D5
	.DB	0,20,50h	; 0,2 c - D4, D6
	.DB	0,20,0A0h	; 0,2 c - D5, D7
	.DB	0,20,41h	; 0,2 c - D6, D0
	.DB	0,20,82h	; 0,2 c - D7, D1
	.DB	0,0	; Конец диаграммы 3

;========================= Диаграмма 4
.PAGE
	.DB	10	;  Количество повторов диаграммы 4
	.DB	0,20,82h	; 0,2 c - D7, D1
	.DB	0,20,41h	; 0,2 c - D6, D0
	.DB	0,20,0A0h	; 0,2 c - D5, D7
	.DB	0,20,50h	; 0,2 c - D4, D6
	.DB	0,20,28h	; 0,2 c - D3, D5
	.DB	0,20,14h	; 0,2 c - D2, D4
	.DB	0,20,0Ah	; 0,2 c - D1, D3
	.DB	0,20,5		; 0,2 c - D0, D2
	.DB	0,0	; Конец диаграммы 4

;========================= Окончание
.PAGE
	.DB	0	; Конец списка диаграмм
.END 


НПП "СЕМИКО" (383) 271-01-25 (многоканальный)