А вот и кусок кода А вот и кусок кода, хотя я думаю что здесь всё правельно,а проблема с аппаратной частью, хотя бог его знает.
serch_in_mem2:
clr pos
clr ZL
mov temp,adr
mov temp2,temp
lsl temp ;
lsl temp ;
lsl temp ;Подготовили адрес cслова
swap temp2 ;
cbr temp2,241 ;
sbr temp2,160 ;Подготовили адрес устройства
mov TWIadr,temp2;
rcall TWI_start ;Заслали дрес устройства
mov TWIdata,temp ;
rcall TWI_do_transfer ;;Заслали адрес слова
inc temp2 ;
mov TWIadr,temp2 ;Переключили адрес устройства в режим чтения из устройства
rcall TWI_rep_start ;Делаем рестарт
serch_in_mem3:
clc
rcall TWI_read
ld temp,z+
cp temp,TWIdata
brne serch_in_mem4
inc pos
cpi pos,8
brlo serch_in_mem3
sec
rcall TWI_read
rcall TWI_stop
sez
ret
serch_in_mem4:
sec
rcall TWI_read
rcall TWI_stop
inc adr
brne serch_in_mem2
clz
ret
TWI_read:
cbi ddrd,sdap
rol TWIstat ; store acknowledge
; (used by TWI_put_ack)
ldi TWIdata,0x01 ; data = 0x01
TWI_read_bit: ; do
sbi DDRD,SCLP ; force SCL low
rcall TWI_hp_delay ; half period delay
cbi DDRD,SCLP ; release SCL
;cbi DDRD,SDAP ; release SCL
rcall TWI_hp_delay ; half period delay
clc ; clear carry flag
sbic PIND,SDAP ; if SDA is high
sec ; set carry flag
rol TWIdata ; store data bit
brcc TWI_read_bit ; while receive register not full
TWI_put_ack:
sbi DDRD,SCLP ; force SCL low
ror TWIstat ; get status bit
brcc TWI_put_ack_low ; if bit low goto assert low
cbi DDRD,SDAP ; release SDA
rjmp TWI_put_ack_high
TWI_put_ack_low: ; else
sbi DDRD,SDAP ; force SDA low
TWI_put_ack_high:
rcall TWI_hp_delay ; half period delay
cbi DDRD,SCLP ; release SCL
TWI_put_ack_wait:
sbis PIND,SCLP ; wait SCL high
rjmp TWI_put_ack_wait
rcall TWI_hp_delay ; half period delay
ret
и т.д.
-
- Ответ Алексей Мусин(103 знак., 10.11.2006 10:08)
- Если бы был цифр осцилл,я бы наверное тогда и не парился и сюда не писал - IgorAVR(10.11.2006 10:30)
- Ответ Алексей Мусин(103 знак., 10.11.2006 10:08)