English
Language : 

ATMEGA8_14 Datasheet, PDF (170/331 Pages) ATMEL Corporation – High-performance, Low-power Atmel
ATmega8(L)
Assembly Code Example
C Example
Comments
1
ldi r16, (1<<TWINT)|(1<<TWSTA)| TWCR = (1<<TWINT)|(1<<TWSTA)| Send START condition
(1<<TWEN)
(1<<TWEN)
out TWCR, r16
2
wait1:
in r16,TWCR
sbrs r16,TWINT
while (!(TWCR & (1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the START condition
has been transmitted
rjmp wait1
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)
TWDR = SLA_W;
Load SLA_W into TWDR Register.
TWCR = (1<<TWINT) | (1<<TWEN); Clear TWINT bit in TWCR to start
transmission of address
out TWCR, r16
4
wait2:
in r16,TWCR
sbrs r16,TWINT
rjmp wait2
5
in r16,TWSR
andi r16, 0xF8
cpi r16, MT_SLA_ACK
brne ERROR
while (!(TWCR & (1<<TWINT)))
;
if ((TWSR & 0xF8) !=
MT_SLA_ACK)
ERROR();
Wait for TWINT Flag set. This
indicates that the SLA+W has been
transmitted, and ACK/NACK has
been received.
Check value of TWI Status
Register. Mask prescaler bits. If
status different from MT_SLA_ACK
go to ERROR
ldi r16, DATA
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
TWDR = DATA;
Load DATA into TWDR Register.
TWCR = (1<<TWINT) | (1<<TWEN); Clear TWINT bit in TWCR to start
transmission of data
out TWCR, r16
6
wait3:
in r16,TWCR
sbrs r16,TWINT
rjmp wait3
while (!(TWCR & (1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the DATA has been
transmitted, and ACK/NACK has
been received.
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 prescaler bits. If
status different from
MT_DATA_ACK go to ERROR
ldi r16, (1<<TWINT)|(1<<TWEN)|
TWCR = (1<<TWINT)|(1<<TWEN)| Transmit STOP condition
(1<<TWSTO)
(1<<TWSTO);
out TWCR, r16
2486AA–AVR–02/2013
170