2020-02-02 09:22发布
jiaohaitao 发表于 2012-11-15 17:26 呵呵,会报错的,我发帖的时候大意了,还有个基础的问题。在主函数main()前面不能使用 类似P0=0x00;之 ...
最多设置5个标签!
语句要写在函数里面才行。
变量的声明、初始化(和声明一起的赋值叫初始化,不和声明在一起的赋值是赋值语句)可以放在函数外面
这个只是官方头文件给出的一种命名方法,实则只是对某个地址的寄存器进行赋值罢了,看着不顺眼,可以自己写头文件,自己命名。
不过就像高数中的dx/dy一样,只是一种约定俗成的记号,用着舒服,也能被大家认可,没有那么多为什么
嗯,非常感谢以上大佬的精彩讲解,小辈收获不少。确实,如果一些基本的东西没有解决的话,到后面你会非常的痛苦。就像盖大楼,地基没打好,,,,,呵呵
下面我结合下各位的讲解和我的理解写出下面一些东东,给那些像我一样的疑惑者一些引导。
(1) lcofjp 和renpeng009说的对,在main之前操作寄存器是不合法的,我的理解是main函数之前是有一些堆栈什么指针类的硬件配置,为我们的用户函数main配置环境,不可以随便更改处理器中一些内部的寄存器,而renpeng009所说的赋值语句不能放在函数外面是欠妥的。你可以试验下,在main之前定义一个变量,然后再另写个语句赋值是可以的,如:itn i;i=0;。编译器并没有报错。所以说:在main函数之前我们是不能对单片机内部的一重要些寄存器随便操作的,而可以对一些无关紧要的内存区操作,不知这样说对不对?
(2)关于51单片机的位操作,确实你百度下‘sbit’这个c51扩展类型,你就会明白了。下面是百科上一句话:
sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbit xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。
也就是说:sbit是对可以位寻址的一些寄存器的操作。这个问题的本身P1^0为什么会代表P1.0这应该是编译器默认吧。我想编译器为了区分和异或的区别,所以,我们在位操作的时候就要用到sbit这个扩展类型了。可以说有位操作就会有sbit。不知这样理解行不行。。。
(3)问题扩展:sbit可不可以定义一些变量,从而使这些变量也具有位操作的能力?答案是肯定的,这里需要 bdata这个关键字
unsigned char bdata Data;
那么这个Data就会被映射到单片机内部20H-2FH,地址不会像其他的变量一样地址随机产生。这个Data就可以位寻址操作了,因为单片机内部20-2f这16个Bytes是可以位寻址的。所以我们只能最多定义16个可以操作的Bytes
上面是根据各位大侠的回复和自己的理解写的,对错?我也不敢确定,仅供参考。如果您有更好的见解,请在下面写出来,可以帮助更多的疑惑者
这四个理解就明白了
一周热门 更多>