; адрес устройства для записи в регистры
lcall send_byte
lcall rec_ack ; прием ACK бита от камеры
; посылка адреса регистра
mov a,reg_adr
lcall send_byte
lcall rec_ack ; прием ACK бита от камеры
; посылка значения регистра
mov a,reg_val
lcall send_byte
lcall rec_ack ; прием ACK бита от камеры
lcall stop ; окончание обмена
lcall delay ; необходима задержка между повторными обращениями
ret
; процедура чтения значения регистра камеры
rd_proc:
lcall start ; начало обмена по шине
; посылка адреса устройства
mov a,#c0h ; c0h - назначенный камере по умолчанию
; адрес устройства для записи в регистры.
lcall send_byte ; двухбайтовая операция записи
lcall rec_ack ; необходима для сообщения камере
mov a,reg_adr ; адреса регистра, который требуется считать
lcall send_byte ; при выполнении операции чтения
lcall rec_ack
lcall stop ; старт/стоп процедура
lcall delay
lcall start
mov a,#c1h ; c1h - назначенный камере по умолчанию
; адрес устройства для чтения регистров
lcall send_byte
lcall rec_ack ; прием ACK бита от камеры
lcall rec_byte ; прием значения регистра
mov reg_val,a ; принятое значение из аккумулятора записываем в reg_val
setb c
lcall send_bit ; подтверждение приема значения регистра камере
lcall stop ; процедура остановки
lcall delay ; задержка между повторными обращениями к камере
ret
set_up: clr p3.4 ; снимаем RST
clr p3.5 ; снимаем PWDN
lcall delay
lcall delay
setb p1.5 ; устанавливаем высокий уровень
setb p1.6 ; на линиях шины I2C
ret
; процедура start - начало обмена по шине I2C
start:
clr p1.5
lcall del_s
clr p1.6
lcall del_s
ret
; процедура stop - окончание обмена по шине I2C
stop: clr p1.5
lcall del_s
setb p1.6
lcall del_s
setb p1.5
ret
; посылка бита по шине I2C
send_bit:
mov p1.5,c
lcall del_s
setb p1.6
lcall del_s
clr p1.6
lcall del_s
ret
; прием бита по шине I2C
rec_bit: setb p1.6
lcall del_s
mov c,p1.5
lcall del_s
clr p1.6
lcall del_s
ret
; прием бита ACK
rec_ack: setb p1.5
setb p1.6
lcall del_s
mov c,p1.5
clr p1.6
lcall del_s
ret
; процедура посылки байта на шину I2C
send_byte:
push 0
mov r0,#8
$cycle: rlc a
lcall send_bit
djnz r0,$cycle
pop 0
ret
; процедура приема байта по шине I2C
rec_byte:
push 0
mov r0,#8
clr a
$cycle: lcall rec_bit
rlc a
djnz r0,$cycle
pop 0
ret
; процедура задержки
delay: push 0
push 1
mov r0,#5
$dly1: mov r1,#0
djnz r1,$
djnz r0,$dly1
pop 1
pop 0
ret
del_s: push 0
mov r0,#5
djnz r0,$
pop 0
ret
файл upl_inc.asm
xptr: equ 50h
yptr: equ 51h
upload: mov dptr,#frame
mov yptr,#144
cycle0: mov xptr,#176
cycle1: jnb ri,$
mov a,sbuf
clr ri
movx a,@dptr
inc dptr
jnb ti,$
mov sbuf,a
clr ti
djnz xptr,cycle1
djnz yptr,cycle0
ret
файл cap_inc.asm
v_data: equ 31h
strt: equ 7eh
capture: clr p3.4
clr p3.5
ccl2: jnb p3.3,ccl2
setb it1 ; настройка прерываний INT1 (VSYN) срезом
mov dptr,#frame ; адрес начала кадра
setb strt
setb ex1 ; разрешение прерываний по VSYN
setb p3.3
setb ea
jb ex1,$ ; ожидаем завершения съемки кадра
clr ea
clr it1
mov 60h,dph
mov 61h,dpl
ret
org 8013h ;обработчик VSYN
jbc strt,ok ;для попадания на начало следующего кадра
clr b8h.5 ;в случае, если запуск программы пришеля на время передачи кадра
clr ex1
sjmp exit
ok: setb b8h.5 ; разрешение прерываний по PCLK
exit: reti
org 806bh ; обработчик PCLK
mov v_data,e8h
mov a,v_data
movx @dptr,a
inc dptr
reti
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.