Отговори на тема  [ 7 мнения ] 
Въпрос за C 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Юли 22, 2007 8:57 pm
Мнения: 607
Местоположение: Белград
Мнение Въпрос за C
Въпросът е по-скоро за МikroC. Има ли готова функция, която да прави следното: От две 8-битови променливи X_low и X_high да извлича 16-битова променлива, в която младшите 8 бита са X_low, а старшите X_high. Т.е. от две 8-битови променливи, да извлича 16-битова?


Вто Апр 13, 2010 7:56 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
А няма ли възможност 8-битовите да се дефинират като alias-и на една 16-битова. Някой компилатори това си го правят автоматично. Това което аз ползвам даже няма нужда да дефинирам алиаси - горния си го кръщава с едно Н накрая а с долния си работи като 8-бит ако го обработвам като такъв.


Вто Апр 13, 2010 8:05 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

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


Вто Апр 13, 2010 8:12 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение 
Код:
char X_low  absolute 0x20;
char X_high absolute 0x21;
int   X         absolute 0x20;


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


Вто Апр 13, 2010 8:30 pm
Профил ICQ WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Юли 22, 2007 8:57 pm
Мнения: 607
Местоположение: Белград
Мнение 
Благодаря! Така стана! Отличен вариант!


Вто Апр 13, 2010 8:36 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Така компилира ли се:
Код:

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;


_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Апр 13, 2010 8:51 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Юли 22, 2007 8:57 pm
Мнения: 607
Местоположение: Белград
Мнение 
Опитвам се да подкарам сензор за цветове на 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".


Чет Апр 15, 2010 1:20 am
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 7 мнения ] 

Кой е на линия

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


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

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