Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: hi-tech 9.5PL3 ошибкка компиляции программы, имеющая ассемблерные вставки
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
AlHakim
в основной программе вызывается функция Bin2BCD16(), и компилятор выдает ошибки syntax erroк к примеру на строчку asm("swapf _ValLo,w,0");

В чем ошибка, или может у кого есть функция перевода двухбайтного значения в двоично-десятичное, желательно с небольшим верменем исполнения (этот исходник конвертит 0xffff в 65535 меньше чем за 200 циклов CPU)

переманные объявлены след. образом:
near unsigned char ValLo, ValHi, TenK, Thou, Hund, Tens, Ones;
<code>
////////////////////////////////////////////////////////////////////////
// Binary-to-BCD. Written by John Payson.
// Take number in AARGB0:AARGB1; Result decimal in TenK:Thou:Hund:Tens:Ones
///////////////////////////////////////////////////////////////////////
void Bin2BCD16()
{
//TenK ds 1 ;яЁхфёЄртыхэшх 1-Єш сшЄ-юую ўшёыр т ЇюЁьрЄх 2.5
//Thou ds 1 ;срщЄ фтюшўэю-фхё Єшўэюую
//Hund ds 1
//Tens ds 1
//Ones ds 1

asm("swapf _ValLo,w,0");
asm("iorlw 0xf0");
asm("movwf _Thou,0");
asm("addwf _Thou,f,0");
asm("addlw 0xE2");
asm("movwf _Hund,0");
asm("addlw 0x32");
asm("movwf _Ones,0");

asm("movf _ValLo,w,0");
asm("andlw 0x0F");
asm("addwf _Hund,f,0");
asm("addwf _Hund,f,0");
asm("addwf _Ones,f,0");
asm("addlw 0xE9");
asm("movwf _Tens,0");
asm("addwf _Tens,f,0");
asm("addwf _Tens,f,0");

asm("swapf _ValHi,w,0");
asm("andlw 0x0F");
asm("addwf _Tens,f,0");
asm("addwf _Ones,f,0");

asm("rlncf _Tens,f,0");
asm("rlncf _Ones,f,0");
asm("comf _Ones,f,0");
asm("rlncf _Ones,f,0");

asm("movf _ValHi,w,0");
asm("andlw 0x0F");
asm("addwf _Ones,f,0");
asm("rlncf _Thou,f,0");

asm("movlw 0x07");
asm("movwf _TenK,0");

//; At this point, the original number is equal TenK*10000+Thou*1000+Hund*100+Tens*10+Ones
//;if those entities are regarded as two's compliment binary. To be precise, all of
//;them are negative except TenK. Now thenumber needs to be normal- ized, but this
//;can all be done with simple byte ; arithmetic.
asm("movlw 0x0A"); //; Ten
//Lb1:
asm("_Lb1: ");
asm("addwf _Ones,f,0");
asm("decf _Tens,f,0");
asm("btfss status,c");
asm("goto _Lb1");
//Lb2:
asm("_Lb2: ");
asm("addwf _Tens,f,0");
asm("decf _Hund,f,0");
asm("btfss status,c");
asm("goto _Lb2");
//Lb3:
asm("_Lb3: ");
asm("addwf _Hund,f,0");
asm("decf _Thou,f,0");
asm("btfss status,c");
asm("goto _Lb3");
//Lb4:
asm("_Lb4: ");
asm("addwf _Thou,f,0");
asm("decf _TenK,f,0");
asm("btfss status,c");
asm("goto _Lb4");
// asm("retlw 0");
}

</code>
AlHakim
Цитата(AlHakim @ Sep 15 2007, 17:39) *
...может у кого есть функция перевода двухбайтного значения в двоично-десятичное, желательно с небольшим верменем исполнения ?? (этот исходник конвертит 0xffff в 65535 меньше чем за 200 циклов CPU)


Вообщем-то разобрался smile.gif, как всегда все самому приходится делать

но вопрос о других вариантах преобразования их HEX в Десятичный формат отстался
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.