Mikroc中的函数声明

时间:2015-02-14 19:49:54

标签: c mikroc

我在Mikroc写了一个直流电机速度控制代码 但是在构建期间,它会将错误视为所有变量的“未声明标识符”。 任何人都可以帮我解决代码中的问题。 我用的是pic18f8722。 我已经用Java编写了代码,但在c编写的编码却少得多 变量和函数的声明有问题吗? 下面是代码......

float pid(int actualOut){
    error=setPoint-actualOut;
    pOut=error*p;
    iOut=iOut+error*i;
    if(iOut>255)
        iOut=255;
    else if(iOut<0)
        iOut=0;
    dOut=(error-lastError)*d;
    out = pOut+iOut+dOut;
    lastError=error;
    if(out>255)
        out=255;
    else if(out<0)
        out=0;
    return out;
}

void pwm(short duty){
    short dutyCycle=duty;
    PWM1_Init(5000);
    PWM1_Start();
    PWM1_Set_Duty(dutyCycle);
    delay_ms(500);
}

Int feedback(){
    T0CON=0xC2;
    TMR0l=193;
    INTCON=0xA0;
    TMR1l=0;
    TMR1H=0;
    T1CON=0x87;
    s=1;
    while(s==1){}
    actualOut=(60*2*TMR1L)/24;
    return actualOut;
}

void interrupt(){
    T1CON=0x00;
    s=0;
}

void main() {

    float p=100,i=200,d=10;
    int setPoint=100,s=1;
    int actualOut=0;
    float pOut=0,iOut=0,dOut=0;
    float out=16;
    int error=0,lastError=0;
    short duty;

    TRISC = 1;
    TRISG = 0;


    while(1){

        float out = pid(actualOut);
        duty=(short)out;
        pwm(duty);
        int actualOut = feedback();
    }
}

2 个答案:

答案 0 :(得分:0)

因为您使用PIC处理器,所以您应该阅读: http://www.microcontrollerboard.com/pic_interrupt.html 详细介绍了如何设置中断处理程序等

http://ww1.microchip.com/downloads/en/AppNotes/00937a.pdf 其中讨论了PIC上PID软件的概念

http://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en020434 其中包含适当的源代码和其他文档 关于pic18f8722

源代码(在汇编中)显示需要使用某些.inc文件(#include文件)。

将程序集文件转换为C文件的过程 将是一个很好的进行C编码的复习

注意:这些文件在这里插入的时间太长了

答案 1 :(得分:0)

您在#define和引脚分配等正下方声明了该功能。 对于函数pwm,您可以将其写为:

void pwm(short);

上述声明可能会解决一些问题,但我仍在致力于声明函数的返回类型。