EXTRA_MILE; Считываем три байта, хранящиеся по адресам 00:01:02h
call START; Начинаем с формирования состояния СТАРТ
;1-й управляющий байт — адрес микросхемы ------------
movlw b’10100000’; Адрес ведомого, ведущий-передатчик
movwf DATA_OUT; Копируем в буферный регистр
call I2C_OUT; Передаем
movf ERR, f; Проверяем наличие подтверждения
btfsc STATUS,Z; ЕСЛИ ноль, ТО продолжаем
goto EXTRA_MILE; ИНАЧЕ пробуем снова
; Адрес 00 --------------
clrf DATA_OUT; Формируем адрес
call I2C_OUT; Передаем
; 2-й управляющий байт для инициирования операции чтения --------
call START
movlw b’10100001’; Адрес ведомого, ведущий-приемник
movwf DATA_OUT; Копируем в буферный регистр
call 2C_OUT; Передаем
; Теперь считываем три байта данных
clrf ACKNO; Разрешаем формирование подтверждения
call I2C_IN; Считываем старший байт из ячейки с адресом 00h
movf DATA_IN,w; Берем байт
movwf MSB; и сохраняем его в памяти
call I2C_IN; Считываем средний байт из ячейки с адресом 01h
movf DATA_IN,w; Берем байт
movwf NSB; и сохраняем его в памяти
incf ACKNO,f; Выставить NACK
call I2C_IN; Считываем старший байт из ячейки с адресом 02h
movf DATA_IN,w; Берем байт
movwf LSB; и сохраняем его в памяти
call STOP; Завершаем операцию чтения
; Теперь инкрементируем 3-байтное число
incf LSB,f; Прибавляем единицу
btfss STATUS,Z; Проверяем на ноль
goto PUT_BACK; ЕСЛИ не 0, ТО продолжаем
incfsz NSB,f; Инкрементируем средний байт
goto PUT_BACK; ЕСЛИ не 0, ТО продолжаем
incf MSB,f
PUT_BACK call START ; Начинаем операцию записи
movlw b’10100000’; Пакет записи
movwf DATA_OUT
call I2C_OUT
clrf DATA_OUT; Адрес 00h
call I2C_OUT
movf MSB,w; Берем новое значение старшего байта
movwf DATA_OUT
call I2C_DUT
movf NSB,w; Берем новое значение среднего байта
movwf DATA_OUT
call I2C_OUT
movf LSB,w; Берем новое значение младшего байта
movwf DATA_OUT
call I2C_OUT
call STOP
Взяв за основу базовый принцип асинхронной передачи данных и дополнив его некоторыми принципами, лежащими в основе синхронного протокола I2С, мы сможем организовать асинхронную передачу данных в обоих направлениях по одной-единственной линии связи (в полудуплексном режиме). Одним из примеров такого скрещивания является интерфейс 1-WireTM[166], характеристики которого показаны на Рис. 12.28.
В схеме, приведенной на Рис. 12.28,
Рис. 12.28.
Микросхема DS18S20 имеет следующие характеристики:
• Диапазон измеряемой температуры от —55 до +85 °C с шагом 0.5 °C; результат представляется в виде 16-битного числа со знаком.
• Точность измерения ±0.5 % в диапазоне -10…+85 °C.
• Время преобразования — не более 750 мс.
• Нулевой ток потребления в режиме ожидания.
• Может питаться от линии данных, диапазон напряжения питания от +3 до +5.5 В.
• Возможность работы в многоточечной сети.,