Brains (16.09.2009 20:57, просмотров: 1) ответил rezident на А пардон! У вас же переменная типа short (2 байта), а читаете вы значение из 8-ми битного порта. Так что компилятор в своем праве: сначала читает значение 8-ми битной переменной в 16-ти разрядный регистр, а потом значение 16-ти разрядного регистра
Ваш пример работает, но мне, к сожалению не подходит. Вот более полный код:
int main(void)
{
	unsigned char in_byte;
	in_byte = ReadExtMem();
//---------------------------------
unsigned short ReadExtMem(void)
{
	unsigned short result;
	result= DATA_IN;			
	result=__swap_bytes(result);		
	result+=DATA_IN;		
	return result;
}
А вот что получается:
       	unsigned short result;
     25          	result= DATA_IN;			
   \   000000   5F426102     MOV.B   &0x261, R15
   \   000004   4F4F         MOV.B   R15, R15
   \   000006   0C4F         MOV.W   R15, R12
     26          	result=__swap_bytes(result);		
   \   000008   0F4C         MOV.W   R12, R15
   \   00000A   8F10         SWPB    R15
   \   00000C   0C4F         MOV.W   R15, R12
     27          	result+=DATA_IN;		
   \   00000E   5F426102     MOV.B   &0x261, R15
   \   000012   4F4F         MOV.B   R15, R15
   \   000014   0C5F         ADD.W   R15, R12
     28          	return result;
   \   000016   1001         RETA