реклама на сайте
подробности

 
 
> Вопрос по WinAVR, как разбить int на два char
sergeus
сообщение Feb 3 2008, 16:04
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Здравствуйте! Не смог разобраться, как сделать чтобы функция принимаящая int-овое значение записала младший байт в один регист, а старший в другой?

void pwm_out(int level){


OCR1AH = ??
OCR1AL = ??

return 0;
}

С уважением, Сергей

P.S. посоветуйте пожалуйста какой-нибудь help по WinAVR
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Mar 2 2008, 10:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(prottoss @ Mar 2 2008, 13:24) *
Арифметические операции выше по приоритету, чем логические (побитовые в том числе), Так что я не вижу криминала.

Вы на верном пути smile.gif просто я совершенно неподумав sad.gif "+" в примере поствил, но сути это не меняет - смотрим другие, которые ниже по приоритету, чем ">>":
с = HIBYTE( a | b );
Как эффект?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
prottoss
сообщение Mar 2 2008, 15:28
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(zltigo @ Mar 2 2008, 17:57) *
Вы на верном пути smile.gif просто я совершенно неподумав sad.gif "+" в примере поствил, но сути это не меняет - смотрим другие, которые ниже по приоритету, чем ">>":
с = HIBYTE( a | b );
Как эффект?
Да, согласен. Хотя я не помню, чтоб пользовался вычислениями в параметре макросов, скобки обязательно нужны. Спасибо smile.gif Одним потенциальным затыком меньше

Думаю, вот так будет правильно, учитывая, что "...Маски совершенно лишние..."

Код


/* Utils */
#define MAKEUINT16(byte_h, byte_l) ((UINT16)(((UINT16)((byte_h) << 8))|(UINT16)(byte_l)))
#define HIBYTE(word)    ((UINT8)((word) >> 8))
#define LOBYTE(word)    ((UINT8)word)

#define MAKEUINT32(word_h, word_l) ((UINT32)(((UINT32)((word_h) << 16))|(UINT32)word_l))
#define HIWORD(dword)    ((UINT16)((dword) >> 16))
#define LOWORD(dword)    ((UINT16)dword)


--------------------
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 23:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016