日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 我們在用c語言編程是往往第一行就是reg51.h或者其他的自定義頭文件,我們怎么樣來理解呢?1)“文件包含”處理。程序的第一行是一個“文件包含”處理。所謂“文件包含”是指一個文件將另外一個文件的內(nèi)

我們在用c語言編程是往往第一行就是reg51.h或者其他的自定義頭文件,我們怎么樣來理解呢?

1)“文件包含”處理。

程序的第一行是一個“文件包含”處理。

所謂“文件包含”是指一個文件將另外一個文件的內(nèi)容全部包含進(jìn)來。程序中包含REG51.h

文件的目的是為了要使用P1 (還有其他更多的符號)這個符號,即通知C 編譯器,程序中所寫的P1 是指80C51單片機(jī)的P1 端口而不是其它變量。這是如何做到的呢?

打開reg51.h 可以看到這樣的一些內(nèi)容:

(此文件一般在C:KEILC51INC下 ,INC文件夾根目錄里有不少頭文件,并且里面還有很多以公司分類的文件夾,里面也都是相關(guān)產(chǎn)品的頭文件。如果我們要使用自己寫的頭文件,使用的時候只需把對應(yīng)頭文件拷貝到INC文件夾里就可以了。)

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

REG51.H


Header file for generIC80C51 and 80C31 microcontroller.

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

All rights reserved.

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


#ifndef __REG51_H__

#define __REG51_H__


/* BYTE Register */

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;



/* BIT Register */

/* PSW */

sbit CY = 0xD7;

sbit AC = 0xD6;

sbit F0 = 0xD5;

sbit RS1 = 0xD4;

sbit RS0 = 0xD3;

sbit OV = 0xD2;

sbit P = 0xD0;


/* TCON */

sbit TF1 = 0x8F;

sbit TR1 = 0x8E;

sbit TF0 = 0x8D;

sbit TR0 = 0x8C;

sbit IE1 = 0x8B;

sbit IT1 = 0x8A;

sbit IE0 = 0x89;

sbit IT0 = 0x88;


/* IE */

sbit EA = 0xAF;

sbit ES = 0xAC;

sbit ET1 = 0xAB;

sbit EX1 = 0xAA;

sbit ET0 = 0xA9;

sbit EX0 = 0xA8;


/* IP */

sbit PS = 0xBC;

sbit PT1 = 0xBB;

sbit PX1 = 0xBA;

sbit PT0 = 0xB9;

sbit PX0 = 0xB8;


/* P3 */

sbit RD = 0xB7;

sbit WR = 0xB6;

sbit T1 = 0xB5;

sbit T0 = 0xB4;

sbit INT1 = 0xB3;

sbit INT0 = 0xB2;

sbit TXD = 0xB1;

sbit RXD = 0xB0;


/* SCON */

sbit SM0 = 0x9F;

sbit SM1 = 0x9E;

sbit SM2 = 0x9D;

sbit REN = 0x9C;

sbit TB8 = 0x9B;

sbit RB8 = 0x9A;

sbit TI = 0x99;

sbit RI = 0x98;


#endif


熟悉80C51 內(nèi)部結(jié)構(gòu)的讀者不難看出,這里都是一些符號的定義,即規(guī)定符號名與地

址的對應(yīng)關(guān)系。注意其中有

sfr P1 = 0x90;

這樣的一行,即定義P1 與地址0x90 對應(yīng),P1 口的地址就是0x90

(0x90 是C 語言中十六進(jìn)制數(shù)的寫法,相當(dāng)于匯編語言中寫90H)。

從這里還可以看到一個頻繁出現(xiàn)的詞:sfr

sfr 并非標(biāo)準(zhǔn)C 語言的關(guān)鍵字,而是Keil 為能直接訪問80C51 中的SFR 而提供了一個新

的關(guān)鍵詞,其用法是:

sfrt 變量名=地址值。


2)符號P1_0 來表示P1.0 引腳。

在C 語言里,如果直接寫P1.0,C 編譯器并不能識別,而且P1.0 也不是一個合法的C

語言變量名,所以得給它另起一個名字,這里起的名為P1_0,可是P1_0 是不是就是P1.0

呢?你這么認(rèn)為,C 編譯器可不這么認(rèn)為,所以必須給它們建立聯(lián)系,這里使用了Keil C

的關(guān)鍵字sbit 來定義,sbit 的用法有三種:

第一種方法:sbit 位變量名=地址值

第二種方法:sbit 位變量名=SFR 名稱^變量位地址值

第三種方法:sbit 位變量名=SFR 地址值^變量位地址值

如定義PSW 中的OV 可以用以下三種方法:

sbit OV=0xd2 (1)說明:0xd2 是OV 的位地址值

sbit OV=PSW^2 (2)說明:其中PSW 必須先用sfr 定義好

sbit OV=0xD0^2 (3)說明:0xD0 就是PSW 的地址值

因此這里用sfr P1_0=P1^0;就是定義用符號P1_0 來表示P1.0 引腳,如果你愿意也可以

起P10 一類的名字,只要下面程序中也隨之更改就行了。



下面再附上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


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉