Datasheet

116
ATmega323(L)
1457E11/01
; ACK should be returned after receiving first
; data byte
wait12:in r16,TWCR ; Wait for TWINT flag set. This indicates that
sbrs r16, TWINT ; data has been received and ACK returned
rjmp wait12
in r16, TWSR ; Check value of TWI Status Register. If status
cpi r16, SR_DATA_ACK ; different from SR_DATA_ACK, go to ERROR
brne ERROR
in r16, TWDR ; Input received data from TWDR.
nop ;<do something with received data>
ldi r16, (1<<TWINT) | (1<<TWEN)
out TWCR, r16 ; Clear TWINT bit in TWCR to start reception of
; data. Not setting TWEA causes NACK to be
; returned after reception of next data byte
wait13:in r16,TWCR ; Wait for TWINT flag set. This indicates that
sbrs r16, TWINT ; data has been received and NACK returned
rjmp wait13
in r16, TWSR ; Check value of TWI Status Register. If status
cpi r16, SR_DATA_NACK ; different from SR_DATA_NACK, go to ERROR
brne ERROR
in r16, TWDR ; Input received data from TWDR.
nop ;<do something with received data>
ldi r16, (1<<TWINT) | (1<<TWEA) | (1<<TWEN)
out TWCR, r16 ; Clear TWINT bit in TWCR to start reception of
; data. Setting TWEA causes TWI unit to enter
; not addressed slave mode with recognition of
; own SLA
;<Wait for next data transmission or do something else>