///. Интерфейс с внешними устройствами
BIS.В #SCL, DIR ; выставить лог. «О»
; на линии SCL RET
*****************************************************
; Отправка неподтверждения (NACK) *****************************************************
BIC.B #SDA, DIR BIS.В #SCL, DIR BIC.B #SCL, DIR |
паск
clkn |
выставить лог. «1» на линии SDA выставить лог. «О» на линии SCL выставить лог. «1» на линии SCL ; проверка удлинения тактового сигнала ; (clock low extending), чтобы не ; опережать ведомое устройство ; ждём установки «1» на линии SCL MOV.В IN, RIO
AND.В #SCL, RIO ; проверка линии SCL JZ clkn
BIS.В #SCL, DIR ; «отпустить» SCL RET
; Отправка подтверждения (АСК)
sack swaita |
*****************************************************
; ждём, пока ведомый «отпустит» линию SDA MOV #000Fh, Rll ; счётчик на ?50 мкс
MOV.В IN, RIO
DEC Rll
JZ busy
AND.В #SDA, RIO ; проверка SCL
JZ swaita
BIS.В #SDA, DIR ; перевести SDA в «О»
BIC.B #SCL, DIR ; перевести SCL в «1»
#000Fh, Rll; счётчик на ?50 мкс
проверка шины
MOV
swait |
проверка шины |
MOV.В IN, RIO
DEC Rll
JZ busy
AND.В #SCL, RIO ; проверка SCL
JZ swait
BIS.В #SCL, DIR ; перевести SCL в «0»
BIC.B #SDA, DIR ; «отпустить» SDA
RET