#include "reg51.h" sbit P1_0 = P1^0; void main() { P1_0 = 0; } 仿真的话上面点亮的是第一个灯,如果将语句“sbit P1_0 = P1^0;”改为“sbit P1_0 = P1^1;” 地址wytq偏移了1个单位,那么点亮的便是第二个灯吧! 在reg51.h 文件里有这么两名:sfr P0 = 0x80;sfr P1 = 0x90; P0到P1地址相差刚好是10(个单位)。 那么如果我还是要点亮第 一 个灯。 可不可以用这样:sbit P1_0 = P0^10 (用P0偏移10个单位的地址得到P1) ?????
哦,是了。0x80 到0x90 是相差16。是16进制的。
那我把那句改成:sbit P1_0 = P0^16,编译不过呀。为什么?
我在书上没有看到这方面的讲解,现在正在看《新概念51单片机C语言教程.入门、提高、开发》好像也没有讲到。
0
回答于 · 2022-07-19 00:44
我不是说了嘛, ^ 这个符号不是代表偏移,而是代表前面一个寄存器的第几位,一个只有八位的数,你想知道它的第九位,你觉得可行吗?
0
回答于 · 2022-07-19 00:47