Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[5]

10-разрядная АДРЕСАЦИЯ

При использовании 10-разрядной адресации используется код устройства 1111ХХХ для первых семи бит первого байта, который не воздействует на элементы с обычной 7-разрядной адресацией, поэтому элементы с 7-разрядными и 10-разрядными адресами могут быть объединены в одну шину.

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

Функционирование элементов с 10-разрядной адресацией аналогично обычным - устройство, получив код в первом байте адреса, проверяет код второго байта адреса, при совпадении которого с собственным выдает подтверждение и выполняет соответствующие действия до появления состояния STOP.

Соответствующие диаграммы показаны на рисунках 23-27.

Рисунок 23. Передача мастер-передатчик - подчиненный-примник с 10-

разрядным адресом

(WRITE)(REftD)

Рисунок 24. Передача мастер-приемник - подчиненный-передатчик с 10-

разрядным адресом


Рисунок 25. Комбинированный формат. Мастер адресует подчиненного с 10-разрядным адресом, затем передает данные к нему и читает данные из него.

[WRITE)

Рисунок 26. Комбинированный формат. Мастер передает данные двум подчиненным с 10-разрядными адресами

[WRITE)

Рисунок 27. Комбинированный формат. Мастер передает данный двум подчиненным - одному с 7-разрядным адресом, и одному с 10-разрядным адресом


ПРИМЕР РАБОТЫ С I2C УСТРОЙСТВОМ

Наиболее просто поэкспериментировать с l2C устройством можно подключив его к принтерному порту персонального компьютера. Для этого необходимо всего один маломощный транзистор и пара резисторов (Рисунок 28).

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

program I2C LPT;

{ Copyright Dmitry Orlov, 2:461/27 }

uses CRT; var

LPT1: Word; A: Word;

Mode: (mError, mRead, mWrite);

FileName: String[80];

Buf : Array[0..2047] of byte;

F: File;

procedure Pause; assembler; asm

push ax @@0:

jmp @@1 @@1:

in al, dx

pop ax end;

procedure Start; assembler; asm

mov dx, lpt1

mov al, 00000110b {Vcc = 1, SCL = 1, SDA = 1}

out dx, al call Pause

mov al, 00000111b {Vcc = 1, SCL = 1, SDA = 0}

out dx, al call Pause

mov al, 00000011b {Vcc = 1, SCL = 0, SDA = 0}

out dx, al call Pause end;

procedure Stop; assembler; asm

mov dx, lpt1

mov al, 00000111b {Vcc = 1, SCL = 1, SDA = 0}

out dx, al call Pause

mov al, 00000110b {Vcc = 1, SCL = 1, SDA = 1} out dx, al call Pause

function PutByte(B: Byte): boolean; assembler; asm

mov dx, lpt1



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7]