Было время, когда карточки, дающие право на ведение разговоров с телефонов-автоматов, были многоразовыми. Их берегли и, как само собой разумеющееся, принимали к обмену в почтовых отделениях связи. Однако с введением в оборот одноразовых отношение к телефонным карточкам изменилось. Над ними перестали дрожать. После того как современная карточка, вобравшая ряд достижений компьютерной технологии, «закончится», ее отправляют в мусорную корзину.
Рачительные и бережливые, остановитесь! Использованная карточка может служить в качестве надежного электронного ключа, пароля для ваших программ или выполнять другие, не менее важные функции в разнообразных самодельных электро- и радиоустройствах.
У микросхемы телефонной карточки, получившей хождение, например, на территории Республики Беларусь, восемь контактных выводов (рис.а). Но реально используются только пять. Однако истинному радиолюбителю-программисту можно обойтись даже четырьмя, исключив как нижний левый NC, дважды продублированный справа, так и левый верхний +5V (питание) контакты. Центральный и самый большой по площади вывод — GND («земля»).
К персональному компьютеру такую микросхему легко подключить через параллельный порт LPT. Правда, с помощью несложного переходника (рис. б).
Осуществив подачу соответствующих данных в порт 378h (базовый адрес LPT1), можно прочитать записанную в МС и нужную Вам для дальнейшей работы информацию. Это делается через бит 7 порта 379h. Причем практический интерес составляют только первые четыре байта, так как остальные содержат ООН.
Первый прочитанный байт должен быть равен 7Bh. Три следующих различны для разных карточек.
Program TeleCard; uses crt;
Const
Copyright’ (С) Филютич Алексей, 1997;
Var
i,j, dat:byte;
Data.array (0..3) of byte;
(_____ )
Function ReadCardrbyte;
var
S;byte;
begin
asm
mov dx,379h
in al,dx
mov cl,7
shr al,cl
mov S,al
end;
ReadCard;=S;
end;
(_________)
Procedure WriteData(A:byte);assembler;
asm
mov al,A
mov dx,378h
out dx,al
end;
(_______)
Procedure Next; (Увеличить адрес)
begin
Delay(1);
WriteData(0);
WriteData(2);
WriteData(0);
end;
(____________)
Procedure Reset;
(Сброс микросхемы в исходное состояние)
var
A:byte;
begin
WriteData(0); (Сброс)
WriteData(1);
WriteData(3);
WriteData(1);
WriteData(0);
for a:=0 to 9 do
Next;
WriteData(0); (Сброс)
WrlteData(1);
WriteData(3);
WriteData(1);
WriteData(0);
end;
(_________)
Function Dec2Hex(value: byte): string;
Function c2h(value:byte):char;
begin
case value of
0..9 : d2h:=chr(value+S30);
10.. 15 : d2h:=chr(value+S37);
end;
end;
begin
Dec2Hex:=d2h(value div S10) + d2h(value and SOF);
end;
(===============================================)
Begin
Reset;
(Читаем первые четыре байта)
for i:=0 to 3 do begin
dat:=0;
for j:=0 to 7 do begin
dat:=dat+(ReadCard shl (7-j));
Next;
end;
Data(i):=dat;
end;
Reset;
if Data(0)<>S7B then begin
writeln(«Карточка повреждена»);
Halt;
end;
write («Данные из карточки:»);
for i:=0 to 3 do begin
write(Dec2Hex(Data(i)):3);
end;
writeln;
End.
Отмечая это, нелишне, видимо, подчеркнуть: записанная в электронной памяти МС и представляющая интерес для организации дальнейшей работы с микросхемой информация постоянна. То есть она, оставаясь неизменной, абсолютно не зависит от оставшегося неиспользованным количества минут. А значит, является залогом безупречного функционирования разработанной мною программы, воспользоваться которой и предлагаю единомышленникам — читателям журнала «Моделист-конструктор».
А.ФИЛЮТИЧ