新闻中心

EEPW首页>嵌入式系统>设计应用> 第4课 点亮发光管程序分析

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

作者: 时间:2016-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。换另一种说法就是我们对0x80处的寄存器重新取名P0,以后我们在程序中对P0进行操作,就相当于直接对0x80处的寄存器进行操作。
sfr表示特殊功能寄存器的意思,它并非标准C语言的关键字,而是Keil为能直接访问80C51中的SFR而提供了一个新的关键词,其用法是:sfr 特殊功能寄存器名=地址值(注意对于头文件里“特殊功能寄存器名”,用户实际上也可以修改的,如P1=0x80,也可改为A1=0x80,但sfr和地址值则不能更改,否者会编译出错。)
以上是对寄存器地址和定义和声明作了解释,大家需要牢牢记住:只有对寄存器进行声明地址后,我们才能对其进行赋相关的值,keil软件才能编译通。
上一页 1 2 下一页

评论


技术专区

关闭