Приветствую уважаемых форумчан. Решил я тут написать програмку десятичной коррекции 32-х разрядного(Long int) двоичного числа для тини 2313 на Си.
long BIN_Data;
flash long int Const[10]={0x3B9ACA00, 0x5F5E100, 0x989680, 0xF4240,
0x186A0, 0x2710, 0x3E8, 0x64, 0xA, 0x1 };
char DEC_Data[10];
char i=0; // Указатель строки
char bait=1 ;
long int temp;
long *adress;
void BIN_to_DEC(void) {
i=0;
bait=0;
while(i‹10){
temp=Const[i];
while(BIN_Data›=0){
BIN_Data=BIN_Data-temp;
bait++;};
BIN_Data=BIN_Data+temp;
bait=bait-1;
bait+=0x30;
DEC_Data[i]=bait;
bait=0;
if (BIN_Data==1){
break;}
++i;
};
}
Да вот незадача, как 4 байта, принятых по USART превратить в исходное число формата long int для корректировки (BIN_Data)
Вот так не получилось; программа коррекции видит только младший байт, остальные читает нулями:
char USART_In (void)
{ adress=&BIN_Data;
i=0;
while (i‹4) {
# asm ("sei");};
};
interrupt[USART_RXC] void USART_Control(void){
*adress=UDR;
// bait=UDR;
adress++;
i++;
};
И со сдвигом влево ничего не вышло(BIN_Data‹‹=
; , там на выходе совсем фигня
Кстати если в BIN_Data просто поставить двоичное число, всё работает как надо: программа корректирует его и отсылает по USART обратно.
Подскажите, кто знает, а я поделюсь готовым исходником.