clkxtn
JZ |
MOV.В IN, R1C DEC R13
busy
JZ |
AND.В #SCL, R1C
clkxtn
MOV.В IN, R1C
RLA.B Rll
AND.В #SDA, R1C
JZ inzero
BIS.В #01h, Rll
DEC R12
JNZ rrep
MOV.В Rll, R14
BIS.В #SCL, DIR
RET
сигнала проверка шины
выход по таймауту
ожидание, если SCL
не «1»
проверка шины
move over for input
as LSB
проверка SDA
установить «1» в МЗР
продолжение для оставшейся части байта копирование данных выставить лог. «О» на линии SCL
******************************************************
; Отправка неподтверждения (NACK) ********************************* паск |
BIC.B #SDA, DIR BIS.В #SCL, DIR BIC.B #SCL, DIR |
выставить лог. «1» на линии SDA выставить лог. «О» на линии SCL выставить лог. «1» на линии SCL
; проверка удлинения тактового сигнала
; (clock low extending), чтобы не опере-
; жать ведомое устройство
; ждём установки «1» на линии SCL clkn MOV.В IN, RIO
AND.В #SCL, RIO ; проверка линии SCL
JZ clkn
BIS.В #SCL, DIR ; «отпустить» SCL
RET
******************************************************
; Отправка подтверждения (АСК) ******************************************************
sack ; ждём, пока ведомый «отпустит» линию SDA