Отговори на тема  [ 15 мнения ] 
bin to bcd 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 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


Сря Окт 28, 2009 7:28 pm
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Яну 31, 2006 11:11 pm
Мнения: 295
Местоположение: София
Мнение Re: bin to bcd
От този код не се наблюдава липсваща скоба. Вероятно е в другата част дето не е показана


Сря Окт 28, 2009 8:15 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Кода е наред, търси на друго място!


Сря Окт 28, 2009 8:23 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение 
Код:
// ** 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);
}

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

_________________
Вниманиене съмвишист....ИЙ.


Сря Окт 28, 2009 8:46 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
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 след пробата да компилирам кода


Сря Окт 28, 2009 11:23 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Авг 21, 2007 10:40 pm
Мнения: 24
Мнение 
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... са десетохилядни, хилядни и т.н.


Чет Окт 29, 2009 12:10 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Сеп 24, 2005 2:00 pm
Мнения: 787
Мнение 
bx=(unsigned char)(((x/10)<<4)+(x%10))

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


Чет Окт 29, 2009 2:15 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Дек 19, 2004 6:26 pm
Мнения: 1628
Местоположение: Сливен
Мнение 
без да съм навътре в C мисля, че това BYTE не е дефинирано.
Ако е int или char би трябвало да се компилира


Чет Окт 29, 2009 10:46 am
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Wise написа:
без да съм навътре в C мисля, че това BYTE не е дефинирано.
Ако е int или char би трябвало да се компилира

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


Съб Окт 31, 2009 10:02 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
къв компилер ползваш бе чадо? кода наистина изглежда наред, да не си на нещо писано от ентусиасти?


Съб Окт 31, 2009 10:06 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
zaphod написа:
къв компилер ползваш бе чадо? кода наистина изглежда наред, да не си на нещо писано от ентусиасти?

CCS 4.033


Съб Окт 31, 2009 10:19 am
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
ето вида в който не се компилира:
Код:
//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));///// този ред
   
   }


Съб Окт 31, 2009 12:05 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

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


Съб Окт 31, 2009 12:38 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Реших проблема като организирах нова подпрограма в която да се изпълни това.
Мерси за отговорите. Вече съм с нова версия :)


Вто Ное 03, 2009 6:41 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 11, 2006 8:19 pm
Мнения: 373
Местоположение: София/Edinburgh, UK
Мнение 
Абе то проблема не е от весията, но по добре да имаш по-нова от 4.033, а иначе наистина, пооправи си стила на писане, защото това ме отказа да ти разгледам кода. Слагай нови редове, табчета, е такива работи, помагат. Как дебъгваш такъв код не знам...

_________________
Българският портал за РОБОТИКА


Сря Ное 04, 2009 2:31 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 15 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни