ANALOG call START; Начинаем передачу
; Байт адреса ---------------------
movlw b’01011000’; Адрес ведомого, режим — ведущий-передатчик
movwf DATA_OUT; Копируем в промежуточный регистр
call I2C_OUT; Передаем
movf ERR,f; Проверяем ка наличие ошибок
btfsc STATUS,Z; ЕСЛИ ноль, TO продолжаем
goto ANALOG; ИНАЧЕ пробуем снова
; Управляющий байт 1 -----------
movlw b’00000000’; Нет сброса, активный режим, канал 1
movwf DATA_OUT; Копируем в промежуточный регистр
call I2C_OUT; Передаем
movf ERR, f; Проверяем на наличие ошибок
btfsc STATUS,Z; ЕСЛИ ноль, TO продолжаем
goto ANALOG; ИНАЧЕ пробуем снова
; Байт данных 1
movf 20h,w; Считываем значение канала 0 из памяти
movwf DATA_OUT; Копируем в промежуточный регистр
call I2C_OUT; Передаем
movf ERR,f; Проверяем на наличие ошибок
btfsc STATUS,Z; ЕСЛИ ноль, TO продолжаем
goto ANALOG; ИНАЧЕ пробуем снова
; Управляющий байт 2
moviw b’00000001’; Нет сброса, активный режим, канал 1
movwf DATA_OUT; Копируем в промежуточный регистр
call I2C_OUT; Передаем
movf ERR,f; Проверяем на наличие ошибок
btfsc STATUS,Z; ЕСЛИ ноль, TO продолжаем
goto ANALOG; ИНАЧЕ пробуем снова
; Байт данных 2
movf 21h,w; Считываем значение канала 1 из памяти
movwf DATA_OUT; Копируем в промежуточный регистр
call I2C_OUT; Передаем
movf ERR,f; Проверяем на наличие ошибок
bcfsc STATUS,Z; ЕСЛИ ноль, TO продолжаем
goto ANALOG; ИНАЧЕ пробуем скова
call STOP
Любые варианты модулей SSP микроконтроллеров PIC поддерживают работу в режиме I2С. Ранние версии модулей позволяли использовать микроконтроллер только в качестве ведомого устройства, тогда как
На Рис. 12.18 приведена структурная схема модуля SSP, сконфигурированного для работы в качестве ведомого I2С-устройства. Для подключения к двунаправленной линии данных SDA используется вывод RC4, а к линии SCL — вывод RC3. При работе модуля в режиме I2С оба вывода должны быть сконфигурированы как входы.
Собственно ввод и вывод данных производится посредством сдвигового регистра SSPSR, который используется и для приема данных, и для их передачи.
Рис. 12.18.
Передача
При посылке ведомым устройством данных удаленному ведущему, который при этом находится в режиме ведущий-приемник, байт данных, помещенный в буферный регистр SSPBUF, автоматически пересылается в регистр SSPSR (если тот пуст), из которого затем побитно выдается на линию SDA. Если регистр SSPSR полон, то данные на линию не выдаются, и устанавливается флаг конфликта записи.
Прием