| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| CCS и двубаитови числа http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=1384 |
Страница 1 от 1 |
| Автор: | Svetoslav40 [ Вто Дек 06, 2005 2:02 pm ] |
| Заглавие: | CCS и двубаитови числа |
Халоа на всички, аз пак ще ви досаждамм, ама ко да се праи, то по друг начин маи няя да стане.... Имам следния проблем, искам да си сложа брояч на компа, които да ми брои ключванията на машината, до тука добре, всичко бачка, брои, отчита, кот съм му казал туи праи (брояча), ама проблема ми е в това че нямам идея (по-точно казано не знам как да стане) как да съхраня числата по-големи от 255 или FF в епрома и после да ги прочета като едно зяло число > 255, демек трябва да използвам 2 баита, а не съм се научил как се прави (записа в еепрома нее проблем). Мене ми е ясно че го пише в хелпа на CCS, ама някак си ми е по лесно като ми го обясни някои хюман, ония не се научиха да пишат хелпове...поне на мене ми е трудно с тях. Благодаря предварително. |
|
| Автор: | Nikola Kirov [ Вто Дек 06, 2005 2:08 pm ] |
| Заглавие: | |
Ами в IAR e __noinit __eeprom int Broqch ///Deklarirash Promenliwata w eeproma globalno Broqch++; /// i si rabotish kato s normalna promenliwa. предполагам че и там е нещо подобно . Компилатора трябва да си знае работата. |
|
| Автор: | TheHungry [ Вто Дек 06, 2005 2:30 pm ] |
| Заглавие: | |
How do I write variables to EEPROM that are not a byte? The following is an example of how to read and write a floating point number from/to EEPROM. The same concept may be used for structures, arrays or any other type. n is an offset into the eeprom. For floats you must increment it by 4. For example, if the first float is at 0 the second one should be at 4 and the third at 8. WRITE_FLOAT_EXT_EEPROM(long int n, float data) { int i; for (i = 0; i < 4; i++) write_ext_eeprom(i + n, *(&data + i) ) ; } float READ_FLOAT_EXT_EEPROM(long int n) { int i; float data; for (i = 0; i < 4; i++) *(&data + i) = read_ext_eeprom(i + n); return(data); } REM "write_ext_eeprom" -> го заменяш със -> "write_eeprom" ^ |_ това ми е останало от BASIC-а P.S подобно е и за останалите типове има го в хелпа и по подробно не мога дори и аз да го обясня |
|
| Автор: | Реконструктор [ Вто Дек 06, 2005 2:30 pm ] |
| Заглавие: | |
При всички положения компилатора работи с числа по-широки от 1 байт. Примерно long, който си е 4 байта. Записваш го и го четеш като най-обикновен масив. |
|
| Автор: | TheHungry [ Вто Дек 06, 2005 2:41 pm ] |
| Заглавие: | |
CCS мисля че не поддържаше стандартно писане на числа по големи от BYTE в EEPROM-а , но не съм сигурен тъй като не го ползвам. |
|
| Автор: | Dimiter [ Вто Дек 06, 2005 8:13 pm ] |
| Заглавие: | Чисто и просто като милиционер след баня |
int16 counter; void write_counter(int 16 value) { write_eeprom(0,value>>8); //адреса си го определяш ти естествено може и да е променлива write_eeprom(1,value); } int16 read_counter(void) { return make16(read_eeprom(0),read_eeprom(1)); } Аналогично и за по големи променливи има и int32 и make32(byte,byte,byte,byte) Илиминтарно Ватсон |
|
| Автор: | Dimiter [ Вто Дек 06, 2005 8:16 pm ] |
| Заглавие: | |
write_eeprom(0,value>> тука има осмица ама съвпадна с някво емотиконче тоест стойноста на value отместена с 8 бита на дясно |
|
| Автор: | TheHungry [ Сря Дек 07, 2005 12:05 pm ] |
| Заглавие: | |
При мен е още по елементарно но не ползвам CCS : eeprom unsigned long Counter ; void main ( void ) { Counter++; } |
|
| Автор: | Svetoslav40 [ Сря Дек 07, 2005 1:14 pm ] | |||||||||
| Заглавие: | ||||||||||
Стана, не то4но както го е писал Dimiter, с малко разлика....както и да е... Постнал съм кода които сготвих, обаче има един проблем. Това нещо ми праща стоиността на брояча през RS, про включване изпраща "ON:000" както си му е редно, ама това нещо стига до "999" и после пак "000", не че ме вълнува толкова, но все пак, ЗАЩО?
count e int16, времената са нарочно в us, за тестване.... |
||||||||||
| Автор: | Dimiter [ Сря Дек 07, 2005 4:07 pm ] |
| Заглавие: | |
printf("ON:"); putc(0x30+(count-abs(count/10000)*10000)/1000); putc(0x30+(count-abs(count/1000)*1000)/100); putc(0x30+(count-abs(count/100)*100)/10); putc(0x30+(count-abs(count/10)*10)); putc(0x0a);putc(0x0d); |
|
| Автор: | Svetoslav40 [ Сря Дек 07, 2005 10:46 pm ] |
| Заглавие: | |
Много благодаря на всчки за помощта, оказа се 4е имало повече от една пътека към Рим, но с идеята на Димитер, се видя че може и по-простичко да стане.... само дето с последният си пост, тои изби рибата. Ако може да ми обясните като на начинаещ, защо са нужни в тоя случаи такива акробатики? Нали инт16 е двубаитово число и може да съдържа число до 65535? |
|
| Автор: | Dimiter [ Чет Дек 08, 2005 1:04 pm ] |
| Заглавие: | |
Това горе дето трепа риба е пример да разцепиш 4 цифрено число на хилядарки,стотици,десетици ,единици и ги конвертираш до ASCII символи защото числото 12345 не е равно на стринга "12345" Понимаеш? |
|
| Автор: | Dimiter [ Чет Дек 08, 2005 1:11 pm ] |
| Заглавие: | |
putc(0x30+(count-abs(count/10000)*10000)/1000); <- хилядарки putc(0x30+(count-abs(count/1000)*1000)/100); <-стотици putc(0x30+(count-abs(count/100)*100)/10); <- десетици putc(0x30+(count-abs(count/10)*10)); <- единици putc(0x0a);putc(0x0d); <-нов ред и ентер '1' ASCII code 0x30+1 Малко ме мързи да пиша ако ти е зор ще ти пратя едно копи-пасте от една моя процедура за принтване на десетични числа до 7 знака ако се не лъжа, ама тя аналогията е ясна и за по-големи такива. |
|
| Автор: | Svetoslav40 [ Пет Дек 09, 2005 12:25 pm ] |
| Заглавие: | |
ааааа, аха, сеа вече разбрах. то инак приличаше на предстартовото броене на инжектоплякторносветлинен трансгалактичен кораб. ам, зада не отварям нова тема, ще метна тука още едно нещо....трябва ми начална скорост на мисалта за това, как да проследя (PIC, CCS) светодиода на компютъра, в момента дали е лог1, лог0 или мига? нещо се омотах из прекъсванията, мисля си че с прекъсвания трябва да стане или? идеи? |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|