Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

bin to bcd
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=7259
Страница 1 от 1

Автор:  mash [ Сря Окт 28, 2009 7:28 pm ]
Заглавие:  bin to bcd

Имам проблем със следния код:
int i;
...
....
...
int get_bcd(BYTE data)
{
int nibh;
int nibl;
nibh=data/10;
nibl=data-(nibh*10);
return((nibh<<4)|nibl);

}

write_ds1307(0,get_bcd(i));


При компилиране ми излиза следното : Expecting a close paren

Автор:  bobyper [ Сря Окт 28, 2009 8:15 pm ]
Заглавие:  Re: bin to bcd

От този код не се наблюдава липсваща скоба. Вероятно е в другата част дето не е показана

Автор:  fan [ Сря Окт 28, 2009 8:23 pm ]
Заглавие: 

Кода е наред, търси на друго място!

Автор:  RM [ Сря Окт 28, 2009 8:46 pm ]
Заглавие: 

Код:
// ** BinToBCD   -- the routine converts the binary byte data (< 100) to 2 BCD digits.
//
char BinToBCD(char _byte)
{
   char   _temp = 0;
   while (_byte >= 10)
   {
      ++_temp;
      _byte -= 10;
   }
   return _byte | (_temp<<4);
}

това върши ли работа

Автор:  mash [ Сря Окт 28, 2009 11:23 pm ]
Заглавие: 

RM написа:
Код:
// ** BinToBCD   -- the routine converts the binary byte data (< 100) to 2 BCD digits.
//
char BinToBCD(char _byte)
{
   char   _temp = 0;
   while (_byte >= 10)
   {
      ++_temp;
      _byte -= 10;
   }
   return _byte | (_temp<<4);
}

това върши ли работа

Не!.....
много интересно ...
пробвах различни варианти.
От там е проблема, защото компилатора ми маркира i след пробата да компилирам кода

Автор:  tommyboy [ Чет Окт 29, 2009 12:10 am ]
Заглавие: 

void BINtoDEC()
{
for (DIG_10000=0; Vout>=10000; DIG_10000++){
Vout = Vout - 10000;
}
for (DIG_1000=0; Vout>=1000; DIG_1000++){
Vout = Vout - 1000;
}
for (DIG_100=0; Vout>=100; DIG_100++){
Vout = Vout - 100;
}
for (DIG_10=0; Vout>=10; DIG_10++){
Vout = Vout - 10;
}
for (DIG_1=0; Vout>=1; DIG_1++){
Vout = Vout - 1;
}
}


Писано е на микроС , Vout е число в бин, а DIG_10000,DIG_1000,DIG_100... са десетохилядни, хилядни и т.н.

Автор:  kiiid [ Чет Окт 29, 2009 2:15 am ]
Заглавие: 

bx=(unsigned char)(((x/10)<<4)+(x%10))

Това ти взима BIN число и ти го прави на BCD. Не разбрах за какво ти беше цяла фунция за това

Автор:  Wise [ Чет Окт 29, 2009 10:46 am ]
Заглавие: 

без да съм навътре в C мисля, че това BYTE не е дефинирано.
Ако е int или char би трябвало да се компилира

Автор:  mash [ Съб Окт 31, 2009 10:02 am ]
Заглавие: 

Wise написа:
без да съм навътре в C мисля, че това BYTE не е дефинирано.
Ако е int или char би трябвало да се компилира

не става :( ..
нещо зациклих .... преглеждах целия код и никъде няма проблем в него. Като го оставя така write_ds1307(0,i); и се компилира но така:write_ds1307(0,get_bcd(i)); не иска ...

Автор:  zaphod [ Съб Окт 31, 2009 10:06 am ]
Заглавие: 

къв компилер ползваш бе чадо? кода наистина изглежда наред, да не си на нещо писано от ентусиасти?

Автор:  mash [ Съб Окт 31, 2009 10:19 am ]
Заглавие: 

zaphod написа:
къв компилер ползваш бе чадо? кода наистина изглежда наред, да не си на нещо писано от ентусиасти?

CCS 4.033

Автор:  mash [ Съб Окт 31, 2009 12:05 pm ]
Заглавие: 

ето вида в който не се компилира:
Код:
//sveriavane na chasovnika
   Do
   {
   printf(lcd_putc,"\fClock adjust:");
   printf(lcd_putc,"\nHour:%02d",k);
   delay_ms(100);
   if(!input(pin_c0))
   {k++;delay_ms(100);}
   if(!input(pin_c1))
   {k--;delay_ms(100);}
   delay_ms(100);
   if(!input(pin_c2))
   {delay_ms(1000);
   if(!input(pin_c2))
   {h=3;}}
   }
   While(h>3);
   Do
   {printf(lcd_putc,"\fClock adjust:");
   printf(lcd_putc,"\nMin:%02d",j);
   delay_ms(100);
   if(!input(pin_c0))
   {j++;delay_ms(100);}
   if(!input(pin_c1))
   {j--;delay_ms(100);}
   delay_ms(100);
   if(!input(pin_c2))
   {delay_ms(1000);
   if(!input(pin_c2))
   {h=2;}}
   }
    While(h>2);
   Do
    {printf(lcd_putc,"\fClock adjust:");
    printf(lcd_putc,"\nSec:%02d",i);
   delay_ms(100);
   if(!input(pin_c0))
   {i++;delay_ms(100);}
   if(!input(pin_c1))
   {i--;delay_ms(100);}
   delay_ms(100);
   if(!input(pin_c2))
   delay_ms(1000);
   if(!input(pin_c2))
   {
write_ds1307(0,get_bcd(i));/////   този ред
   delay_ms(40);
   write_ds1307(1,j);
   delay_ms(40);
   write_ds1307(2,k);
   delay_ms(40);
 
    b=2;h=1;}}
   
   While (b>1);



ето и вида в който се компилира в същата програма :

Код:
while(TRUE)
   {
   b=8;
   clock_refresh();
   menu();
   work();
   refresh_display();
write_ds1307(0,get_bcd(i));///// този ред
   
   }

Автор:  fan [ Съб Окт 31, 2009 12:38 pm ]
Заглавие: 

Слушай, има нещо друго. При мен всичко се компилира - естствено с добавяне на променливи и фантомни функции на мястото на write_ds1307 и get_bcd (ами не си ги постнал). И си сложи по-нова версия - няма да ти гръмне компа от нея, в момента из нета можеш да си намериш 4.093. Не е лошо и да си пооправиш стила на писане в си-то(ако искаш?!).

Автор:  mash [ Вто Ное 03, 2009 6:41 pm ]
Заглавие: 

Реших проблема като организирах нова подпрограма в която да се изпълни това.
Мерси за отговорите. Вече съм с нова версия :)

Автор:  sv_shady [ Сря Ное 04, 2009 2:31 am ]
Заглавие: 

Абе то проблема не е от весията, но по добре да имаш по-нова от 4.033, а иначе наистина, пооправи си стила на писане, защото това ме отказа да ти разгледам кода. Слагай нови редове, табчета, е такива работи, помагат. Как дебъгваш такъв код не знам...

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/