188610329 发表于 2021-12-1 20:09 不要直接 sfr 直接用STC的头文件,不同系列型号的地址都可能不一样。 STC8又出现了控制IO口的 PxPU、PxNCS 寄存器,很多人都没听说过。 |
|
sfr P0M0 = 0x80; 也能不报错,编译成功, 问题是这样真的解决问题么? 拥有P0M0的不是只有STC一家,寄存器地址不是随便填一个就OK的。 |
| 像你这样的 PxMx 寄存器 都是STC后来加进去的,51内核是没有这些的。 |
angmall 发表于 2021-12-1 17:16 谢谢,可以运行了 |
wulin 发表于 2021-12-1 17:13 谢谢,终于弄好了 |
|
AT89 是不能设置端口模式的。 即便添加了 SFR 也是不能正常工作的。 你最好先确认你单片机是否支持 端口模式转换,再确认是否使用了匹配的头文件。 最后,真要自己添加端口模式头文件了,再按照手册标注的寄存器地址添加。不要随便添加。每个公司的单片机寄存器定义都是不一样的。 |
|
前面加这个 sfr P0M0 = 0x94; sfr P0M1 = 0x93; sfr P1M0 = 0x92; sfr P1M1 = 0x91; sfr P2M0 = 0x96; sfr P2M1 = 0x95; sfr P3M0 = 0xb2; sfr P3M1 = 0xb1; |
111110.. 发表于 2021-12-1 16:22 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 |
| GPIO的头文件贴出来 |
|
代码是这样的: #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); } } |