首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mikroC中的浮点到短转换误差

mikroC中的浮点到短转换误差
EN

Stack Overflow用户
提问于 2015-02-21 12:25:35
回答 1查看 514关注 0票数 0

我用mikroc编写了一个应用于电机的pwm信号的代码。现在,由于传递给PWM内置函数的任务周期需要很短的数据类型,而且我的pid输出是浮子类型的,所以问题是,对于小于或等于100次浇铸的值,正确地进行了100次浇铸,而对于大于100次的值,则给出了诸如65535这样的值。的意思是:如果浮点数为255个,那么短值等于65535,如果浮点数为100,那么短值等于100,我无法搞清楚是什么错误?

下面是我的代码,只有main和UART函数

主要功能

代码语言:javascript
复制
  void main() {
  UART1_Init(9600);
  pro=5,i=0,der=0;
  setPoint=100,sel=1;
  actualOut=80;
  pOut=0,iOut=0,dOut=0;
  out=16;
  error=0,lastError=0;
  OPTION_REG=0;
  T1CON=0;
  INTCON=0;
  ADCON0=0;
  CMCON = 0x07;
  TRISC.RC0=1;
  TRISC.RC2=0;
  TRISC.RC6=0;
  PORTC=0;
  while(1){
  out = pid(actualOut);
  duty=(short)out;              out is float type and duty is short
  Uart1_Intout_ReturnInt(duty);
  UART1_Write(13); // newline
  pwm(duty);
  actualOut = feedback();

  }
  }

UART函数

代码语言:javascript
复制
 Uart1_Intout_ReturnInt(unsigned i) {
 char puf[6]; //for max 5 digits and the end-sign
 WordToStr(i, puf); // in "Conversions" library
 UART1_Write_Text(puf);
 return i;
  }

使用虚拟终端和uart显示proteus中的值,请帮助我。

EN

回答 1

Stack Overflow用户

发布于 2015-08-19 10:42:54

我发现解决方案类型的转换需要以下列方式进行

代码语言:javascript
复制
unsigned short duty=(unsigned short)out;

-直流电动机

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28645770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档