Программа для микропроцессора Z80, обеспечивающая измерение времени дребезга контактов реле


Van Harris
Фирма Boeing Aerospace Co. (Сиэтл, шт. Вашингтон)

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

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

st-783e1.gif
Блок - схема программы измерения времени дребезжания контактов реле

ПРОГРАММА ДЛЯ МИКРОПРОЦЕССОРА Z80,
ИЗМЕРЯЮЩАЯ ВРЕМЯ ДРЕБЕЗГА КОНТАКТОВ РЕЛЕ

Строка 	Адрес  	B1  	B2  	В3  	B4
1
2 	  					;Измеритель времени дребезга контактов
3
4 						;Эта программа будет измерять время 							;дребезга контактов и время втя
5 						;гивания сердечника. Значение времени 							;дребезга будет в регистре HL,
6 						;а время втягивания в регистре DE.
7
8
9
10 						;TITLE "BOUNCE TIMER"
11 						LIST В, Х
12 						NAME BOUNCE
13 						ASEG
14 						ORG 3000H
15
16	3000 				BOUNCE:
17 	3000 	F3 			DI 			;Запрет прерываний
18
19 	3001 	21 	18 	FC 	LD 	HL,-TIMEOUT 	;Вычесть время контакта из  
								;счетчика времени дребезга
20 	3004 	01 	Е8 	03 	LD 	ВС, TIMEOUT 	;Установить счетчик времени контакта
21 	3007 	11 	FF 	FF 	LD 	DE, -1 		;Установить счетчик времени втягивания
22
23 	3000А 	ЗЕ 	07 		LD 	A, CLOSE 	;Замкнуть реле
24 	3000С 	D3 	С 		OUT 	(PORTST), А
25
26 				;Время втягивания сердечника

27
28 	3000Е 				LOOP1:
29 	3000Е 	13 				INC DE 		;Увеличить счетчик
30
31 	300F 	DB 	92 		IN 	A, (PORTIM) 	;Получить состояние реле
32 	3011 	FE 	FF 		CP	TRUE 		;Ждать первого неустойчивого 
								;замыкания контактов
33 	3013 	20 	F9 		JR	NZ, LOOP1 - $
34
35 				;Время дребезга контактов

36
37 	3015 				LOOP2:
38 	3015 	23 			INC 	HL 		;Увеличить счетчик времени дребезга
39
40 	3016 	DB 	92 		IN 	A, (PORTIM) 	;Получить состояние реле
41 	3018 	FE 	FF 		CP 	TRUE 		;Состояние реле истинно?
42 	301А 	С2 	23 	30 	JP 	NZ, RESEIC 	;Если нет, восстановить счетчик времени контакта
43
44 	301D 	0B 			DEC 	ВС 		;Уменьшить счетчик времени контакта
45 	301Е 	78 			LD 	А, В 		;Установить флажки
46 	301F 	Bl 			OR 	С
47 								;Выполнить цикл, пока счетчик време-
48 	3020 	20 	F3 		JR 	NZ, LOOP2- $ 	;ни контакта не станет = нулю
49
50 	3022 	С9 			RET 			;Возврат, значение времени дребезга 
								;в регистре HL, а времени втягивания
51 								;в регистре DE
52
53 				;Восстановление счетчика времени контакта
54
55 	3023 			     RESETC:
56 	3023 	01 	Е8 	03 	LD 	BC, TIMEOUT 	;Восстановление счетчика времени контакта
57 	3026 	00 				NOP 		;Сохранение времени выполнения цикла постоянным
58 	3027 	18 	ЕС 			JR LOOP2-$
60
61
62					;DATA
63
64 	03ЕВ 			TIMEOUT 	EQU 1000
65 	00FF 			TRUE 		EQU 0FFH
66 	0007 			CLOSE 		EQU 07H
67 	00C2 			PORTST 		EQU 0C2H
68 	0092 			PORTIM 		EQU 92H
69 	3029 				END

Число ошибок ассемблеpa = 0

Прерывания запрещены с целью сохранения точности измерений в каждом цикле. Цикл 1 (счетчик времени втягивания) состоит из процедур наращивания содержимого счетчика и проверки. При каждом прохождении цикла проверяется состояние порта DI на наличие первого неустойчивого замыкания контактов реле. Когда такой эффект обнаружен, программа измеряет время втягивания сердечника и хранит это значение в регистре DE. Однако истинное время втягивания вычисляется умножением содержимого регистра DE на 36 и делением результата на тактовую частоту микропроцессора Z80.

Цикл 2 (счетчик времени дребезга контактов реле) представляет собой подпрограмму наращивания содержимого счетчика и проверки, а также содержит дополнительную процедуру,

обеспечивающую работу счетчика времени контакта и восстановления. При каждом прохождении цикла увеличивается содержимое регистра HL и проверяется состояние порта DI. Если контакты реле разомкнуты, то в счетчик времени контакта загружается заранее определенное значение этого времени. В случае замыкания контактов реле значение счетчика времени контакта уменьшается до тех пор, пока не достигнет нуля. Когда содержимое регистра счетчика времени контакта равно нулю, программа измеряет время дребезга контактов, и это значение запоминается в регистре HL. Однако для того чтобы получить истинное время дребезга контактов, в регистр HL вначале записывают дополнительный двоичный код значения времени контакта, затем его содержимое умножается на 60, и результат делится на тактовую частоту микропроцессора Z80.