Atmega163(l) – Rainbow Electronics ATmega163L User Manual
Page 77

ATmega163(L)
77
rjmp
wait1
in
r16, TWSR
; Check value of TWI Status Register.
cpi
r16, START
; If status different from START go to ERROR
brne
ERROR
ldi
r16, 0xc8
; Load SLA+W into TWDR register
out
TWDR, r16
ldi
r16, (1<<TWINT) | (1<<TWEN)
out
TWCR, r16
; Clear TWINT bit in TWCR to start transmission of address
wait2:
in
r16, TWCR
; Wait for TWINT flag set. This indicates that
sbrs
r16, TWINT
; SLA+W has been transmitted, and ACK/NACK has
rjmp
wait2
; been received
in
r16, TWSR
; Check value of TWI Status Register. If status
cpi
r16, MT_SLA_ACK
; different from MT_SLA_ACK, go to ERROR
brne
ERROR
ldi
r16, 0x33
; Load data (here, data = 0x33) into TWDR register
out
TWDR, r16
ldi
r16, (1<<TWINT) | (1<<TWEN)
out
TWCR, r16
; Clear TWINT bit in TWCR to start transmission of data
wait3:
in
r16, TWCR
; Wait for TWINT flag set. This indicates that
sbrs
r16, TWINT
; data has been transmitted, and ACK/NACK has
rjmp
wait3
; been received
in
r16, TWSR
; Check value of TWI Status Register. If status
cpi
r16, MT_DATA_ACK
; different from MT_DATA_ACK, go to ERROR
brne
ERROR
ldi
r16, 0x44
; Load data (here, data = 0x44) into TWDR register
out
TWDR, r16
ldi
r16, (1<<TWINT) | (1<<TWEN)
out
TWCR, r16
; Clear TWINT bit in TWCR to start transmission of data
;<send more data bytes if needed>
wait4:
in
r16, TWCR
; Wait for TWINT flag set. This indicates that
sbrs
r16, TWINT
; data has been transmitted, and ACK/NACK has
rjmp
wait4
; been received
in
r16, TWSR
; Check value of TWI Status Register. If status
cpi
r16, MT_DATA_ACK
; different from MT_DATA_ACK, go to ERROR
brne
ERROR
ldi
r16, (1<<TWINT) | (1<<TWSTO) | (1<<TWEN)
out
TWCR, r16
; Transmit STOP condition