Atmega16(l) – Rainbow Electronics ATmega64L User Manual
Page 176

176
ATmega16(L)
2466B–09/01
Assembly code example
C example
Comments
1
ldi
r16, (1< (1< out TWCR, r16 TWCR = (1< (1< Send START condition 2 wait1: in r16,TWCR sbrs r16,TWINT rjmp wait1 while (!(TWCR & (1< ; Wait for TWINT flag set. This indicates 3 in r16,TWSR andi r16, 0xF8 cpi r16, START brne ERROR if ((TWSR & 0xF8) != START) ERROR(); Check value of TWI Status Register. Mask ldi r16, SLA_W out TWDR, r16 ldi r16, (1< out TWCR, r16 TWDR = SLA_W; TWCR = (1< Load SLA_W into TWDR register. Clear 4 wait2: in r16,TWCR sbrs r16,TWINT rjmp wait2 while (!(TWCR & (1< ; Wait for TWINT flag set. This indicates 5 in r16,TWSR andi r16, 0xF8 cpi r16, MT_SLA_ACK brne ERROR if ((TWSR & 0xF8) != MT_SLA_ACK) ERROR(); Check value of TWI Status Register. Mask ldi r16, DATA out TWDR, r16 ldi r16, (1< out TWCR, r16 TWDR = DATA; TWCR = (1< Load DATA into TWDR register. Clear 6 wait3: in r16,TWCR sbrs r16,TWINT rjmp wait3 while (!(TWCR & (1< ; Wait for TWINT flag set. This indicates 7 in r16,TWSR andi r16, 0xF8 cpi r16, MT_DATA_ACK brne ERROR if ((TWSR & 0xF8) != MT_DATA_ACK) ERROR(); Check value of TWI Status Register. Mask ldi r16, (1< (1< out TWCR, r16 TWCR = (1< (1< Transmit STOP condition
that the START condition has been
transmitted
prescaler bits. If status different from
START go to ERROR
TWINT bit in TWCR to start transmission
of address
that the SLA+W has been transmitted,
and ACK/NACK has been received.
prescaler bits. If status different from
MT_SLA_ACK go to ERROR
TWINT bit in TWCR to start transmission
of address
that the DATA has been transmitted, and
ACK/NACK has been received.
prescaler bits. If status different from
MT_DATA_ACK go to ERROR