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

UptoLike

266
LCALL Pod_HIGH_SCL ;
LCALL Pod_LOW_SDA ;START
LCALL Pod_LOW_SCL ;
RET
;------------------------------------------------------------------------------
;Подпрограмма генерации условия STOP I2C
;------------------------------------------------------------------------------
Pod_STOP: LCALL Pod_LOW_SCL ;
LCALL Pod_LOW_SDA ;
LCALL Pod_HIGH_SCL ;
LCALL Pod_HIGH_SDA ;STOP
RET
;------------------------------------------------------------------------------
;Подпрограмма опроса подтверждения на линии SDA I2C.
;В случае отсутствия подтверждения (выс уровень на линии SDA) устанавливается
;флаг ошибки шины I2C - _ERR_I2C.
;------------------------------------------------------------------------------
Pod_ZACK: LCALL Pod_HIGH_SDA ;SDA - вход
LCALL Pod_HIGH_SCL ;фронт SCL
JNB _SCL,$ ;дожидаемся перехода SCL в выс уров
JNB _SDA,Zack_0 ;есть ли подтверждение ?
SETB _ERR_I2C ;подтверждения нет - уст флаг ошибк I2C
Zack_0: LCALL Pod_LOW_SCL ;спад SCL
RET
;------------------------------------------------------------------------------
;Подпрограмма выдачи неподтверждения на линию SDA I2C.
;------------------------------------------------------------------------------
Pod_NACK: LCALL Pod_HIGH_SDA ;фронт SDA
LCALL Pod_CLOCK_PULSE ;импульс SCL
RET
;------------------------------------------------------------------------------
;Подпрограмма передачи байта по шине I2C. Передаваемый байт следует
;предварительно поместить в аккумулятор. Используется счетчик циклов R3.
;Аккумулятор портится.
;------------------------------------------------------------------------------
Pod_OUT_BYTE:
MOV R3,#8 ;нач уст ст циклов
Out_0: RLC A ;сдвиг А влево через С, бит 7 идет в С
JC Out_10 ;в зависимости от значения С:
LCALL Pod_LOW_SDA ;передача 0
SJMP Out_20 ;
Out_10: LCALL Pod_HIGH_SDA ;передача 1
Out_20: LCALL Pod_CLOCK_PULSE ;импульс SCL
DJNZ R3,Out_0 ;
RET
;------------------------------------------------------------------------------
;Подпрограмма приема байта по шине I2C. Принятый байт оказывается в аккумуляторе.
;Используется счетчик циклов R3.
;-------------------------------------------------------------------------------
Pod_IN_BYTE:
MOV R3,#8 ;нач уст ст циклов
LCALL Pod_HIGH_SDA ;SDA - вход
In_0: LCALL Pod_HIGH_SCL ;фронт SCL
JNB _SCL,$ ;дожидаемся перехода SCL в выс уров
MOV C,_SDA ; прием бита
LCALL Pod_LOW_SCL ;спад SCL
RLC A ;сдвиг А влево через С, С идет в бит 0
DJNZ R3,In_0 ;
RET
;-------------------------------------------------------------------------------
;Подпрограмма передачи байта в ведомое устройство по шине I2C.
;Предварительно следует поместить в РОН DATA_I2C_R - данные передачи,