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

 
 
> Вопрос по 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
Ответов
prottoss
сообщение Feb 3 2008, 17:14
Сообщение #2


Гуру
******

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



Код
/* integer */
typedef int     INT;
typedef signed int   SINT;
typedef unsigned int  UINT;
#define MAXUINT    ((UINT)(-1))

/* byte */
typedef char    CHAR;
typedef signed char   SCHAR;
typedef unsigned char  UCHAR;

typedef CHAR    INT8;
typedef SCHAR    SINT8;
typedef UCHAR    UINT8;
#define MAXUINT8   ((UINT8)(-1))

/* word */
typedef short    INT16;
typedef signed short  SINT16;
typedef unsigned short  UINT16;
#define MAXUINT16   ((UINT16)(-1))

/* double word */
typedef long    INT32;
typedef signed long   SINT32;
typedef unsigned long  UINT32;
#define MAXUINT32   ((UINT32)(-1))

/* quad word */
typedef long long   INT64;
typedef signed long long SINT64;
typedef unsigned long long UINT64;
#define MAXUINT64   ((UINT64)(-1))



/* utils */
#define MAKEUINT16(byte_h, byte_l) ((UINT16)(((UINT16)byte_h << 8)|(UINT16)byte_l))
#define HIBYTE(word)    ((UINT8)((UINT16)word >> 8))
#define LOBYTE(word)    ((UINT8)((UINT16)word & 0xff))

#define MAKEUINT32(word_h, word_l) ((UINT32)(((UINT32)word_h << 16)|(UINT32)word_l))
#define HIWORD(longv)    ((UINT16)((UINT32)longv >> 16))
#define LOWORD(longv)    ((UINT16)((UINT32)longv & 0xffff))

#define SWAP16(n16)     (MAKEUINT16(LOBYTE(n16), HIBYTE(n16)))
#define SWAP32(n32)     (MAKEUINT32(SWAP16(LOWORD(n32)), SWAP16(HIWORD(n32))))


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 2 2008, 08:15
Сообщение #3


Гуру
******

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



Цитата(prottoss @ Feb 3 2008, 20:14) *

Маски совершенно лишние, зато скобок не хватает sad.gif


Цитата(interrupt @ Mar 2 2008, 01:08) *
А я бы сделал через union.

Замучаешься и запутаешся все переменые, которые может потребоваться побайтно запихнуть через union-ы описывать и использовать, или типы преобразовывать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:29
Рейтинг@Mail.ru


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