beautypg.com

Atmega163(l) – Rainbow Electronics ATmega163L User Manual

Page 77

background image

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<

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<

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<

out

TWCR, r16

; Clear TWINT bit in TWCR to start transmission of data

;

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<

out

TWCR, r16

; Transmit STOP condition