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