如何用c语言(编译器)调用pic18F4550中的方法

时间:2011-04-03 13:09:25

标签: c microcontroller

更新

我正在使用带有微芯片v8.63和C编译器的pic 18F4550。

我正在尝试制作一个颜色传感器。当一个led烧了一个whant例如,方法红色。 在OOP中使用其他方法很简单,但是如何在C中为微芯片做到这一点?

void main(void) 
{ 
    my code here....

    // Leds are connected here.
    if(PORTBbits.RB4 == 0) { //red
        LATDbits.LATD0 = 1;     
    }
    else if(PORTBbits.RB5 == 0) { //green
        LATDbits.LATD1 = 1;
    }
    else if(PORTBbits.RB6 == 0) { //blue
        LATDbits.LATD2 = 1;
    }
        // LDR is connected here.
    // 
    if(PORTAbits.RA0 == 1) {
        if(PORTBbits.RB4 == 0) {
            int red = PORTBbits.RB1;    // test.
            colorRed();     
        }
        else if(PORTBbits.RB5 == 0) {
            int green = PORTBbits.RB1;
            colorGreen();
        }
        else if(PORTBbits.RB6 == 0) {
            int blue = PORTBbits.RB1;
            colorBlue();
        }   
    }
}
void colorRed(void) 
{
    LATDbits.LATD0 = 0;
           // other code here

}

void colorGreen(void) 
{
    LATDbits.LATD1 = 0;
}

void colorGreen(void)
{
    LATDbits.LATD2 = 0;
}

这些是错误:

..\code\main.c:56:Warning [2058] call of function without prototype
..\code\main.c:60:Warning [2058] call of function without prototype
..\code\main.c:64:Warning [2058] call of function without prototype
..\code\main.c:69:Error [1109] type mismatch in redeclaration of 'colorRed'
..\code\main.c:74:Error [1109] type mismatch in redeclaration of 'colorGreen'
..\code\main.c:79:Error [1504] redefinition of 'colorGreen'

1 个答案:

答案 0 :(得分:1)

您只需要在定义main之前为函数添加前向声明(“prototypes”)。

void colorRed(void);
void colorGreen(void);
void colorBlue(void);

如果没有这些,编译器会假定函数类型为int colorRed(),其中intvoid不匹配,()(void)不匹配。

另外,正如我在评论中提到的,main应该实现无限循环,检查芯片的输入并修改输出。