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

 
 
> Как 4 байта в unsigned long ?, Есть ли в WinAVR готовые функции?
Who_are_you?
сообщение Jun 21 2018, 11:11
Сообщение #1


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

Группа: Участник
Сообщений: 185
Регистрация: 5-02-10
Из: Донецк
Пользователь №: 55 329



Есть ли в WinAVR готовые функции?
Нужно 4 байта всунуть в long и отобразить на LCD.
Готовых решений в Инете не нашел.

Код
// ...
void LCD_WriteText (char font, char * text)   // функция отображения текста
// ...
#define   BUFFER_SIZE  255 // buffer for receving/sending messages
unsigned char RxBuf [BUFFER_SIZE];  //
unsigned long freeMemSD;
char buffe[11];

RxBuf[8]  =1;     // Highest
RxBuf[9]  =2;     // Higher
RxBuf[10] =3;    // Hi
RxBuf[11] =4;    // Lo

// freeMemSD <-- (Highest, Higher, Hi, Lo );
// buffe <-- freeMemSD;
LCD_WriteText (16,buffe);  // выводит символы на экран
// может можно как-то обойтись без long ?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Who_are_you?
сообщение Jun 21 2018, 12:12
Сообщение #2


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

Группа: Участник
Сообщений: 185
Регистрация: 5-02-10
Из: Донецк
Пользователь №: 55 329



Написано:
Нужно 4 байта всунуть в long и отобразить на LCD.
Код
unsigned int xx,rr;

RxBuf[11] = 0x00;
RxBuf[12] = 0x01;
RxBuf[13] = 0x00;
RxBuf[14] = 0x02;
rr = ((unsigned char)RxBuf[11]<<8) | RxBuf[12]; // 0x0001
xx = ((unsigned char)RxBuf[13]<<8) | RxBuf[14]; // 0x0002
freeMemSD = (rr<<16) | xx; // почему не '65538' (0x00010002), а '2'
Go to the top of the page
 
+Quote Post
Who_are_you?
сообщение Jun 21 2018, 13:15
Сообщение #3


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

Группа: Участник
Сообщений: 185
Регистрация: 5-02-10
Из: Донецк
Пользователь №: 55 329



Так работает:
Код
#define   BUFFER_SIZE  255 // buffer for receving/sending messages
unsigned char RxBuf [BUFFER_SIZE];  //
unsigned long freeMemSD;
char buffe[11];
unsigned int xx,rr;

RxBuf[11] = 0x00;    // Highest
RxBuf[12] = 0x01;    // Higher
RxBuf[13] = 0x00;    // Hi
RxBuf[14] = 0x02;    // Lo
rr = ((unsigned char)RxBuf[11]<<8) | RxBuf[12]; // 0x0001
xx = ((unsigned char)RxBuf[13]<<8) | RxBuf[14]; // 0x0002
freeMemSD = rr;
freeMemSD = (freeMemSD <<16) | xx;    //  '65538' (0x00010002)
ultoa(freeMemSD, buffe, 10);

LCD_WriteText (16,buffe);  // выводит символы на экран

Но как-то не то и для AVR длинно.
Может можно без long и короче?

Сообщение отредактировал Who_are_you? - Jun 21 2018, 13:18
Go to the top of the page
 
+Quote Post



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

 


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


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