首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C18:跳过被调用的函数

C18:跳过被调用的函数
EN

Stack Overflow用户
提问于 2013-03-20 08:07:45
回答 1查看 106关注 0票数 0

如果您在使用C18编译器方面的专家能给我指出我做错了什么,我将不胜感激。为了熟悉,我开始了一个简单的温度计项目:- NTC热敏电阻--> 18F2520 --> HD44780。

在完成链调试并生成代码以转换AN0输入电压( 2.5V = 10000欧姆)后,一切正常,包括将TºC转换到液晶屏所需的例程。

以上是最基本的,但工作良好,每秒产生一个新的T:C的LCD显示器。

下一步是变得更柔和一些,

在tcalc函数的开始,我放入了一个范围外的测试。如果像我最初决定的那样,应用程序将测量水温。那么Rntc大于28000就是冰,(超出上面的范围)在有效值<1900的另一端几乎是蒸汽。我调用的给出错误消息的例程正在被忽略。

下面是将Rntc更改为温度T:C的tcalc代码

代码语言:javascript
复制
    /**************************************************
                Start tcalc
***************************************************/
void tcalc(unsigned char value) // does Rntc to T maths
{
     // start read AN0 for ADRESH ADRESL
  ADCON0 = 0x03;
  while(   ADCON0 == 0x03);// loop A/D 11 bits
    // notes at end  explain 11bit convert in 5 us

   Delay10TCYx(20); // +20us saftey margin
   ADRESH =0x02; //Dummy we use 512 as test value
   ADRESL =0x00;// Dummy 0x200 = d512
   Vin= ADRESH*256+ADRESL; 
   Rntc = (1024.0*Rref)/Vin -Rref;
 //  Rntc = 29000;//DUMMY test 2hi

/***********************************************
 Rntc MUST be valid (in range) test above/below
***********************************************/

if ( Rntc>28000) // Rntc too high
{
 Rntc_out; //jump to Show HIGH error message

}

dly1sec;

if (Rntc<1900) // Rntc too low
{
   Rntc_out; //jump to Show LOW error message
}


/***********************************************
Pairing Rntc value, with T equation coefficients
***********************************************/

if (Rntc>14706) //case 1
   {
    a = 19.67,b = -1136.15, c = 27335.25 ;
    goto Trange_1thru5 ;
   }
if (Rntc>8310.8) //case 2
   {
    a = 9.228,b = -840.85, c =25236.82 ;
    goto Trange_1thru5 ;
   }
if (Rntc>4910.6) //case 3
   {
    a = 4.554,b =-567.886, c = 21246.2 ;
    goto Trange_1thru5 ;
   }
if (Rntc>3019.7) //case 4
   {
    a = 2.358,b = -373.486, c = 16941.29 ;
    goto Trange_1thru5 ;
   }
if (Rntc>1924.6) //case 5
   {
    a = 1.275,b = -245.047, c = 13131.885 ;
    goto Trange_1thru5 ;
   }





Trange_1thru5:
  c= c-Rntc; 
  T = (-b - sqrt(-b*-b -4*a*c))/(2*a);
      /* Quadratic T result chosen has to be lowest */

}
/******************************************************
               END tcalc
*******************************************************/

调用的例程'Rntc_out‘如下所示

代码语言:javascript
复制
/******************************************************* 
           ****** Start Rntc_outofrange ******
********************************************************/

void Rntc_out (unsigned char value) 
{
 lcdcmd(0x80);//move to top line of LCD
// RntcHL =Rntc;
if (Rntc<1900) //Rntc too low
 {
 lcddata('R');  
 lcddata('n');
 lcddata('t');
 lcddata('c');
 lcddata(' ');
 lcddata('t');
 lcddata('o');
 lcddata('o');
 lcddata(' ');
 lcddata('L');
 lcddata('o');
 lcddata('w');
 lcdcmd(0xC0);//Bottom line of LCD
 T = Rntc;
float_to_char;
 dly1sec;
 dly1sec;
 dly1sec;
 dly1sec;
 dly1sec;//  Rntc low  on screen 5 seconds 

 }

if ( Rntc>27500) // Rntc too high
 {
 lcddata('R'); 
 lcddata('n');
 lcddata('t');
 lcddata('c');
 lcddata(' ');
 lcddata('t');
 lcddata('o');
 lcddata('o');
 lcddata(' ');
 lcddata('H');
 lcddata('i');
 lcddata('g');
 lcddata('h');
 lcdcmd(0xC0);//Bottom line of LCD
 T = Rntc;
float_to_char;
 dly1sec;
 dly1sec;
 dly1sec;
 dly1sec;
 dly1sec; // Rntc high  on screen 5 seconds */

 }

}


/******************************************************* 
           ****** End Rntc_outofrange ******
********************************************************/

基本上,我的问题是何时测试超出范围的Rntc。跳过该代码,就好像它不在那里一样。

PS如果我将Rntc模块的代码作为标签:并转到代码,那么对超出范围的测试不会被忽略,条件可以得到满足。

当然,“goto”策略有一个小问题。超出范围的读数意味着在几秒钟后,必须再次读取热敏电阻。这意味着另一个goto to tcalc。意思就是自称。C18似乎不喜欢这样。

如果有好心的人能指出我代码的错误,我会很高兴的。

EN

回答 1

Stack Overflow用户

发布于 2013-03-20 08:11:56

要调用一个函数,您需要使用圆括号并将其参数传递给它,并且您可能需要在后面加上一个返回:

代码语言:javascript
复制
Rntc_out(Rntc); // I'm guessing this is the parameter you want?
return;

我在您的程序中看到许多其他函数调用缺少括号。你也需要解决这些问题。

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

https://stackoverflow.com/questions/15512893

复制
相关文章

相似问题

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