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

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

时间:12-01 来源:互联网 点击:
上面我们的叙述了一个程序的编辑、编译和下载完整的过程,最终点亮了第一个发光二极管,不过这个程序到底是什么意思,为什么应该这么写,可能有些人还不是很懂,下面给大家分析,并对里面涉及到的C语言知识进行讲解。

为了便于讲解,这里把上节课的程序一并给出:

例1 点亮第一个发光二极管程序

(1)输入源程序(又称为程序编辑)

#include//52系列单片机头文件

sbit D1=P1^0;//位定义单片机P1口的第1位

void main()//主函数

{

D1=0;//点亮第一个发光二极管

}

1、头文件

程序的第一句#include称为头文件,头文件就是C语言中的“文件包含的”的意思。所谓“文件包含”是指在一个文件内将另外一个文件的内容全部包含进来。因为被包含的文件中的一些定义和命令使用的频率很高,几乎每个程序中都可能要用到,为了提高编程效率,减少编程人员的重得劳动,将这些定义和命令单独组成一个文件,如reg52.h,然后用#include包含进来就可以了,这个就相当于工业上的标准零件,拿来直接用就可以了。

在程序中加入头文件通常有两种方法,分别是#include和#include“reg52.h”,注意头文件句末不需要加“;”否者编译器编译时会报错。加头文件时< >和“”两者是有区别的,主要如下:

当使用< >包含头文件时,程序编译时编译器会首先到keil软件的安装文件下进行寻找,具体在keilC51INC这个文件下,如果没有找到,刚编译时会报错。

当使用“”包含头文件时,程序编译时编译器会首先到当前工程所在的文件夹下寻找,如果没有找到,则马上到keil软件的安装文件下进行寻找,如果都没有找到,则编译时会报错。由于在安装文件下,所以一般写成#include,就可以了。

现在我们打开reg52.h文件,看里面具体内容,可以直接在安装文件keilC51INC直接找到reg52.h文件,也可以在编辑界面将鼠标箭头放在#include,然后右键再选择

Open docment ,如图12所示。

图12 打开头文件

此时会出现reg52.h的内容如下:

/*--------------------------------------------------------------------------

REG52.H

Header file for generic 80C52 and 80C32 microcontroller.

Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.

All rights reserved.

--------------------------------------------------------------------------*/

#ifndef __REG52_H__

#define __REG52_H__

/* BYTE Registers */

sfr P0 = 0x80;

sfr P1 = 0x90;

sfr P2 = 0xA0;

sfr P3 = 0xB0;

sfr PSW = 0xD0;

sfr ACC = 0xE0;

sfr B = 0xF0;

sfr SP = 0x81;

sfr DPL = 0x82;

sfr DPH = 0x83;

sfr PCON = 0x87;

sfr TCON = 0x88;

sfr TMOD = 0x89;

sfr TL0 = 0x8A;

sfr TL1 = 0x8B;

sfr TH0 = 0x8C;

sfr TH1 = 0x8D;

sfr IE = 0xA8;

sfr IP = 0xB8;

sfr SCON = 0x98;

sfr SBUF = 0x99;

/* 8052 Extensions */

sfr T2CON = 0xC8;

sfr RCAP2L = 0xCA;

sfr RCAP2H = 0xCB;

sfr TL2 = 0xCC;

sfr TH2 = 0xCD;

/* BIT Registers */

/* PSW */

sbit CY = PSW^7;

sbit AC = PSW^6;

sbit F0 = PSW^5;

sbit RS1 = PSW^4;

sbit RS0 = PSW^3;

sbit OV = PSW^2;

sbit P = PSW^0; //8052 only

/* TCON */

sbit TF1 = TCON^7;

sbit TR1 = TCON^6;

sbit TF0 = TCON^5;

sbit TR0 = TCON^4;

sbit IE1 = TCON^3;

sbit IT1 = TCON^2;

sbit IE0 = TCON^1;

sbit IT0 = TCON^0;

/* IE */

sbit EA = IE^7;

sbit ET2 = IE^5; //8052 only

sbit ES = IE^4;

sbit ET1 = IE^3;

sbit EX1 = IE^2;

sbit ET0 = IE^1;

sbit EX0 = IE^0;

/* IP */

sbit PT2 = IP^5;

sbit PS = IP^4;

sbit PT1 = IP^3;

sbit PX1 = IP^2;

sbit PT0 = IP^1;

sbit PX0 = IP^0;

/* P3 */

sbit RD = P3^7;

sbit WR = P3^6;

sbit T1 = P3^5;

sbit T0 = P3^4;

sbit INT1 = P3^3;

sbit INT0 = P3^2;

sbit TXD = P3^1;

sbit RXD = P3^0;

/* SCON */

sbit SM0 = SCON^7;

sbit SM1 = SCON^6;

sbit SM2 = SCON^5;

sbit REN = SCON^4;

sbit TB8 = SCON^3;

sbit RB8 = SCON^2;

sbit TI = SCON^1;

sbit RI = SCON^0;

/* P1 */

sbit T2EX = P1^1; // 8052 only

sbit T2 = P1^0; // 8052 only

/* T2CON */

sbit TF2 = T2CON^7;

sbit EXF2 = T2CON^6;

sbit RCLK = T2CON^5;

sbit TCLK = T2CON^4;

sbit EXEN2 = T2CON^3;

sbit TR2 = T2CON^2;

sbit C_T2 = T2CON^1;

sbit CP_RL2 = T2CON^0;

#endif

该头文件主要是对52单片机所有特殊功能寄存器的地址进行声明。

sfr P1 = 0x90这句话表示:P1口所对应的特殊功能寄存器P1在内存中的地址为0x80。换另一种说

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

网站地图

Top