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

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

Используя функцию Запрет, можно получить Формулу триггера:
Y = X1 && !X2

Где X1 входной сигнал, X2 – запрещающий сигнал. Если X2=1, Y=0; X2=0, Y=X1. Таким образом, формула Y=X1&& !X2 реализует элемент повторения. Для того чтобы запомнить единичный входной сигнал и хранить его в отсутствие сигнала, необходимо применить обратную связь.

Формула триггера с использованием обратной связи:
Y = (X1 || Y) && !X2 = !(!(X1 || Y) || X2) = !(!X1 && !Y) && !X2

Полученная функция может быть реализована на логических элементах 2ИЛИ-НЕ или 2И-НЕ.

Ниже представлена детальная интерактивная компьютерная модель двух RS-триггеров собранных на базовых логических элементах. Кликайте мышью по переключателям.

 
 

 

Где вход X1=S вход установки (set), а X2=R вход сброса (reset) триггера. Y – прямой выход, Y – инверсный выход.

Схема на логических элементах 2И-НЕ имеет инверсные входы.

Компьютерная модель двух RS-триггеров собранных на логических элементах 2ИЛИ-НЕ и 2И-НЕ реализована на JavaScript. Листинг программы приведен ниже. Вы можете его скопировать в html файл и запустить у себя в браузере.

<html><head></head><body>
<table class="shema">
<tr>
<td><img src="/X1.0.gif" onclick="swclick(1)" id=switch1 /></td>
<td id=rightLamp><img src="/X3.1.gif"  onclick="swclick(3)" id=switch3 /></td>
</tr>
<tr>
<td id=leftLamp><img src="/X2.0.gif" onclick="swclick(2)" id=switch2 /></td>
<td><img src="/X4.1.gif" onclick="swclick(4)" id=switch4 /></td>
</tr>
</table>

<script>
// Конструктор переключателя
function sw(i)
{
this.X=0;
this.F=function()
	{
	this.X=!this.X
	}
}

// Конструктор 2ИЛИ-НЕ
function orNot(i)
{
this.X1=0;
this.X2=0;
this.Y=0;
this.F=function()
	{
	this.Y=!(this.X1||this.X2)
	}
}

// Конструктор 2И-НЕ
function andNot(i)
{
this.X1=0;
this.X2=0;
this.Y=0;
this.F=function()
	{
	this.Y=!(this.X1&&this.X2)
	}
}

// Создание элементов, установка начальных условий
for (n=1; n<5; n++)
{
	sw[n] = new sw(n);
	orNot[n] = new orNot(n);
	andNot[n] = new andNot(n);
}
sw[3].X=1;
sw[4].X=1;

//Схема соединений
function concept()
{
orNot[1].X1=sw[1].X;
orNot[2].X2=sw[2].X;
orNot[1].X2=orNot[2].Y;
orNot[2].X1=orNot[1].Y;
andNot[1].X1=sw[3].X;
andNot[2].X2=sw[4].X;
andNot[1].X2=andNot[2].Y;
andNot[2].X1=andNot[1].Y;
}

//Вычисление передаточных функций
function counter()
{
orNot[1].F();
orNot[2].F();
andNot[1].F();
andNot[2].F();
}

//Отображение на схеме
function draw()
{
//Переключатели
for (n=1; n<5; n++)
	{
	if (sw[n].X)
		{eval('switch'+n+'.src="X'+n+'.1.gif"');}
	else
		{eval('switch'+n+'.src="X'+n+'.0.gif"');}
	}
//Лампы
if (orNot[2].Y)
	{leftLamp.style.background="red";}
else
	{leftLamp.style.background="white";}
if (andNot[1].Y)
	{rightLamp.style.background="red";}
else
	{rightLamp.style.background="white";}
}

// Переключатели onClick()
function swclick(i)
{
sw[i].F();
concept();
counter();
concept();
counter();
draw();
}
</script>
</body></html>