Atmega128(l) – Rainbow Electronics ATmega128L User Manual
Page 203

203
ATmega128(L)
2467B–09/01
Note:
For I/O registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI” instructions must be replaced with
instructions that allow access to extended I/O. Typically “LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.
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 that 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 that 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 TWINT 6 wait3: in r16,TWCR sbrs r16,TWINT rjmp wait3 while (!(TWCR & (1< ; Wait for TWINT flag set. This indicates that 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
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
the SLA+W has been transmitted, and
ACK/NACK has been received.
prescaler bits. If status different from
MT_SLA_ACK go to ERROR
bit in TWCR to start transmission of address
the DATA has been transmitted, and
ACK/NACK has been received.
prescaler bits. If status different from
MT_DATA_ACK go to ERROR