Предыдущая Следующая

уже с признаком чтения, дожидается подтверждения, а затем принимает передаваемый ведомым устройством байт данных для чтения. По завершении приема байта данных, ведущее устройство выдает на шину бит неподтверждения (NOT АСК) и завершает всю процедуру чтения выдачей условия STOP.

Приведенная в файле main.c программа обмена с 24LC64 через интерфейс 12С работает следующим образом:

• При нажатии на кнопку «О», производится выбор байта данных для записи в I2C EEPROM. Символ, соответствующий ASCII-коду выбранного байта данных, индицируется по адресу О ОЗУ ЖКИ.

• При нажатии на кнопку «1», производится перебор адресов ячеек для записи данных в I2C EEPROM, но не подряд, а с некоторым интервалом (в программе он равен 50). Выбранное значение адреса ячейки, в десятичном виде, отображается на ЖКИ с адреса 5 ОЗУ ЖКИ.

• При нажатии на кнопку «2», производится запись выбранного байта данных в EEPROM по выбранному ранее адресу. Вызов функции записи сопровождается короткой вспышкой светодиода «1».

• При нажатии на кнопку «3», производится чтение байта данных из 12С EEPROM по выбранному ранее адресу. Прочитанный байт данных (его значение воспринимается как ASCII-код) индицируется в виде символа по адресу 64 ОЗУ ЖКИ. Возврат управления к функции чтения сопровождается короткой вспышкой светодиода «1».

Настройка модуля I2C LPC2129 производится путем вызова функции I2Cinit(). Запись байта данных в I2C EEPROM по произвольному адресу осуществляется путем вызова функции wr_byte24LC64(data_I2C, addr_I2C). Эта функция не удерживает управление во время записи, а только инициирует процесс записи, запуская процедуру START 12С. Все дальнейшие необходимые для обмена по шине действия логики I2C LPC2129 осуществляются с помощью функции-обработчика прерывания от I2C — I2CInterrupt(), расположенной в файле hardware.c. Эта функция обрабатывает несколько из 25 возможных активных состояний интерфейса 12С, с учетом того, что в функции wr_byte24LC64(data_I2C, addr_I2C) был установлен программный признак записи (переменной wrjrd было присвоено значение 0). Помимо этого, в функции I2CInterrupt() используется переменная NUM_byte, текущее значение которой задает порядковый номер переданного по шине байта (старший и младший байты адреса ячейки, байт передаваемых данных). Таким образом, функция wr_byte24LC64(data_I2C, addr_I2C) «не знает», завершил ли модуль 12С запись в j ведомое устройство. Проверка готовности ведомого устройства к следующей записи в программе не производится (при желании, она может быть реализована средствами модуля I2C LPC2129). Обработка активных состояний интерфейса 12С производится функцией I2CInterrupt(), с помощью вложенных друг в друга программных конструкций, именуемых в языке С «переключателями».


Предыдущая Следующая



НА ГЛАВНУЮ | ЧТО ТАКОЕ PIC ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz