Микроконверторы фирмы Analog Devices в микропроцессорных приборных комплексах. Виноградов А.Б - 247 стр.

UptoLike

247
CLR MCO ;
CALL Pod_DEL_I2C ;
SETB MDO ;
CALL Pod_DEL_I2C ;
SETB MCO ;
CALL Pod_MON_SCL ;дожидаемся перехода SCL в выс уров
CLR MDO ;START
CALL Pod_DEL_I2C ;
CLR MCO ;
RET
;------------------------------------------------------------------------------
;Подпрограмма генерации условия STOP I2C
;------------------------------------------------------------------------------
Pod_STOP: SETB MDE ;SDA - выход
CLR MCO ;
CALL Pod_DEL_I2C ;
CLR MDO ;
CALL Pod_DEL_I2C ;
SETB MCO ;
CALL Pod_MON_SCL ;дожидаемся перехода SCL в выс уров
SETB MDO ;STOP
RET
;------------------------------------------------------------------------------
;Подпрограмма опроса подтверждения на линии SDA I2C.
;В случае отсутствия подтверждения (выс уровень на линии SDA) устанавливается
;флаг ошибки шины I2C - _ERR_I2C.
;------------------------------------------------------------------------------
Pod_ZACK: CLR MDE ;SDA - вход
SETB MCO ;------------------------------------
CALL Pod_MON_SCL ;дожидаемся перехода SCL в выс уров
JNB MDI,Zack_0 ;есть ли подтверждение ?
SETB _ERR_I2C ;подтверждения нет - уст флаг ошибк I2C
Zack_0: CLR MCO ;------------------------------------
RET
;------------------------------------------------------------------------------
;Подпрограмма выдачи неподтверждения на линию SDA I2C.
;------------------------------------------------------------------------------
Pod_NACK: SETB MDE ;SDA - выход
SETB MDO ;
CALL Pod_DEL_I2C ;
SETB MCO ;------------------------------------
CALL Pod_MON_SCL ;дожидаемся перехода SCL в выс уров
CLR MCO ;------------------------------------
RET
;------------------------------------------------------------------------------
;Подпрограмма передачи байта по шине I2C. Передаваемый байт следует
;предварительно поместить в аккумулятор. Используется счетчик циклов R3.
;Аккумулятор портится.
;------------------------------------------------------------------------------
Pod_OUT_BYTE:
SETB MDE ;SDA - выход
MOV R3,#8 ;нач уст ст циклов
Out_0: RLC A ;сдвиг А влево через С, бит 7 идет в С
MOV MDO,C ;передача бита
CALL Pod_DEL_I2C ;
SETB MCO ;-----------------------------------
CALL Pod_MON_SCL ;дожидаемся перехода SCL в выс уров
CLR MCO ;-----------------------------------
DJNZ R3,Out_0 ;
RET
;-------------------------------------------------------------------------------
;Подпрограмма приема байта по шине I2C. Принятый байт оказывается в аккумуляторе.
;Используется счетчик циклов R3.