新聞中心

        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 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 观塘区| 岗巴县| 海伦市| 集贤县| 五家渠市| 平陆县| 长沙市| 金秀| 来安县| 金堂县| 陆丰市| 巴东县| 平南县| 汝阳县| 龙海市| 固镇县| 余姚市| 油尖旺区| 华池县| 咸宁市| 象山县| 托克逊县| 奇台县| 江孜县| 海门市| 西和县| 凤阳县| 吉隆县| 清水河县| 德江县| 温宿县| 沛县| 临清市| 彝良县| 喀喇沁旗| 成武县| 华容县| 石渠县| 马公市| 舟曲县| 凤庆县|