Atmega163(l) – Rainbow Electronics ATmega163L User Manual
Page 77

ATmega163(L)
77
rjmp
wait1
in
r16, TWSR
; Check value of TWI Status Register.
cpi
r16, START
; If status different from START go to ERROR
brne
ERROR
ldi
r16, 0xc8
; Load SLA+W into TWDR register
out
TWDR, r16
ldi
r16, (1< out TWCR, r16 ; Clear TWINT bit in TWCR to start transmission of address wait2: in r16, TWCR ; Wait for TWINT flag set. This indicates that sbrs r16, TWINT ; SLA+W has been transmitted, and ACK/NACK has rjmp wait2 ; been received in r16, TWSR ; Check value of TWI Status Register. If status cpi r16, MT_SLA_ACK ; different from MT_SLA_ACK, go to ERROR brne ERROR ldi r16, 0x33 ; Load data (here, data = 0x33) into TWDR register out TWDR, r16 ldi r16, (1< out TWCR, r16 ; Clear TWINT bit in TWCR to start transmission of data wait3: in r16, TWCR ; Wait for TWINT flag set. This indicates that sbrs r16, TWINT ; data has been transmitted, and ACK/NACK has rjmp wait3 ; been received in r16, TWSR ; Check value of TWI Status Register. If status cpi r16, MT_DATA_ACK ; different from MT_DATA_ACK, go to ERROR brne ERROR ldi r16, 0x44 ; Load data (here, data = 0x44) into TWDR register out TWDR, r16 ldi r16, (1< out TWCR, r16 ; Clear TWINT bit in TWCR to start transmission of data ; wait4: in r16, TWCR ; Wait for TWINT flag set. This indicates that sbrs r16, TWINT ; data has been transmitted, and ACK/NACK has rjmp wait4 ; been received in r16, TWSR ; Check value of TWI Status Register. If status cpi r16, MT_DATA_ACK ; different from MT_DATA_ACK, go to ERROR brne ERROR ldi r16, (1< out TWCR, r16 ; Transmit STOP condition