Отговори на тема  [ 9 мнения ] 
Как би изглеждал този С код на асемблер за PIC16 примерно 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Сеп 19, 2005 12:49 am
Мнения: 61
Мнение Как би изглеждал този С код на асемблер за PIC16 примерно
Как биха изглеждал този С код на асемблер за PIC16 примерно

int T = 23;
int temp1, temp2;

temp1 = T%10;
temp2 = T/10;

Сигурно ще е нещо просто, но ....... май математика ми куца :roll:
Благодаря ви.


Вто Сеп 20, 2005 11:39 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Намираш си процедурата на асм:
"Divide 16 bit int by 8 bit int to 8 bit int and remainder"
и виждаш как изглежда :D
temp2 ти е резултата, а temp1 остатъка.


Вто Сеп 20, 2005 2:34 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Сеп 19, 2005 12:49 am
Мнения: 61
Мнение 
Май е по-добре да кажа за какво ми е това деление защото може да се окаже че имало и по-лесен начин.....
Ами работата е там че искам да извеждам двуцифрени числа на динамичен 2 разряден 7 сегмендет LED и чрез това деление исках да разделя десеттиците от единиците.


Вто Сеп 20, 2005 4:46 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Сеп 08, 2005 9:19 pm
Мнения: 17
Мнение 
методи - БОЛ! Но всичко по реда си!

1.не знам какъв формат данни ти трябва за ЛСД-то ама най-лесно според мен е да си зеделиш 200 байта (2 байта за число в интервала 0-99) и да си направиш едно масивче директно с исходните стойности... тъпо, обемно, но бързо! макар че за обема може да се поспори - не знам колко място заемат инструкциите реализиращи двете деления...
но пък простотата на този метод е неоспорима - свежда се до едно четене от масив!

2.ако все пак си останеш на деленетото... ВНИМАНИЕ - едното деление може да го замениш със ВАДЕНЕ!!!
Код:
temp2 = T/10; // вече това е първо!!!
temp1 = T%10; // temp2=T-temp1;



3. самото делене можеш да направиш като си напишеш класическата функция за бързо делене:
Код:
int fastdiv(int big, int div){
  while ( big>0 )
    if  ( big impair )   
    then big-=div ;
    else big>>1;
  return big;}
...
while:
   bitfsc   big, 0   ; if ( big pair ) //za tselta proverka na nuleviya bit!
   goto   impair   ; FALSE
pair:         ; TRUE
   addlw   0x00   ; W + 0 => C flag clears ]:->
   rrf   big, F   ; big>>1;
   goto   re
impair:
   movf   div, W   ; div -> W
   subwf   big, F   ; big - W -> big
re:
   bitfsc   STATUS, Z
   goto while;
...


4.става и като работиш с BCD-числа! разликата от "стандартните" двоично-дестични е, че след всяко "двоично" събиране/вадене "подравняваш" - тоест добавяш 0x6/0x60 на тетрадата в коята има пренос(проверяваш битове C, DC). когато ти потрябват отделните цифри - "распакетираш"(тоест вземаш поотделно всяка от тях като маскираш другата с AND 0) тетрадите по една в байт и си готов!

5.ЦЕНЕН ПИК-СЪВЕТ: погледни в сайта на Мicrochip, там има примери за разни алгоритми преобразования, деления(и за какло ли не) и описания/доунлоад на всевъзможни библиотеки![/code]


Вто Сеп 20, 2005 10:11 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Сеп 19, 2005 12:49 am
Мнения: 61
Мнение 
Благодаря за прделожените варианти, но този код с деленено нещо неработи...

Код:
while:
   bitfsc   big, 0   ; if ( big pair ) //za tselta proverka na nuleviya bit!
   goto   impair   ; FALSE
pair:         ; TRUE
   addlw   0x00   ; W + 0 => C flag clears ]:->
   rrf   big, F   ; big>>1;
   goto   re
impair:
   movf   div, W   ; div -> W
   subwf   big, F   ; big - W -> big
re:
   bitfsc   STATUS, Z
   goto while;
[/code]


Чет Сеп 22, 2005 11:01 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение Re: Как би изглеждал този С код на асемблер за PIC16 примерн
...


Последна промяна на Пон Яну 30, 2012 5:03 am, променена общо 1 път



Чет Сеп 22, 2005 11:51 am
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Сеп 19, 2005 12:49 am
Мнения: 61
Мнение Re: Как би изглеждал този С код на асемблер за PIC16 примерн
Цитат:
Ами ровни се малко в сайта на MicroChip. Имат десетки AN с примери за деление и умножение.Освен това такава тема е за Академия, не е за тук, защото няма нищо сложно в това да разделиш 2 8-битови числа на асемблер за PICxxx


pirev, не ми се карай :( , малко съм неориентиран, но ще влезна в час. А това, че е лесно да разделиш две 8 битови числа е така, но като занеш алголитъма. На времето като са ми го преподавали това чудо, кой зане къде съм блеел като съм си мислел за какво ще са ми тия неща. Но ето че сега се наложи.


Чет Сеп 22, 2005 1:38 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Сеп 08, 2005 9:19 pm
Мнения: 17
Мнение 
ПЪРВО СЕ ИЗВИНЯВАМ за тотално грешния и дори безмислен алгоритъм за "делене" който съм написал... ама така става когато човек бърза - да ми е за урок да знам да не се излагам! Значи за умножение и деление има два подхода:

1.последователно събиране/вадене към/от делимото на делителя и при всеки цикъл инкрементираш с единица променливата-резултат
2.същото като по-горе, но когато делимото е четно го умножаваш/делиш на две, като съответно променливата-резултат също се удвоява! тука има един момент ако почнеш да умножаваш от самото начало резултата и си го занулил предварително :twisted: ... класическа ситуация...

няма да поставам повече алгоритми за да не напиша пак някоя глупост, само ще дам ей този готин линк: http://www.convict.lu/Jeunes/Math/Fast_operations2.htm

темата наистина е за академията :oops:


Съб Сеп 24, 2005 4:38 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Сеп 19, 2005 12:49 am
Мнения: 61
Мнение 
Благодаря много. Извинявам се че съм сложил темата тук, тя наистина е за академията.


Нед Сеп 25, 2005 1:02 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 9 мнения ] 

Кой е на линия

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


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

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