第4課 點(diǎn)亮發(fā)光管程序分析
為了便于講解,這里把上節(jié)課的程序一并給出:
例1 點(diǎn)亮第一個(gè)發(fā)光二極管程序
(1)輸入源程序(又稱(chēng)為程序編輯)
#include//52系列單片機(jī)頭文件
sbit D1=P1^0;//位定義單片機(jī)P1口的第1位
void main()//主函數(shù)
{
D1=0;//點(diǎn)亮第一個(gè)發(fā)光二極管
}
1、頭文件
程序的第一句#include稱(chēng)為頭文件,頭文件就是C語(yǔ)言中的“文件包含的”的意思。所謂“文件包含”是指在一個(gè)文件內(nèi)將另外一個(gè)文件的內(nèi)容全部包含進(jìn)來(lái)。因?yàn)楸话奈募械囊恍┒x和命令使用的頻率很高,幾乎每個(gè)程序中都可能要用到,為了提高編程效率,減少編程人員的重得勞動(dòng),將這些定義和命令單獨(dú)組成一個(gè)文件,如reg52.h,然后用#include包含進(jìn)來(lái)就可以了,這個(gè)就相當(dāng)于工業(yè)上的標(biāo)準(zhǔn)零件,拿來(lái)直接用就可以了。
在程序中加入頭文件通常有兩種方法,分別是#include和#include“reg52.h”,注意頭文件句末不需要加“;”否者編譯器編譯時(shí)會(huì)報(bào)錯(cuò)。加頭文件時(shí)< >和“”兩者是有區(qū)別的,主要如下:
當(dāng)使用< >包含頭文件時(shí),程序編譯時(shí)編譯器會(huì)首先到keil軟件的安裝文件下進(jìn)行尋找,具體在keilC51INC這個(gè)文件下,如果沒(méi)有找到,剛編譯時(shí)會(huì)報(bào)錯(cuò)。
當(dāng)使用“”包含頭文件時(shí),程序編譯時(shí)編譯器會(huì)首先到當(dāng)前工程所在的文件夾下尋找,如果沒(méi)有找到,則馬上到keil軟件的安裝文件下進(jìn)行尋找,如果都沒(méi)有找到,則編譯時(shí)會(huì)報(bào)錯(cuò)。由于在安裝文件下,所以一般寫(xiě)成#include,就可以了。
現(xiàn)在我們打開(kāi)reg52.h文件,看里面具體內(nèi)容,可以直接在安裝文件keilC51INC直接找到reg52.h文件,也可以在編輯界面將鼠標(biāo)箭頭放在#include,然后右鍵再選擇
Open docment ,如圖12所示。
圖12 打開(kāi)頭文件
此時(shí)會(huì)出現(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
該頭文件主要是對(duì)52單片機(jī)所有特殊功能寄存器的地址進(jìn)行聲明。
sfr P1 = 0x90這句話(huà)表示:P1口所對(duì)應(yīng)的特殊功能寄存器P1在內(nèi)存中的地址為0x80。換另一種說(shuō)法就是我們對(duì)0x80處的寄存器重新取名P0,以后我們?cè)诔绦蛑袑?duì)P0進(jìn)行操作,就相當(dāng)于直接對(duì)0x80處的寄存器進(jìn)行操作。
sfr表示特殊功能寄存器的意思,它并非標(biāo)準(zhǔn)C語(yǔ)言的關(guān)鍵字,而是Keil為能直接訪(fǎng)問(wèn)80C51中的SFR而提供了一個(gè)新的關(guān)鍵詞,其用法是:sfr 特殊功能寄存器名=地址值(注意對(duì)于頭文件里“特殊功能寄存器名”,用戶(hù)實(shí)際上也可以修改的,如P1=0x80,也可改為A1=0x80,但sfr和地址值則不能更改,否者會(huì)編譯出錯(cuò)。)
以上是對(duì)寄存器地址和定義和聲明作了解釋?zhuān)蠹倚枰卫斡涀。褐挥袑?duì)寄存器進(jìn)行聲明地址后,我們才能對(duì)其進(jìn)行賦相關(guān)的值,keil軟件才能編譯通。
關(guān)鍵詞:
點(diǎn)亮發(fā)光管程序分析單片
相關(guān)推薦
技術(shù)專(zhuān)區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車(chē)電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論