新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 第4課 點亮發(fā)光管程序分析

第4課 點亮發(fā)光管程序分析

作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
上面我們的敘述了一個程序的編輯、編譯和下載完整的過程,最終點亮了第一個發(fā)光二極管,不過這個程序到底是什么意思,為什么應(yīng)該這么寫,可能有些人還不是很懂,下面給大家分析,并對里面涉及到的C語言知識進行講解。
為了便于講解,這里把上節(jié)課的程序一并給出:
例1 點亮第一個發(fā)光二極管程序
(1)輸入源程序(又稱為程序編輯)
#include//52系列單片機頭文件
sbit D1=P1^0;//位定義單片機P1口的第1位
void main()//主函數(shù)
{
D1=0;//點亮第一個發(fā)光二極管
}
1、頭文件
程序的第一句#include稱為頭文件,頭文件就是C語言中的“文件包含的”的意思。所謂“文件包含”是指在一個文件內(nèi)將另外一個文件的內(nèi)容全部包含進來。因為被包含的文件中的一些定義和命令使用的頻率很高,幾乎每個程序中都可能要用到,為了提高編程效率,減少編程人員的重得勞動,將這些定義和命令單獨組成一個文件,如reg52.h,然后用#include包含進來就可以了,這個就相當于工業(yè)上的標準零件,拿來直接用就可以了。
在程序中加入頭文件通常有兩種方法,分別是#include和#include“reg52.h”,注意頭文件句末不需要加“;”否者編譯器編譯時會報錯。加頭文件時< >和“”兩者是有區(qū)別的,主要如下:
當使用< >包含頭文件時,程序編譯時編譯器會首先到keil軟件的安裝文件下進行尋找,具體在keilC51INC這個文件下,如果沒有找到,剛編譯時會報錯。
當使用“”包含頭文件時,程序編譯時編譯器會首先到當前工程所在的文件夾下尋找,如果沒有找到,則馬上到keil軟件的安裝文件下進行尋找,如果都沒有找到,則編譯時會報錯。由于在安裝文件下,所以一般寫成#include,就可以了。
現(xiàn)在我們打開reg52.h文件,看里面具體內(nèi)容,可以直接在安裝文件keilC51INC直接找到reg52.h文件,也可以在編輯界面將鼠標箭頭放在#include,然后右鍵再選擇
Open docment ,如圖12所示。
圖12 打開頭文件
此時會出現(xiàn)reg52.h的內(nèi)容如下:
/*--------------------------------------------------------------------------
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口所對應(yīng)的特殊功能寄存器P1在內(nèi)存中的地址為0x80。換另一種說法就是我們對0x80處的寄存器重新取名P0,以后我們在程序中對P0進行操作,就相當于直接對0x80處的寄存器進行操作。
sfr表示特殊功能寄存器的意思,它并非標準C語言的關(guān)鍵字,而是Keil為能直接訪問80C51中的SFR而提供了一個新的關(guān)鍵詞,其用法是:sfr 特殊功能寄存器名=地址值(注意對于頭文件里“特殊功能寄存器名”,用戶實際上也可以修改的,如P1=0x80,也可改為A1=0x80,但sfr和地址值則不能更改,否者會編譯出錯。)
以上是對寄存器地址和定義和聲明作了解釋,大家需要牢牢記?。褐挥袑拇嫫鬟M行聲明地址后,我們才能對其進行賦相關(guān)的值,keil軟件才能編譯通。
上一頁 1 2 下一頁

評論


技術(shù)專區(qū)

關(guān)閉