КОД с форума www.telesys.ru от Ema За код хочу выразить огромную благодарность форуму на www.telesys.ru, а в частности его посетителю "Ema"!!!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ЧТЕНИЕ БАЙТА С АЦП ;
; ;
; Используемые порты и регистры ;
; Порты: A_SCLK ;
; A_DATA ;
; Входные регистры: нет ;
; Выходные регистры: A - считанный байт ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ACP_READ: ;
mov B,#8h ;
setb A_SCLK ; Подгатавливаем к приему =1
nop ;
setb A_DATA ; Настраиваем на прием =1
nop ;
ACP_READ_CYCLE: ;
clr A_SCLK ; Пподаем импульс на АЦП
nop ;
setb A_SCLK ; При переходе из 0 в 1 на выходе АЦП появляется бит
nop ;
mov C, A_DATA ;
; В переносе хранится полученный бит ;
rlc A ; Сдвигаем влево так как сначала приходит старший бит
djnz B,ACP_READ_CYCLE ; Если цикл не закончился то переходим далее
ret ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ЗАПИСЬ БАЙТА В АЦП ;
; ;
; Используемые порты и регистры ;
; Порты: A_SCLK ;
; A_DATA ;
; Входные регистры: А- байт для передачи ;
; Выходные регистры: нет ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ACP_WRITE: ;
setb A_DATA ; Подготавливаем порты к обмену - устанавливаем в 1
setb A_SCLK ;
mov B,#8h ; Счетчик бит для приема байта
ACP_WRITE_CYCLE: ;
nop ;
clr A_SCLK ; настраиваем на прием
nop ;
rlc A ; сдвигаем влево
mov A_DATA,C ;
nop ;
setb A_SCLK ;
djnz B,ACP_WRITE_CYCLE ; Переходим к следующему биту
ret ;