Datasheet

ATmega164A/PA/324A/PA/644A/PA/1284/P
2018 Microchip Technology Inc. Data Sheet Complete DS40002070A-page 221
Table 21-2. Assembly code and C code examples
Assembly code example C example Comments
1
ldi
r16,
(1<<TWINT)|(1<<TWSTA)
|
(1<<TWEN)
out
TWCR, r16
TWCR =
(1<<TWINT)|(1<<TWSTA
)|
(1<<TWEN)
Send START condition
2
wait1:
in
r16,TWCR
sbrs
r16,TWINT
rjmp
wait1
while (!(TWCR &
(1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the START
condition has been transmitted
3
in
r16,TWSR
andi
r16, 0xF8
cpi
r16, START
brne
ERROR
if ((TWSR & 0xF8) !=
START)
ERROR();
Check value of TWI Status
Register. Mask prescaler bits. If
status different from START go to
ERROR
ldi
r16, SLA_W
out
TWDR, r16
ldi
r16, (1<<TWINT) |
(1<<TWEN)
out
TWCR, r16
TWDR = SLA_W;
TWCR = (1<<TWINT) |
(1<<TWEN);
Load SLA_W into TWDR
Register. Clear TWINT bit in
TWCR to start transmission of
address
4
wait2:
in
r16,TWCR
sbrs
r16,TWINT
rjmp
wait2
while (!(TWCR &
(1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the SLA+W has
been transmitted, and
ACK/NACK has been received.