Перейти к содержанию

Black Jack

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Black Jack

  1. Приветствую уважаемых форумчан. Решил я тут написать програмку десятичной коррекции 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;
     //BIN_Data<<=8; //
     adress++;
     i++;
     };

    И со сдвигом влево ничего не вышло(BIN_Data<<=8); , там на выходе совсем фигня

    Кстати если в BIN_Data просто поставить двоичное число, всё работает как надо: программа корректирует его и отсылает по USART обратно.

    Подскажите, кто знает, а я поделюсь готовым исходником.

×
×
  • Создать...