///. Интерфейс с внешними устройствами
; арбитраж: убедиться, что на линии SDA ; действительно лог. «1», иначе приоритет ; отдаётся другому ведущему устройству |
MOV.B IN, R10
AND.В #SDA, R1C
JZ busy3
BIS.В #SCL, DIR
MOV.B IN, R1C
AND.В #SDA, R1C
JZ busy3
POP Rll
POP R1C
RET
проверка шины маскировать всё, кроме SDA
освободить линию SCL определение повторяющейся стартовой последовательности
; Отправить «О» ******************************************************
sendzero
PUSH R1C PUSH Rll BIS.В #SDA, DIR ; выставить лог. «О»
; на линии SDA BIC.B #SCL, DIR ; выставить лог. «1»
; на линии SCL
; проверка удлинения тактового сигнала (clock low ; extending), чтобы не опережать ведомое устройство
MOV |
счетчик времени перехода SCL в «1» проверка шины арбитраж - время истекло проверка линии SCL освободить линию SCL |
#04h, Rll
clke
MOV.B IN, R1C DEC Rll JZ busy3
AND.В #SCL, R1C
JZ clke
BIS.В #SCL, DIR
POP Rll
POP R1C
RET
******************************************************
; Ожидание подтверждения (АСК) ******************************************************