微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第4课 点亮发光管程序分析

第4课 点亮发光管程序分析

时间:12-01 来源:互联网 点击:

法就是我们对0x80处的寄存器重新取名P0,以后我们在程序中对P0进行操作,就相当于直接对0x80处的寄存器进行操作。

sfr表示特殊功能寄存器的意思,它并非标准C语言的关键字,而是Keil为能直接访问80C51中的SFR而提供了一个新的关键词,其用法是:sfr 特殊功能寄存器名=地址值(注意对于头文件里“特殊功能寄存器名”,用户实际上也可以修改的,如P1=0x80,也可改为A1=0x80,但sfr和地址值则不能更改,否者会编译出错。)

以上是对寄存器地址和定义和声明作了解释,大家需要牢牢记住:只有对寄存器进行声明地址后,我们才能对其进行赋相关的值,keil软件才能编译通。

实际上就本程序来说,我们也可以不包含该头文件,而加上一句话,“ sfr P1=0x90; ”也是可以的,但如果要用到P0 P1 P2 P3就需要写四名话,这样就会显得很麻烦 ,只要大家能理解这个,相信大家对为什么要在些加一直头文件的原因应该理解了,总之以后我们写51的程序时第一句话就直接包含该头文件就行了。

2、程序注释

在对头文件进行解释后,在头文件后面我们可以看到有“//……”符号。“//……”表示语句注释,其作用主要是为了以后阅读程序来方便。“//……”主要是对单句或者比较短的程序进行注释,但如果是对一整段程序进行注释时,这种方法就显得非常麻烦,所以程序注释还有第二种方法,具体的符号是/*****程序*****/,此时斜杠星号与星号斜杠之间的程序将被整体注释掉。

程序被注释掉后,编译器在进行编译时将不会对其进行编译,此时相当于此处的程序被删掉一样。注释的目的是为了方便他人阅读程序,同时也方便自己一段时间后再来阅读程序时能够快速的理解该程序的含义。

3、位声明

程序的第三行出现了”sbit D1=P1^0;”下面进行说明。

sbit表示位的意思,它也是非标准C语言的关键字,编写程序时如需操作寄存器的某一位(可位寻址的寄存器才能用)时,需定义一个位变量,此时就要要到sbit,如上面的程序中D1=P1^0,;需要注意的是,位定义时有些特殊,用法有三种:

第一种方法:sbit 位变量名=寄存器位地址值

第二种方法:sbit 位变量名=SFR 名称^寄存器位值(0-7)

第三种方法:sbit 位变量名=SFR 地址值^寄存器位值

如:

sbit IT0=0x88(1)说明:0x88是IT0的位地址值

sbit D1=P1^2(2)说明:其中P1必须先用sfr定义好

sbit EA=0xA8^7(3)说明:0xA8就是IE寄存器的地址值

以上三种定义方法需注意的是 IT0 deng EA可由用户随便定义,但必须满足C语言对变量名的定义规则。除些外其它的则必须按照上面的格式写,如“名称^变量位地址值”中“^”,它是由keil软件的规定的,不能写成其它的,只能这样能才编译通过。

这里也就是说像操作单片机某个口(如P1口),需要通过头文件sfr P1 = 0x90对其地址进行声明,同样的对寄存器的某一位操作时,也需要对位地址进行声明,此时我们就采用的是第二种表达法sbit D1=P1^0;程序中对D1的操作就相当于对P1中的位地址0Xaff进行操作。

4、主函数

格式:void main()

特点:无返回值,无参数。

无返回值,是指函数执行完后不会返回任何值,上面void表示“空”的意思,即不返回任何值,此处也可以省略不写。当然函数还有带返回值的,后面具体会讲到。

无参数是指该函数不还有任何参数,即main后面的()没有任何参数,此时也可以在括号内加上void ,如main(void),但通常省略不写。后面也会讲到还有参数的函数,等后面讲到时大家就会理解了。

函数是能够实现特定功能的代码段,需要注意的是,一个C51源程序必须有,且只能有一个主函数main(),它是整个程序开始执行的入口。在void main()后面必须加一对花括号,其内部为一条一条的程序语句。如本例程:

void main()
{

D1=0;

}

当然这个主函数相对来说比较简单,里面只有一条语句。

5、D1=0

这条语句位于主函数内,也是这个程序中最重要的部分。D1相当于单片机P1口的第1个引脚。通过前面的知识我们也知道,数字电路中有两种电平,高电平和低电平,0表示低电平或者说低电压,1表示高电平或者说高电压。由于发光管阳极是通过限流电阻接的5V高电压,而阴极接的P1口的第1个引脚,通过程序D1=0让其为低电压,所以此时程序一执行后,该发光二极管就会发光。

6、利用总线操作法点亮发光二极管

在例1中,要实现让一个管发光,我们采用了位操作法,位操作法其实就是对单片机的每一个引脚单独操作,如例中就是先作位定义sbit D1=

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top