找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3030|回复: 10
收起左侧

keil错误gpio.h(3): error C202: 'P0M1': undefined identifier

[复制链接]
ID:941608 发表于 2021-12-1 16:21 | 显示全部楼层 |阅读模式
1.png
gpio()
{
P0M1=0;P0M0=0;P1M1=0;P1M0=0;
P2M1=0;P2M0=0;P3M1=0;P3M0=0;
P4M1=0;P4M0=0;P5M1=0;P5M0=0;
}

gpio.h(3): error C202: 'P0M1': undefined identifier
gpio.h(3): error C202: 'P0M0': undefined identifier
gpio.h(3): error C202: 'P1M1': undefined identifier
gpio.h(3): error C202: 'P1M0': undefined identifier
gpio.h(4): error C202: 'P2M1': undefined identifier
gpio.h(4): error C202: 'P2M0': undefined identifier

这种错误该怎么改,有谁会呀!!感谢!
回复

使用道具 举报

ID:941608 发表于 2021-12-1 16:22 | 显示全部楼层
代码是这样的:
#include<AT89x51.h>
#include<intrins.h>
#include"gpio.h"
#define uint unsigned int
#define uchar unsigned char
#define x P1   
#define y P3
#define z P2
void main(void)
{
gpio();
x=0xff;
y=0xff;
while(1)
{
   z=~(x^y);
}
}
回复

使用道具 举报

ID:883031 发表于 2021-12-1 16:58 | 显示全部楼层
GPIO的头文件贴出来
回复

使用道具 举报

ID:213173 发表于 2021-12-1 17:13 | 显示全部楼层
111110.. 发表于 2021-12-1 16:22
代码是这样的:
#include
#include

AT89x51.h头文件中没有相关寄存器,需要添加。
sfr P0M0        =   0x94;   //0000,0000 端口0模式寄存器0
sfr P0M1        =   0x93;   //0000,0000 端口0模式寄存器1
sfr P1M0        =   0x92;   //0000,0000 端口1模式寄存器0
sfr P1M1        =   0x91;   //0000,0000 端口1模式寄存器1
sfr P2M0        =   0x96;   //0000,0000 端口2模式寄存器0
sfr P2M1        =   0x95;   //0000,0000 端口2模式寄存器1
sfr P3M0        =   0xB2;   //0000,0000 端口3模式寄存器0
sfr P3M1        =   0xB1;   //0000,0000 端口3模式寄存器1
sfr P4M0        =   0xB4;   //0000,0000 端口4模式寄存器0
sfr P4M1        =   0xB3;   //0000,0000 端口4模式寄存器1
sfr P5M0        =   0xCA;   //0000,0000 端口5模式寄存器0
sfr P5M1        =   0xC9;   //0000,0000 端口5模式寄存器1
sfr P6M0        =   0xCC;   //0000,0000 端口6模式寄存器0
sfr P6M1        =   0xCB;   //0000,0000 端口6模式寄存器1
sfr P7M0        =   0xE2;   //0000,0000 端口7模式寄存器0
sfr P7M1        =   0xE1;   //0000,0000 端口7模式寄存器1
回复

使用道具 举报

ID:155507 发表于 2021-12-1 17:16 | 显示全部楼层
前面加这个

sfr     P0M0        =   0x94;
sfr     P0M1        =   0x93;
sfr     P1M0        =   0x92;
sfr     P1M1        =   0x91;
sfr     P2M0        =   0x96;
sfr     P2M1        =   0x95;
sfr     P3M0        =   0xb2;
sfr     P3M1        =   0xb1;
回复

使用道具 举报

ID:624769 发表于 2021-12-1 17:33 | 显示全部楼层
AT89 是不能设置端口模式的。

即便添加了 SFR 也是不能正常工作的。

你最好先确认你单片机是否支持 端口模式转换,再确认是否使用了匹配的头文件。
最后,真要自己添加端口模式头文件了,再按照手册标注的寄存器地址添加。不要随便添加。每个公司的单片机寄存器定义都是不一样的。
回复

使用道具 举报

ID:941608 发表于 2021-12-1 18:33 | 显示全部楼层
wulin 发表于 2021-12-1 17:13
AT89x51.h头文件中没有相关寄存器,需要添加。
sfr P0M0        =   0x94;   //0000,0000 端口0模式寄存 ...

谢谢,终于弄好了
回复

使用道具 举报

ID:941608 发表于 2021-12-1 18:34 | 显示全部楼层
angmall 发表于 2021-12-1 17:16
前面加这个

sfr     P0M0        =   0x94;

谢谢,可以运行了
回复

使用道具 举报

ID:57657 发表于 2021-12-1 20:03 | 显示全部楼层
像你这样的 PxMx 寄存器 都是STC后来加进去的,51内核是没有这些的。
回复

使用道具 举报

ID:624769 发表于 2021-12-1 20:09 | 显示全部楼层
sfr     P0M0        =   0x80;
也能不报错,编译成功,

问题是这样真的解决问题么? 拥有P0M0的不是只有STC一家,寄存器地址不是随便填一个就OK的。
回复

使用道具 举报

ID:57657 发表于 2021-12-1 20:27 | 显示全部楼层
188610329 发表于 2021-12-1 20:09
sfr     P0M0        =   0x80;
也能不报错,编译成功,

不要直接 sfr 直接用STC的头文件,不同系列型号的地址都可能不一样。
STC8又出现了控制IO口的 PxPU、PxNCS 寄存器,很多人都没听说过。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表