| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Превръщане на 32BITово число в ASCII символи... http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=3056 |
Страница 1 от 2 |
| Автор: | edi [ Чет Окт 12, 2006 4:15 pm ] |
| Заглавие: | Превръщане на 32BITово число в ASCII символи... |
Здравейте! Трябва ми идея как да конвертирам 32битово число така че да стане в ASCII код за да мога след това число по число да ги изпратя към дисплея за да се визуализират?Всяко число от ASCII кода трябва да е в отделен байт.Пример : Temp0 = h'2f' Temp1 = h'45' ->Старши байт Следователно числото е : 17 711 num0 = d'1' num1 = d'1' num2 = d'7' и т.н. един по един ги изпраштам към дисплея! Контролера е 16f870.Благодаря за вниманието |
|
| Автор: | darkyp [ Чет Окт 12, 2006 5:04 pm ] |
| Заглавие: | |
докато числото е <> 0 numX = числото mod 10, числото = числото div 10. примера е с 16 битово число. Наистина ли искаш 32 битово? |
|
| Автор: | paregov [ Чет Окт 12, 2006 5:12 pm ] |
| Заглавие: | |
Един вариант на С: char Num[20]; long int Number = 23232; sprintf(Num, "%l", &Number); |
|
| Автор: | edi [ Чет Окт 12, 2006 6:38 pm ] | |||||||||
| Заглавие: | ||||||||||
Зависи какви честоти ще меря...т.е. при ниски ще бъдат около 20бита а при максимали около 32 бита.Направих го с повече разряди т.к. ми трябва по голяма резолюция...около 600Hz. |
||||||||||
| Автор: | Cekins [ Чет Окт 12, 2006 7:50 pm ] |
| Заглавие: | |
Ами те май всички компилатори имат команда която го поддържа, примерно (сега от това всички ще скочат ама ко да се прай) на picbasic+ е следното : Print DEC Num32. Другия вариант е следния: ако числото е по-голямо примерно от 999 делиш го на хиляда. Резултата ти е най-старшата цифра (+32 и става ASCII). Остатъка го намираш и пак само, че Х>99 делиш на сто и т.н. Аз така правя. Ама трябва да почнеш от най-голямата разрядност. В случая на 32 бита ще е 999999999 |
|
| Автор: | Nikola Kirov [ Чет Окт 12, 2006 8:01 pm ] | |||||||||
| Заглавие: | ||||||||||
С тия пикове и бейсици ще ви закърнеят мозъците
които не обича goto лесно се преправя кода В нормалните компилатори и нормалните процесори такова решение с goto дава по раздут код,или поне същия по обем но така е при вездесъщите PIC,нищо не е както трябва. digits -> Брой символи до които се допълва с type Пример lcd_PrintNumberExt (112,4,'0'); ще изпише 0112 |
||||||||||
| Автор: | Dimiter [ Чет Окт 12, 2006 9:35 pm ] |
| Заглавие: | |
Ей това съм го писал за пик (на CCS) , работи и се използва в момента // функция print не е към компилатора декларацията и е: void print(byte data); /* void print_float(float data,byte num); void print32(unsigned int32 data,byte num); <-------- туй void print16(unsigned int16 data,byte num); void print8(byte data,byte num); void print_hex(byte data); */ byte dig[10]; //----------------------------------------------------------- void print32(unsigned int32 data,byte num) // num=брой изписани декади, при 0 - колкото са толкоз { unsigned int32 data1,data2; byte i,j,temp; memset(dig,0xff,sizeof(dig)); if(num>10){num=10;} // против уроки for(i=0;i<10;i++) { data1=data/10;data2=data1*10; dig[i]=data-data2; if(data1==0) { break; } data=data1; } if(num){j=10-num;}else{j=0;} for(i=0;i<10;i++) { temp=dig[9-i]; if(num) { if(temp==0xff){temp=0;} if(i>=j) {print(temp+0x30);} } else { if(temp!=0xff){print(temp+0x30);} } } } |
|
| Автор: | Gogo [ Пет Окт 13, 2006 12:01 am ] | |||||||||
| Заглавие: | ||||||||||
Айде и от мене едно парче:
|
||||||||||
| Автор: | ¶ [ Пет Окт 13, 2006 12:59 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
От Help системата на CCS C:
В string получаваш ASCII символите. |
|||||||||||||||||||
| Автор: | the_real_maniac [ Пет Окт 13, 2006 1:34 am ] |
| Заглавие: | |
pirev , но колко ли време отнема е интересно да се види. /сравни ака |
|
| Автор: | Nikola Kirov [ Пет Окт 13, 2006 1:57 am ] |
| Заглавие: | |
sprintf ползва същия код като printf само дето изхода е в буфер. Но като цяло printf е тежка функция. Може да се ползва ако не те бърка време и заемано място. При IAR системата е малко по гъвкава. Не съм виждал по другите компилатори такава опция /не казвам че няма с сигурност/. Там имаш опция за prinf като има 4 варианта Full,Large,Tiny,Small. В Small е с много орязана функционалност но за случая ще стане. А full много тежък но е с цялата полагаща се функционалност на тая функция. Предполагам че и в други компилатори има но вероятно става като се дефинира променлива която превключва функционалноста на printf директно в кода на съответната библиотека. |
|
| Автор: | ¶ [ Пет Окт 13, 2006 3:10 am ] | |||||||||
| Заглавие: | ||||||||||
Не е кой знае колко интересно, сравнявал съм моя sprintf функция, която разпечатва само float числа и универсалната такава на CCS. Като бързодействие моята разпечатва на 2,75MHz за 2-3 ms, на CCS с 0,5ms отгоре, като код, моята с около 100 байта по-малка. Само че на CCS поддържа доста формати, докато моята само float |
||||||||||
| Автор: | edi [ Пет Окт 13, 2006 12:25 pm ] |
| Заглавие: | |
Не съм писал на С...само асемблер, но ще седна да почета малко. Има ли възможност да се комбинират и двата езика.Примерно част от кода да е на Асемблер друга част да е на С? |
|
| Автор: | mndsl [ Пет Окт 13, 2006 2:32 pm ] | |||||||||
| Заглавие: | ||||||||||
Да има. Всеки С компилатор поддържа и асемблер, но не винаги е съвместим с него. Т.е. една програма написана за MPASM примерно е възможно да не може да се компилира с друг асемблер. За тази цел може да се позлва MPLINK , обаче С компилатора на майкрочип поддържа само 18-та и 30-та серия, което е спънка ако използваш друг вид процесор. |
||||||||||
| Автор: | edi [ Съб Окт 14, 2006 9:18 am ] | |||||||||
| Заглавие: | ||||||||||
Ясно.Ще го мисля на асемблер за сега. |
||||||||||
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|