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

UptoLike

255
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.
;-------------------------------------------------------------------------------
Pod_PWRITE_I2C:
LCALL Pod_START ;START
MOV A,SLUG_I2C_R ; передача адр устройства
LCALL Pod_OUT_BYTE ; и признака записи
LCALL Pod_ZACK ;запрос подтверждения
MOV A,ADRH_I2C_R ; передача ст байта адреса ячейки
LCALL Pod_OUT_BYTE ; в устройстве
LCALL Pod_ZACK ;запрос подтверждения