|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 9:10 am
|
Страница 1 от 1
|
[ 14 мнения ] |
|
| Автор |
Съобщение |
|
Svetoslav40
Ранг: Минаващ
Регистриран на: Съб Сеп 17, 2005 11:12 pm Мнения: 95 Местоположение: Shumen
|
 CCS и двубаитови числа
Халоа на всички, аз пак ще ви досаждамм, ама ко да се праи, то по друг начин маи няя да стане....
Имам следния проблем, искам да си сложа брояч на компа, които да ми брои ключванията на машината, до тука добре, всичко бачка, брои, отчита, кот съм му казал туи праи (брояча), ама проблема ми е в това че нямам идея (по-точно казано не знам как да стане) как да съхраня числата по-големи от 255 или FF в епрома и после да ги прочета като едно зяло число > 255, демек трябва да използвам 2 баита, а не съм се научил как се прави (записа в еепрома нее проблем). Мене ми е ясно че го пише в хелпа на CCS, ама някак си ми е по лесно като ми го обясни някои хюман, ония не се научиха да пишат хелпове...поне на мене ми е трудно с тях. Благодаря предварително.
|
| Вто Дек 06, 2005 2:02 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Ами в IAR e
__noinit __eeprom int Broqch ///Deklarirash Promenliwata w eeproma globalno
Broqch++; /// i si rabotish kato s normalna promenliwa.
предполагам че и там е нещо подобно . Компилатора трябва да си знае работата.
|
| Вто Дек 06, 2005 2:08 pm |
|
 |
|
TheHungry
Ранг: Почетен член
Регистриран на: Съб Сеп 03, 2005 11:31 am Мнения: 766 Местоположение: Пловдив
|
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
подобно е и за останалите типове има го в хелпа и по подробно не мога дори и аз да го обясня  , не че не може да се направи и по елегантно но то е за конкретен случай.
Последна промяна TheHungry на Вто Дек 06, 2005 2:34 pm, променена общо 1 път
|
| Вто Дек 06, 2005 2:30 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
При всички положения компилатора работи с числа по-широки от 1 байт. Примерно long, който си е 4 байта. Записваш го и го четеш като най-обикновен масив.
|
| Вто Дек 06, 2005 2:30 pm |
|
 |
|
TheHungry
Ранг: Почетен член
Регистриран на: Съб Сеп 03, 2005 11:31 am Мнения: 766 Местоположение: Пловдив
|
CCS мисля че не поддържаше стандартно писане на числа по големи от BYTE в EEPROM-а , но не съм сигурен тъй като не го ползвам.
|
| Вто Дек 06, 2005 2:41 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
 Чисто и просто като милиционер след баня
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)
Илиминтарно Ватсон 
|
| Вто Дек 06, 2005 8:13 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
write_eeprom(0,value>> тука има осмица ама съвпадна с някво емотиконче
тоест стойноста на value отместена с 8 бита на дясно
|
| Вто Дек 06, 2005 8:16 pm |
|
 |
|
TheHungry
Ранг: Почетен член
Регистриран на: Съб Сеп 03, 2005 11:31 am Мнения: 766 Местоположение: Пловдив
|
При мен е още по елементарно но не ползвам CCS :
eeprom unsigned long Counter ;
void main ( void )
{
Counter++;
}
|
| Сря Дек 07, 2005 12:05 pm |
|
 |
|
Svetoslav40
Ранг: Минаващ
Регистриран на: Съб Сеп 17, 2005 11:12 pm Мнения: 95 Местоположение: Shumen
|
Стана, не то4но както го е писал Dimiter, с малко разлика....както и да е... Постнал съм кода които сготвих, обаче има един проблем. Това нещо ми праща стоиността на брояча през RS, про включване изпраща "ON:000" както си му е редно, ама това нещо стига до "999" и после пак "000", не че ме вълнува толкова, но все пак, ЗАЩО?
count e int16, времената са нарочно в us, за тестване....
|
| Сря Дек 07, 2005 1:14 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
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);
|
| Сря Дек 07, 2005 4:07 pm |
|
 |
|
Svetoslav40
Ранг: Минаващ
Регистриран на: Съб Сеп 17, 2005 11:12 pm Мнения: 95 Местоположение: Shumen
|
|
| Сря Дек 07, 2005 10:46 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
Това горе дето трепа риба е пример да разцепиш 4 цифрено
число на хилядарки,стотици,десетици ,единици и ги конвертираш
до ASCII символи защото числото 12345 не е равно на стринга "12345"
Понимаеш?
|
| Чет Дек 08, 2005 1:04 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
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 знака ако се не лъжа,
ама тя аналогията е ясна и за по-големи такива.
|
| Чет Дек 08, 2005 1:11 pm |
|
 |
|
Svetoslav40
Ранг: Минаващ
Регистриран на: Съб Сеп 17, 2005 11:12 pm Мнения: 95 Местоположение: Shumen
|
ааааа, аха, сеа вече разбрах.
то инак приличаше на предстартовото броене на инжектоплякторносветлинен трансгалактичен кораб.
ам, зада не отварям нова тема, ще метна тука още едно нещо....трябва ми начална скорост на мисалта за това, как да проследя (PIC, CCS) светодиода на компютъра, в момента дали е лог1, лог0 или мига? нещо се омотах из прекъсванията, мисля си че с прекъсвания трябва да стане или? идеи?
|
| Пет Дек 09, 2005 12:25 pm |
|
|
|
Страница 1 от 1
|
[ 14 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|