код
unsigned char xdata RxBuffer[0xff],i;
float xdata f_var;
i=0xff;
do{
fvar=(float)((unsigned int) RxBuffer[1]);
fvar*=0.05;
fvar+=4.2;
printf("Ubat=%2.2f",fvar);
i--;
} while(i!=0);
/* при значении RxBuffer[1] : 0-127 все считается прекрасно
* при RxBuffer[1] : 128 - 255 расчет идет не верно
*
*/
Преобразование чисел с плавающей точкой ?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Преобразование чисел с плавающей точкой ?
FUZZY_, вы на форуме задавали с десяток вопросов, и НИ ОДНОГО РАЗА не задали так, чтобы другие смогли понять, что же вы хотите.
конкретно сейчас: что за компилятор? что за платформа? что такое xdata? тут все должны гадать или вы все-таки смилостиветесь и поделитесь сокровенным?
ваш код проверен в WinAVR (c небольшими правками, не меняющими сути) - он рабочий.
вы написали fvar=(float)((unsigned int) RxBuffer[1]); - это на 100% эквивалентно записи fvar = RxBuffer[1]; - ваша запись похожа на паранойю, хотя и вполне работоспособна.
конкретно сейчас: что за компилятор? что за платформа? что такое xdata? тут все должны гадать или вы все-таки смилостиветесь и поделитесь сокровенным?
ваш код проверен в WinAVR (c небольшими правками, не меняющими сути) - он рабочий.
вы написали fvar=(float)((unsigned int) RxBuffer[1]); - это на 100% эквивалентно записи fvar = RxBuffer[1]; - ваша запись похожа на паранойю, хотя и вполне работоспособна.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Преобразование чисел с плавающей точкой ?
Среда KEIL 7 для MCS-51 (i8051, i8052)
data — размещение во внутреннем ОЗУ процессора, младшие 128 байт. Обращение посредством прямой адресации и косвенной адресации через индексные регистры R0, R1 (инструкции процессора пересылки данных MOV @R0).
idata — размещение во внутреннем ОЗУ процессора, все 256 байт. Обращение только посредством косвенной адресации через индексные регистры R0, R1 (инструкции процессора пересылки данных MOV @R0).
bdata — размещение в побитно адресуемой области памяти внутреннего ОЗУ (адреса 0x20-0x2F)
pdata — размещение во внешней памяти. Размер памяти ограничен 256 байтами. Доступ посредством косвенной адресации через индексные регистры R0, R1 (инструкции процессора пересылки данных MOVX @R0).
xdata — размещение во внешней памяти. Размер памяти ограничен 64 КБ. Доступ посредством косвенной адресации через индексный регистр DPTR (инструкции процессора пересылки данных MOVX @DPTR).
code — размещение константных данных в области памяти программ. Размер памяти ограничен 64 КБ. Только чтение данных посредством косвенной адресации через индексный регистр DPTR или регистр PC и указание смещения в аккумуляторе ACC (инструкции процессора MOVC A,@A+DPTR; MOVC A,@A+PC).
far — внешняя память данных, адресация до 16 МБ.
Для определения SFR регистров используются квалификаторы sfr и sfr16 (для байтовых и двухбайтовых переменных соответственно).
data — размещение во внутреннем ОЗУ процессора, младшие 128 байт. Обращение посредством прямой адресации и косвенной адресации через индексные регистры R0, R1 (инструкции процессора пересылки данных MOV @R0).
idata — размещение во внутреннем ОЗУ процессора, все 256 байт. Обращение только посредством косвенной адресации через индексные регистры R0, R1 (инструкции процессора пересылки данных MOV @R0).
bdata — размещение в побитно адресуемой области памяти внутреннего ОЗУ (адреса 0x20-0x2F)
pdata — размещение во внешней памяти. Размер памяти ограничен 256 байтами. Доступ посредством косвенной адресации через индексные регистры R0, R1 (инструкции процессора пересылки данных MOVX @R0).
xdata — размещение во внешней памяти. Размер памяти ограничен 64 КБ. Доступ посредством косвенной адресации через индексный регистр DPTR (инструкции процессора пересылки данных MOVX @DPTR).
code — размещение константных данных в области памяти программ. Размер памяти ограничен 64 КБ. Только чтение данных посредством косвенной адресации через индексный регистр DPTR или регистр PC и указание смещения в аккумуляторе ACC (инструкции процессора MOVC A,@A+DPTR; MOVC A,@A+PC).
far — внешняя память данных, адресация до 16 МБ.
Для определения SFR регистров используются квалификаторы sfr и sfr16 (для байтовых и двухбайтовых переменных соответственно).
Re: Преобразование чисел с плавающей точкой ?
Ваш пример для всех значений RxBuffer[1] = (0...255) выполняется верно.
Проверено на Keil mVision 4.02 (C Compiler V9.01).
Проверено на Keil mVision 4.02 (C Compiler V9.01).
Re: Преобразование чисел с плавающей точкой ?
Спасибо . Нашел глюл в своем коде в виде перекрытия переменных.