You're understanding it wrong.  Yes, TWCR has a memory address of 0xBC, but that isn't its IO address.

There are two ways of accessing the port - through IO, and through memory.  In C, when you assign a value to that address it changes the address to be the IO address instead and uses an in or an out instruction rather than load or store instructions.

-- edit --

Looking at the definitions file you have posted, there is this little bit:

; ***** I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions
....
.equ    TWCR    = 0xbc  ; MEMORY MAPPED


I suspect actually that the data sheet is incorrect.  It wouldn't be surprising if that whole section about the TWI were copied verbatim from another data sheet whose TWI interface is IO mapped not memory mapped, such as the ATMega32.  It's not uncommon.

Understand Atmega168P Datasheet
Do i need permission to build something like this in the UK?

And do i need to follow any building regs? 

(I am not in a conservation area)


