Отговори на тема  [ 9 мнения ] 
Подпрограмка за... 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

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

Някой има ли други идеи ?
Приемам само на .asm :D :D :D


Сря Ное 01, 2006 1:47 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Фев 22, 2006 6:27 pm
Мнения: 376
Местоположение: plovdiv
Мнение 
:axe:
Хубаво приемаш а какво даваш? :D
Как си го мислите бе хора да си правите курсовите проекти по форумите без да сте прочели и 1 ред теория отнякъде.


Сря Ное 01, 2006 2:55 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
char* itoa(unsigned char i)
{
char a[4];
a[3]=(i/100)+48;
a[2]=(i/10)+48;
a[1]=( i-(a[0]+a[1])-48 );
a[0]='\0';

return a;
}

... тва ти нагледно как се прави .. ти си го транслираи на асм.

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Сря Ное 01, 2006 3:20 pm
Профил ICQ WWW
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пет Ное 26, 2004 9:50 pm
Мнения: 374
Мнение 
30, ама в шестнайстичен код :) което става 48 - както го е написал BrainStorm


Сря Ное 01, 2006 5:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
BrainStorm

char a[4]; го създаваш в стека а връщаш указател към него.
Ако кода трябва да работи без бъгове :)

Код:
void itoa(unsigned char i,char * a)
{
a[2]=(i/100)+48;
a[1]=(i/10)+48;
a[0]=( i-(a[0]+a[1])-48 );
}


като при викането на фуккцията и даваш адреса на буфера в които да ти запише изхода


Сря Ное 01, 2006 5:49 pm
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
колеги допускате една и съща грешка :)
но ще си затрая защото тая тема сме я коментирали и сорсове са постнати


Сря Ное 01, 2006 10:54 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

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

Дай линк към коментираната тема.
Между другото аз се справих със задачата и преобразувам от шеснайсетичен вид в десетичен.
Образно казано стойността от брояча в шеснайсетичен вид я събирам с шеснайсетичното число Н'30'
при което старшата част на новополученото число (т.е. 3) съвпада сколоната на аски таблицата на дисплея за цифрите, а младшата част съвпада с числото , което ми трябва.
Мисля , че това за сега е най-рационалния начин.
Имате ли други идеи ?
Бих бил доволен ако са в асм вид ;)
P.S. Не става въпрос за курсова или каквато и да било друга работа.
Искам да се науча да работя с тези микроконтролери.
Занимавам се със сигнално-охранителна техника, която изцяло е изградена с тези ПИК микроконтролери.
Неможете да си представите само какво щастие беше за мен, когато си изясних принципа на лсд дисплеите.


Чет Ное 02, 2006 12:20 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Чет Ное 10, 2005 9:26 pm
Мнения: 393
Местоположение: Buffalo, NY, USA
Мнение 
Код:
void itoa( unsigned char i, char * a )
{
   a[2] = i/100 + 0x30;                                    // hundreds converted to ASCII
   a[1] = ( i - ( i/100 ) * 100 ) /10 + 0x30;        // tens converted to ASCII
   a[0] = i%10 + 0x30;                                    // single digits converted to ASCII
}

_________________
http://blog.georgievi.com


Чет Ное 02, 2006 1:14 am
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Окт 02, 2005 9:02 pm
Мнения: 73
Местоположение: Варна
Мнение 
Код:
;==============================================================================
;Преобразуване на двоично към BCD число
;                      L M
;Входни променливи:      BCDi<0-3> - Входно число
;                      L M
;Изходни променливи:    BCDo<0-3> - Изходно 8 цифрено число
;
;Помощни променливи:   Count
;==============================================================================
Bin1_BCD            ;8 битово число
   movlw   8
   goto   BBCD_Beg
Bin2_BCD            ;16 битово число
   movlw   16
   goto   BBCD_Beg
Bin4_BCD            ;32 битово число
   movlw   .32
BBCD_Beg
   movwf   Count
   clrf   BCDo0
   clrf   BCDo1
   clrf   BCDo2
   clrf   BCDo3
BBCD_Loop
   rlf      BCDi0,f
   rlf      BCDi1,f
   rlf      BCDi2,f
   rlf      BCDi3,f
   rlf      BCDo0,f
   rlf      BCDo1,f
   rlf      BCDo2,f
   rlf      BCDo3,f
if 1 ;Are we want ovefrlow check
   ;Is overflow
   btfss   STATUS,C
   goto   BBCD_DecCnt
   movlw   0xcc      ;Error code on my LEDs
   movwf   BCDo0
   movwf   BCDo1
   movwf   BCDo2
   movwf   BCDo3
   return
endif
BBCD_DecCnt
   ;Is Count over?
   decf   Count,f
   btfsc   STATUS,Z
   return            ;Yes
   ;Adjust digits      ;No
   movlw   BCDo0
   movwf   FSR
BBCD_AdjNex
   movlw   0x33
   addwf   INDF,f
   btfsc   INDF,3          ; test if result > 7
   andlw   0xf0
   btfsc   INDF,7          ; test if result > 7
   andlw   0x0f
   subwf   INDF,f   
   ;Increment & test
   movf   FSR,w
   incf   FSR,f
   xorlw   BCDo3         ;Is last ajusted is BCDo0
   btfss   STATUS,Z
   goto   BBCD_AdjNex      ;No
   goto   BBCD_Loop      ;Yes
;Bin3_BCD END


Пон Ное 13, 2006 12:22 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 9 мнения ] 

Кой е на линия

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


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

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