Ситуация такая Мега8 к ней подключена 24С256 EEPROM через TWI.
Кто знает ASM помогите пожалуйста. В Датащите Меги8 ничего ненаписанно о том как адресовать память через TWI написанно только что для этого используется тотже регистор что и для передачи/приёма данных TWDR. В пдф по 24LC256
на схеме 6-1 написанно что сначала идёт Старт байт потом Control байт эти два я вроде понял дальше идут два байта АДРЕССА байт данных и стоп байт. Так вот КУДА и КАК пихать байты адреса я не понимаю ваще !!!
Люди очень надо, уже вторую неделю сижу с этим дурацким TWI так и с ума сойти недолго. На С не помогайте ..... ну непонимаю я его
MASTER_TX:
cli ; Interrupts not used; must poll TWINT bit
; Set bitrate for master mode
; ---------------------------
ldi r16, 13 ; Minimum value must be 10 !
out TWBR, r16 ; See formula in Atmel manual
; Send start and wait for TWINT flag
; ----------------------------------
ldi r16, (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
out TWCR, r16
rcall wait_twint
; Load SLA + W and clear int flag
; -------------------------------
ldi r16, 0xA0 | 0 ; Address = 0x1E, Write (TX)
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
out TWCR, r16
rcall wait_twint
in r16, TWSR
andi r16, 0xF8
cpi r16, 0x18 ; Status code must be 0x18
brne ERROR
; Check TWI Status register
; -------------------------
in r16, TWSR
andi r16, 0xF8
cpi r16, 0x28 ; Status code must be 0x28
brne ERROR
ldi r18, 0x0F ; Init byte to transmit
write_loop:
; Load data into TWDR register
; ----------------------------
mov r16, r18 ; r18 holds the code to transfer
out TWDR, r16
ldi r16, (1<<TWINT)|(1<<TWEN)
out TWCR, r16
rcall wait_twint ; Wait for completion
; Check TWI Status register
; -------------------------
in r16, TWSR
andi r16, 0xF8
cpi r16, 0x28 ; Value must be 0x28
brne ERROR
dec r18 ; Decrement data for
brne write_loop ; next cycle
; Send STOP and return
; --------------------
ldi r16, (1<<TWINT) | (1<<TWEN) | (1<<TWSTO)
out TWCR, r16
ret