Раздел: Документация
0 ... 89 90 91 92 93 94 95 ... 105 а Старт Адресные разряды Ведомого R/W Адресные разряды Разряды данных б) Старт Сторт A S Остолоные биты данных Стоп Адресные разряды Ведомого J Адресные разряды R/W Адресные разряды Ведомого Разряды данных Рис. 7.16. Временные диаграммы работы MK41T56: а - запись; б - чтение Схема соединения МК41Т56 с экспериментальной платой параллельного порта показана на рис. 7.17. Контакт D1 управляет линией SDA, данные с которой считываются при помощи контакта S1. Контакт С1 управляет линией SCL. Текст программы 4156.PAS на ТР6 Program IIC timer, («Программа управления хронометром MK41T56 *) («Компьютер выступает в качестве ведущего устройства, другие микросхемы ведомые *) («Соединение с экспериментальной платой параллельного порта: D1 = SDA, С1 = SCK, S1 = SDA «) Функции битов регистра управления определены следующим образом: бит 7управление выходом, 0 или 1 бит 6бит проверки частоты (если 1, проверка частоты) бит 5знаковый бит биты 4-0не используются Данные можно считать или записать в микросхему по шине PC. Операция записи устанавливает значения времени и даты. Операция считывания извлекает из нее данные. После генерации условия «СТАРТ» в память микросхемы заносятся 8 бит данных из ведущего передатчика. Адрес ведомой микросхемы имеет следующий формат (старший разряд слева): 1, 1,0, 1, 0, 0, 0, R/W. Эти биты составляют постоянный адрес хронометра на шине. Бит R/W определяет тип операции - запись (R/W = 0) или чтение (R/W = 1). Когда адрес ведомой микросхемы передан, в нее посылается адрес, определяющий конкретную ячейку памяти. Он записывается в регистр адреса и принимает значения от 0 до 64. Затем в режиме записи передаются 8 бит данных, которые и помещаются в указанную ячейку памяти. После этого в режиме чтения снова генерируется условие «СТАРТ», потом передаются биты адреса ведомой микросхемы, где бит R/W установлен в 1. И наконец, считываются данные, хранящиеся в указанной ячейке памяти. Временные диаграммы работы ИС представлены на рис. 7.16. + 5В Контакты на экспериментальное плате параллельного порто 32,768кГи Интерфейс 12С Рие. 7.17. Экспериментальная схема МК41Т56 («Условия шины 12С: SCL=1, SDA=1: SCL=1. SDA=1 - О-SCL=1. SDA=0 - 1: допустимые данные: изменение данных- uses crt,dos, шина не занята условие "СТАРТ" условие СТОП" данные постоянны, когда SCL=1 когда SCL=0 *) Ш c:\ioexp\tplib1\pas} var i, il: integer, second,minute,hour,day,date,month, year, control word•byte; (*TP6 программная библиотека PC № 1, преобразование в двоично-десятичный формат *) Function BCD(data.byte)byte, («Преобразование двоичного кода в двоично-десятичный.*) begin BCD:=round((data div 10)*16+10<frac(data/10)); end; («ТР6 программная библиотека PC № 2, запись данных в линию SDA.*) Procedure SDA(data.byte); («Помещение данных в линию SDA.*) begin wr11e data port(P add ress,1-d ata), end; (*TP6 программная библиотека PC № 3, управление линией SCL,*) Procedure SCL(data-byte); (•Помещение данных в линию SCL *) begin write cont rol port(P add ress,1-data); end; (*TP6 программная библиотека I2C № 4, инициализация шины PC.*) Procedure INIT; (•Генерация условия инициализации, SDA=SCL=1.*) begin SDA(1); SCL(1); delay(100); end; (*TP6 программная библиотека 1гС № 5, генерация условия "СТАРТ",*) Procedure START; (•Генерация условия "СТАРТ".*) begin SDA(1); SCL(1); SDA(O); SCL(O); end; (»TP6 программная библиотека PC № 6, генерация тактовых импульсов для подтверждения.*) Procedure АСК; (•Генерация подтверждения и соответствующих тактовых импульсов.*) begin SCL(1); SCL(O); end; (*TP6 программная библиотека PC № 7, передача данных в шину PC *) Procedure TRANSMlT(data:byte); (•Передача данных через шину.*) var 1:byte; begin for i:=8 downto 1 do begin SDA(round(data and bit weight(i)/bit weight(i))); («Помещение данных в линию SDA, когда SCL=0.«) SCL(1); («SCL=0 - 1.«) SCL(O); («SCL=1 - 0.«) end; SDA(1); (*SDA становится равным 1 *) АСК;(«Генерация тактовых импульсов подтверждения.*) end; (*ТР6 программная библиотека PC № 8, прием данных от шины РС.«) Function receive(stop flag:boolean);byte; («Прием данных через шину.*) var i,dummy:byte; begin dummy;=0; for i:=8 downto 1 do begin SCL(1);(*SCL становится равным 1.*) delay(1); 0 ... 89 90 91 92 93 94 95 ... 105
|