. ********** | ******** | ****** | ***************************** | |
busy3 | ADD | #06h, | SP | удаление лишних |
данных процедур | ||||
sendone или sendzero | ||||
busy | ADD | #02h, | SP | удалить данные |
из стека, так как | ||||
инструкция RET | ||||
не использовалась | ||||
MOV.B | #00h, | 28 (SP) | ; код ошибки | |
POP | R13 | восстановление регист- | ||
ров | ||||
POP | R12 | |||
POP | Rll | |||
POP | R1C | |||
POP | R15 | |||
POP | R14 | |||
POP | R9 | |||
POP | R8 | |||
POP | R7 | |||
POP | SR | |||
RET | ||||
. ********** | ******** | ****** | ***************************** | |
; Отправить | «1» | |||
sendone | PUSH | R1C |
PUSH Rll
BIC.B #SDA, DIR ; установить лог. «1»
; на линии SDA BIC.B #SCL, DIR ; установить лог. «1»
; на линии SCL
; проверка удлинения тактового сигнала ; (clock low extending), чтобы не опережать ведомое ; устройство
MOV.B #04h, Rll
MOV.B IN, R1C DEC Rll JZ busy3 |
clkext |
установить число тактов для верного времени проверка шины
арбитраж - время
истекло
проверка линии SCL
AND.В #SCL, R1C
JZ clkext
; арбитраж: убедиться, что на линии SDA действительно ; лог. «1», иначе приоритет отдаётся другому ведущему