C语言单片机的疑惑?为什么单片机的端口不申明就直接使用?程序如下

#include<reg51.h>
void delay(void)
{
unsigned char i,j;
for(i = 0;i < 255;i++) for(j = 0;j < 255;j++);
}
void main(void)
{
unsigned char j = 0x01;
while(1)
{
j = j << 1; //这里面的j与上面的不一样,都是局部变量。Delay函数里面的j表示自然地整数,用两个循环来延时。这里面的j表示单片机里面的输出电位。在这个实例里面,j表示将p0端口的电位最低位的一个置为1,然后p0口接上共阴极的发光二极管。然后再通过循环,将p0口以此循环,从而实现流水灯的程序。
if(j == 0x00) j = 0x01;//
P0 = j;
delay();
} }
/***********

这程序我的疑惑就是为什么P0口为什么不需要声明一下,就可以直接使用 。还有就是如果申明的话,应该先申明在使用吧,为什么在循环后在声明呢?
我理解的是因该先用sbit申明?不然的话,单片机怎么会把p0识别为p0的i/o口,而不是一个普通的变量?
我是自学的,要是很弱智,大家请谅解

将reg51.h打开就会到普通和特殊寄存器的申明。至于理解的话,可将这些寄存器理解为定义好的宏变量。并且,在使用P0这类寄存器宏名时最好看看引用的头文件中是否存在这样的宏名。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-15
可以去看看reg51.h里面有很多寄存器定义追问

这个我倒是忘记了,这个估计是类似变成里面的保留字吧或是系统变量,已经声明好了的哈。不知道这样理解对不?谢了

追答

是的! reg51.h是和编译器配套的头文件,算是系统头文件
大概你用的keil c吧!

单片机编程和平时c语言编程的区别
单片机的主程序要在一个循环体内才可以保证单片机稳定的运行,所以禁止出现return这个东东的在主程序中,你可能看过很多单片机程序,如果之前一直前行,到最后至少都会有一个while(1);来结束,就是将程序稳定在这个地方,以保证之前程序的“成果”。如果没有这个,程序就从此不受控而乱了。申明变量时并不是...

在一个C语言程序中,为什么main函数可以出现在任何地方,不是开头就要...
因为mai函数是一个程序的入口,不管main函数在程序的任何地方,程序都是从main函数开始执行的,main函数只能由系统调用,不能为用户所调用。

初学C语言的疑惑。请老师们细心指导,灰常感谢。满意了的话再加100分...
这里面几个问题回答如下:问题一:typedef structz 这个函数我不太懂,书上有点抽象;typedef是表示重新定义一个类型,后面跟着struct就是意味着这个新的类型是一个结构,合起来就是说,通过typedef重新定一个类型,类型的名字叫做“GPIO_InitTypeDef”,这个类型是一个结构体,这个问题明白了吗?那么后面所...

单片机C编程 为什么不能用 P0^0 = 0; 这种语句
这是因为你的头文件不是自己写的,你也是用的他的标准文件,如果是你自己写的,在头文件中有P0^0的定义是可以的,所以你要用时先必须用sbit定义,在程序的前面定义sbit P0_0=P0^0,这样编译时就不会出现未定义的错误。

请教个问题,单片机 程序 比如我定义了一个自己的头文件#include"24c02...
看来你C语言不怎么好,用宏定义, 操作如下:现在在keil环境内,new新建一个文本,以24c02.H保存,接着再里面写入代码如下:ifndef _24C02_H define _24C02_H include "24c02.h"在这里面写相应的程序。endif 这样可以再直接调用头文件。如有不明白再问。

单片机c语言定时函数为什么不需要调用。。既然不用调用,那定时程序是...
程序是逐行扫描,遇到main才开始执行,前面写的一些定时函数之类的会先被扫描到,主函数中遇到了直接调用,如果那些定时函数写在主函数之后,那么前面需要申明下。总之是逐行扫描,遇到mian开始执行对应命令。

在C语言栈的创建中,主函数声明结构体,传参时加&能运行,但声明结构体...
申明结构体的时候stack的内存已经分配了,可以直接使用,申明指针的时候,stack的内存需要手动分配后再使用,看不到你的init函数,两种方式的使用是不一样的

在51单片机c语言编程中如何用sbit建立数组?
首先申明一下、新手一枚、我也遇到同样的问题、说个比较笨的办法、用的时候直接给P1赋值、单片机初始时所有i\/o口都为高电平,比如你想要floorled1=0;你就写P1=0xfe;floorled2=0;你就写P1=0xfd;floorled1=0;floorled2=0;你就写P1=0xfb;个人见解、谢谢!!!

单片机,c语言编写程序,现在是大四学生,一般我所需要的程序200行左右...
一般来说先写子函数,而且子函数中被调用的的子函数最好先写,不然会报错。另外也可以事先申明一下某个函数,那么此函数就可以放在此函数被调用的函数后面写。

我刚学单片机,想让LED上的第一个小灯间隔200MS闪烁,我编的程序是这样...
函数名可以写做 delay_ 200ms() 或delay200ms() ,但不可以函数名字中间带个空白符 标识符常识,开头不以是数字,中间不得有空白符等无效符号,C语言基本功不过关啊

相似回答