首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未声明(在函数中首次使用)错误/ XC16

未声明(在函数中首次使用)错误/ XC16
EN

Stack Overflow用户
提问于 2020-08-10 06:18:20
回答 2查看 313关注 0票数 0

当选择"Build Main Project“并尝试编译我的项目时,编译器不断显示以下错误消息:

代码语言:javascript
复制
Source.c:64:8: error: 'RB6' undeclared (first use in this function)

我相信这与我的#define代码行有关,但我不确定:

代码语言:javascript
复制
// Include Commands

#include "xc.h"
#include "lcd.h"
#include <stdio.h>
#include <stdlib.h>
#include "pragma.h"
#include <stdbool.h>

// Define Commands

#define LCD_RS RB7
#define LCD_D0 RB15
#define LCD_D1 RB14
#define LCD_D2 RB13

#define ULTRAECHO RA4 
#define ULTRATRIG RB5 

#define PIR RB6
#define PIRII RB7

#define MOTOR RB4
#define MOTORII RB12

#define XTAL_FREQ 8000000


void setup() {
    // A-Type Registers

    TRISA = 0;
    // 0 - 5
    PORTA = 0;

    // B-Type Registers

    TRISB = 0;
    // 0 - 15
    PORTB = 0;


    LCD_Cmd(LCD_CLEAR);

    __delay_ms(50);

    LCD_Begin();
}

void loop() {
    int value;

    value = 0;

    __delay_ms(300);

    PORTBbits.RB6 = 1;
    PORTBbits.RB7 = 1;

    if (PIR == 1 || PIRII == 1) {            // Checks both PIR Sensors
        PORTBbits.RB8 = 1;                  // Activates LCD Screen 
        PORTBbits.RB15 = 1;
        PORTBbits.RB14 = 1;
        PORTBbits.RB13 = 1;

        PORTAbits.RA4 = 1;                  // Activates ULTRASONIC
        PORTBbits.RB5 = 1;

        LCD_Cmd(LCD_CLEAR);
        (value = value + 1);
    }
    else {
        PORTBbits.RB8 = 0;              // No Life Detected
        PORTBbits.RB15 = 0;
        PORTBbits.RB14 = 0;
        PORTBbits.RB13 = 0;
        (value = value);
    }

    {
        LCD_Goto(1, 1);
        LCD_Print(value);
        goto __delay_ms(300);
    }

    {

        if (PORTAbits.RA4 = 1 || PORTBbits.RB5 = 1) {

            __bit wait_sensor();            // Activates Timer   

            uint16_t i = 0;
            TMR1 = 0;                // Resets Timer
            TMR1 = 1;
            while (!ULTRAECHO && (i < 1000)) {
                i = (TMR1 << 8) | TMR1;

                if (i >= 1000)
                    return 0;

                else {
                    return 1;
                }
            }
        }

        __bit get_distance(uint16_t *ticks);

        {
            uint16_t *ticks = 0;
            TMR1 = 0;

            while (ULTRAECHO && ('uint16_t *ticks' < 23200))
                uint16_t *ticks = (TMR1 << 8) | TMR1;               // Read Timer Value

            TMR1 = 0;

            if (uint16_t *ticks >= 23200)
                return 1;

            else {
                return 0;

            }
        }

        {
            OSCCON = 0x70;              // Sets Timer and Oscillator Value
            T1CON = 0x10;
            TMR1 = 0;

            __delay_ms(500);

            ULTRATRIG = 0;              // Toggle Pin to LOW
            __delay_us(2);
            ULTRATRIG = 1;              // Generate 10us Pulse
            __delay_us(10);
            ULTRATRIG = 0;


            if (ULTRAECHO = 1)              // Read Pulse from ULTRAECHO
                uint16_t distance;

            if (get_distance()) {            // Distance greater than 400cm
                LCD_Goto(2, 1);
                LCD_Print("  No Proximity  ");

                MOTORII = 0;
                MOTOR = 0;

            }
            else {
                uint16_t distance = uint16_t distance / 58;       // Calculates Distance
                LCD_Goto(2, 1);
                LCD_Print(distance, " cm ");

                MOTORII = 1;
                MOTOR = 1;

            }


            uint16_t distance = uint16_t distance / 58;
            if (uint16_t distance <= 20)
                MOTORII = 0;
            MOTOR = 0;


            __delay_ms(500);

            goto void setup();


        }
    }
}

也许我的“定义”命令的位置是不正确的?或者是我忘记了哪一行代码?我觉得我想太多了。

EN

回答 2

Stack Overflow用户

发布于 2020-08-10 07:34:37

是的,您的#define指令存在问题。它们没有得到应有的定义。

在这段代码中:

// Define Commands #define LCD_RS RB7 #define LCD_D0 RB15 #define LCD_D1 RB14 #define LCD_D2 RB13 #define ULTRAECHO RA4 #define ULTRATRIG RB5 #define PIR RB6 #define PIRII RB7 #define MOTOR RB4 #define MOTORII RB12

将这些宏定义为:

代码语言:javascript
复制
#define LCD_RS PORTBbits.RB7  //Check if it is RB7 or RB8, as somwhere it is RB8
#define LCD_D0 PORTBbits.RB15
#define LCD_D1 PORTBbits.RB14
#define LCD_D2 PORTBbits.RB13

#define ULTRAECHO PORTAbits.RA4 
#define ULTRATRIG PORTBbits.RB5 

#define PIR PORTBbits.RB6
#define PIRII PORTBbits.RB7

#define MOTOR PORTBbits.RB4
#define MOTORII PORTBbits.RB12

并使用它们作为示例:

代码语言:javascript
复制
...
    PIR = 1;
    PIRII = 1;

    if (PIR == 1 || PIRII == 1) {            // Checks both PIR Sensors
        LCD_RS = 1;                          // Activates LCD Screen 
        LCD_D0 = 1;
        LCD_D1 = 1;
        LCD_D2 = 1;
...

除了这些问题之外,我认为您的输入和输出配置寄存器TRISATRISB没有正确配置。

// A-Type Registers TRISA = 0; // 0 - 5 PORTA = 0; // B-Type Registers TRISB = 0; // 0 - 15 PORTB = 0;

票数 0
EN

Stack Overflow用户

发布于 2020-08-11 21:08:35

在控制器头部中有一个类似的定义:

代码语言:javascript
复制
#define _RB7 PORTBbits.RB7

所以你也可以使用类似这样的东西:

代码语言:javascript
复制
#define LCD_RS _RB7
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63331880

复制
相关文章

相似问题

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