Ніт. Издеваться можно и на сях для кейла под MCS51 typedef union
{
DWORD Data;
BYTE B[4];
} ADC_Buff;
DWORD Get_ADC()
{
ADC_Buff Buff;
Buff.B[0]= Get_ADC_Byte();//младший
Buff.B[1]= Get_ADC_Byte();//средний
Buff.B[2]= Get_ADC_Byte();//старший
if ((Buff.B[2]&0x80)==0) {Buff.B[3]= 0;}
else {Buff.B[3]= 0xFF;}
return Buff.Data;
}
Можно внутренность и на асме переписать и проверять старший бит принятый с SPI сразу по приеме еще в аккумуляторе, после чего обнулять или устанавливать старший байт результата.
Установка старшего байта на ASM без проверки условий.
MOV A, R6 ; расширяемый старший байт с АЦП
ADD A, #80 ; вызываем перенос при отрицательном числе
SUBB A, A ; если переноса нет - получим 0, иначе -1
MOV R7, A ; пишем куда-там расширенный байт
Как-то таг. Присобачите этот код к своему ибо мне уже надоело.