PIC单片机用C,编译时提示SFR未定义,如何解决?

时间:2021-02-04 19:49:31
程序在编译时提示
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 91.1 undefined identifier "OPTION_REG"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 96.1 undefined identifier "WPU"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 105.1 undefined identifier "GPIO"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 106.1 undefined identifier "IOC"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 108.1 undefined identifier "TRISIO"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 109.1 undefined identifier "GP4"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 135.1 undefined identifier "GP1"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 194.1 undefined identifier "GP4"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 196.5 undefined identifier "GP0"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 267.1 undefined identifier "GP1"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 403.7 undefined identifier "GP1"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 407.7 undefined identifier "GP1"
Error [192] E:\pro\SHE-Z-30\SHE-Z-30.c; 446.1 undefined identifier "GP1"

都是功能寄存器未定义,但是我的程序里已添加了:#include <pic.h>
如下:
#include <pic.h>
__CONFIG(OSC_INTRC_NOCLKOUT&WDT_OFF&PWRTE_ON&MCLRE_ON&CP_ON&IOSCFS_4MHZ&BOREN_ON&WRT_ALL);

谁能帮忙解答下哪里出问题了??谢谢了!

7 个解决方案

#1


查一下在哪个头定义了,这个头文件在哪里。
<>是系统路径,是否能找到。还有""是用户路径,不行写一个绝对路径看看

#2


点击右键,看看能不能正确跳转到定义的地方。

#3


引用 2 楼 northcan 的回复:
点击右键,看看能不能正确跳转到定义的地方。

可以跳转的!

#4


引用 1 楼 zhenghn2010 的回复:
查一下在哪个头定义了,这个头文件在哪里。
<>是系统路径,是否能找到。还有""是用户路径,不行写一个绝对路径看看


路径是可以打开的,我打开看过,再补充一下:不是所有的SFR都找不到!

#5


有跟芯片相关的宏定义吗? 不同型号可能的寄存器不同。。。

#6


问题找到了,是配置搞错了,谢谢各位

#7


(1) 你应该用的是MPLAB吧,首先确定你Config->select Device 选择对了。
(2) 记得以前用PIC16F单片机的时候,用hi-tec的编译器,好像只要#include <pic.h>就可以了。但是最近在用PIC24的单片机,用的是mplabC30的编译器,不是包含pic.h,而是下面一段代码,对应头文件中的内容和pic.h是类似的。不知道你的C编译器和单片机用的是哪个?
#if defined(__dsPIC30F__)
#include <p30fxxxx.h>
#elif defined(__dsPIC33F__)
#include <p33Fxxxx.h>
#elif defined(__PIC24F__)
#include <p24Fxxxx.h>
#elif defined(__PIC24H__)
#include <p24Hxxxx.h>
#endif

(3) 如果不行的话,直接将C编辑器目录下单片机的那个头文件拷到你的工程目录下,直接包含这个文件,应该没有问题的。

#1


查一下在哪个头定义了,这个头文件在哪里。
<>是系统路径,是否能找到。还有""是用户路径,不行写一个绝对路径看看

#2


点击右键,看看能不能正确跳转到定义的地方。

#3


引用 2 楼 northcan 的回复:
点击右键,看看能不能正确跳转到定义的地方。

可以跳转的!

#4


引用 1 楼 zhenghn2010 的回复:
查一下在哪个头定义了,这个头文件在哪里。
<>是系统路径,是否能找到。还有""是用户路径,不行写一个绝对路径看看


路径是可以打开的,我打开看过,再补充一下:不是所有的SFR都找不到!

#5


有跟芯片相关的宏定义吗? 不同型号可能的寄存器不同。。。

#6


问题找到了,是配置搞错了,谢谢各位

#7


(1) 你应该用的是MPLAB吧,首先确定你Config->select Device 选择对了。
(2) 记得以前用PIC16F单片机的时候,用hi-tec的编译器,好像只要#include <pic.h>就可以了。但是最近在用PIC24的单片机,用的是mplabC30的编译器,不是包含pic.h,而是下面一段代码,对应头文件中的内容和pic.h是类似的。不知道你的C编译器和单片机用的是哪个?
#if defined(__dsPIC30F__)
#include <p30fxxxx.h>
#elif defined(__dsPIC33F__)
#include <p33Fxxxx.h>
#elif defined(__PIC24F__)
#include <p24Fxxxx.h>
#elif defined(__PIC24H__)
#include <p24Hxxxx.h>
#endif

(3) 如果不行的话,直接将C编辑器目录下单片机的那个头文件拷到你的工程目录下,直接包含这个文件,应该没有问题的。