Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Въпрос за C
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7736
Страница 1 от 1

Автор:  E1 [ Вто Апр 13, 2010 7:56 pm ]
Заглавие:  Въпрос за C

Въпросът е по-скоро за МikroC. Има ли готова функция, която да прави следното: От две 8-битови променливи X_low и X_high да извлича 16-битова променлива, в която младшите 8 бита са X_low, а старшите X_high. Т.е. от две 8-битови променливи, да извлича 16-битова?

Автор:  Cekins [ Вто Апр 13, 2010 8:05 pm ]
Заглавие: 

А няма ли възможност 8-битовите да се дефинират като alias-и на една 16-битова. Някой компилатори това си го правят автоматично. Това което аз ползвам даже няма нужда да дефинирам алиаси - горния си го кръщава с едно Н накрая а с долния си работи като 8-бит ако го обработвам като такъв.

Автор:  E1 [ Вто Апр 13, 2010 8:12 pm ]
Заглавие: 

Виждал съм в други компилатори, че го има: X.low8=X_low; X.high8=X_high;
Но в момента ползвам MikroC и не знам как да го направя там. А ми се струва доста глупаво да разбия X_low и X_high и да въвеждам Х бит по бит, извличайки битовете от двете променливи. Имам доста такива променливи, които са 16-битови и кодът ще стане...

Автор:  relsys [ Вто Апр 13, 2010 8:30 pm ]
Заглавие: 

Код:
char X_low  absolute 0x20;
char X_high absolute 0x21;
int   X         absolute 0x20;


.... и няма да ти трябва да присвояваш стойности на Х.

Автор:  E1 [ Вто Апр 13, 2010 8:36 pm ]
Заглавие: 

Благодаря! Така стана! Отличен вариант!

Автор:  [ Вто Апр 13, 2010 8:51 pm ]
Заглавие: 

Така компилира ли се:
Код:

typedef union tagREG16 {
   struct {
      uint8 low;
      uint8 high;
   };
   uint16   reg16;
} REG16;

REG16   number = { 0x42/*low*/, 0xA5/*high*/ };

uint8 l,h;
uint16 n;

   l = number.low;
   h = number.high;
   n = number.reg16;


Автор:  E1 [ Чет Апр 15, 2010 1:20 am ]
Заглавие: 

Опитвам се да подкарам сензор за цветове на Sparkun: ADJD-S371 Обаче, изобщо не чува какво искам от него. Ползвам за база примерната програма за PIC и я преведох на MikroC. Но изобщо не иска да комуницира. Някой успявал ли е да го накара да работи? Не знам дали е дефект на сензора или е грешка в кода. Установих, че при опит за комуникация през I2C, програмата забива точно след подаването на "старт". За преминаване от 5-3,3-5 V съм използвал схема за конвертор на ниво с BSS138. Ето примерен код за четене на адрес:

I2C1_Init(100000);
I2C1_Start();
I2C1_Wr(0xE8);
I2C1_Wr(0x44);

I2C1_Repeated_Start();
I2C1_Wr(0xE9);
in_byte = I2C1_Rd;
I2C1_Stop();

Спира изпълнението след "Start".

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/