mikroC中的浮点到短转换错误

mikroC中的浮点到短转换错误,c,pic,mikroc,C,Pic,Mikroc,我在mikroc中编写了一个代码,其中pwm信号应用于电机。 现在,由于传递给PWM内置函数的dutycycle需要是short数据类型,并且我的pid输出是float类型,所以我将float转换为short。但问题是,对于小于或等于100的值,正确地执行转换,而对于大于100的值,它会给出诸如65535之类的值。 例如: 如果浮点值为255,则short等于65535 和 如果浮点值为100,则short等于100 我无法找出错误是什么? 下面是我的代码唯一的主要和UART功能 Uart1_

我在mikroc中编写了一个代码,其中pwm信号应用于电机。 现在,由于传递给PWM内置函数的dutycycle需要是short数据类型,并且我的pid输出是float类型,所以我将float转换为short。但问题是,对于小于或等于100的值,正确地执行转换,而对于大于100的值,它会给出诸如65535之类的值。 例如: 如果浮点值为255,则short等于65535 和 如果浮点值为100,则short等于100 我无法找出错误是什么?

下面是我的代码唯一的主要和UART功能

 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;
  }
主要功能

  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();

  }
  }
通用异步收发器功能

 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中显示值
请帮助我

我发现溶液型铸造需要按照以下方式进行

unsigned short duty=(unsigned short)out;

–dcmotor

您能缩进您的代码吗?您确定
out
float
类型吗?您描述的内容与char的描述完全相同。我发现解决方案类型转换需要以以下方式完成:unsigned short duty=(unsigned short)out@dcmotor是的,这确实是解决方案,如果
out
char
类型,而不是
float
。out是float类型,工作正常