我們?cè)谟?a href="http://m.womende.cn/zhuanti/LWf9SG" style="color:#4595e6;" target="_blank">c語言編程是往往第一行就是reg51.h或者其他的自定義頭文件,我們?cè)趺礃觼砝斫饽兀?/p>
1)“文件包含”處理。
程序的第一行是一個(gè)“文件包含”處理。
所謂“文件包含”是指一個(gè)文件將另外一個(gè)文件的內(nèi)容全部包含進(jìn)來。程序中包含REG51.h
文件的目的是為了要使用P1 (還有其他更多的符號(hào))這個(gè)符號(hào),即通知C 編譯器,程序中所寫的P1 是指80C51單片機(jī)的P1 端口而不是其它變量。這是如何做到的呢?
打開reg51.h 可以看到這樣的一些內(nèi)容:
(此文件一般在C:\KEIL\C51\INC下 ,INC文件夾根目錄里有不少頭文件,并且里面還有很多以公司分類的文件夾,里面也都是相關(guān)產(chǎn)品的頭文件。如果我們要使用自己寫的頭文件,使用的時(shí)候只需把對(duì)應(yīng)頭文件拷貝到INC文件夾里就可以了。)
/*--------------------------------------------------------------------------
REG51.H
Header file for generIC 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil SOFtware, 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)的讀者不難看出,這里都是一些符號(hào)的定義,即規(guī)定符號(hào)名與地
址的對(duì)應(yīng)關(guān)系。注意其中有
sfr P1 = 0x90;
這樣的一行,即定義P1 與地址0x90 對(duì)應(yīng),P1 口的地址就是0x90
(0x90 是C 語言中十六進(jìn)制數(shù)的寫法,相當(dāng)于匯編語言中寫90H)。
從這里還可以看到一個(gè)頻繁出現(xiàn)的詞:sfr
sfr 并非標(biāo)準(zhǔn)C 語言的關(guān)鍵字,而是Keil 為能直接訪問80C51 中的SFR 而提供了一個(gè)新
的關(guān)鍵詞,其用法是:
sfrt 變量名=地址值。
2)符號(hào)P1_0 來表示P1.0 引腳。
在C 語言里,如果直接寫P1.0,C 編譯器并不能識(shí)別,而且P1.0 也不是一個(gè)合法的C
語言變量名,所以得給它另起一個(gè)名字,這里起的名為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;就是定義用符號(hào)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
上一篇:C51程序設(shè)計(jì)中斷及寄存器使用方法
下一篇:I2C總線的工作原理與在51單片機(jī)中的應(yīng)用
推薦閱讀
史海拾趣
DEM Manufacturing一直注重技術(shù)創(chuàng)新和產(chǎn)品升級(jí)。在合并后的幾年里,公司投入大量資源用于研發(fā),推出了一系列具有創(chuàng)新性的電子產(chǎn)品。這些產(chǎn)品不僅滿足了市場(chǎng)的多樣化需求,還為公司贏得了良好的口碑和廣泛的客戶基礎(chǔ)。
面對(duì)數(shù)字化浪潮和智能制造的興起,DESCO公司積極擁抱變革。公司投入大量資金引進(jìn)先進(jìn)的自動(dòng)化設(shè)備和智能化生產(chǎn)線,提高生產(chǎn)效率和產(chǎn)品質(zhì)量。同時(shí),DESCO還加強(qiáng)了數(shù)字化營(yíng)銷和客戶服務(wù)體系建設(shè),提升了客戶體驗(yàn)和市場(chǎng)響應(yīng)速度。這些舉措使公司在激烈的市場(chǎng)競(jìng)爭(zhēng)中保持了領(lǐng)先地位。
在電子行業(yè)的早期,Cofan Usa Inc公司以其敏銳的市場(chǎng)洞察力和技術(shù)創(chuàng)新能力,成功研發(fā)出一款具有革命性的電子產(chǎn)品,這款產(chǎn)品憑借其出色的性能和用戶體驗(yàn),迅速在市場(chǎng)上獲得認(rèn)可。公司不斷投入研發(fā)資源,持續(xù)推出新產(chǎn)品,逐漸在電子行業(yè)中樹立起了技術(shù)領(lǐng)先的形象。
2015年,Contrinex正式進(jìn)入中國(guó)市場(chǎng),成立了全新的中國(guó)子公司。這一重要舉措不僅進(jìn)一步拓寬了公司的業(yè)務(wù)范圍,也為中國(guó)客戶提供了更加便捷和高效的服務(wù)。在中國(guó)市場(chǎng),Contrinex憑借其電感式、光電式、安全光幕和RFID系統(tǒng)的工業(yè)級(jí)傳感器產(chǎn)品,贏得了眾多客戶的青睞和信賴。
隨著電子行業(yè)的不斷發(fā)展,小型化、集成化成為產(chǎn)品設(shè)計(jì)的趨勢(shì)。COTO TECHNOLOGY緊跟時(shí)代潮流,于1983年成功研發(fā)出史上首款表面貼裝干簧繼電器。這一技術(shù)的突破不僅提高了產(chǎn)品的生產(chǎn)效率,更使得COTO的產(chǎn)品在小型化方面走在了行業(yè)前列。這一創(chuàng)新不僅增強(qiáng)了COTO在市場(chǎng)上的競(jìng)爭(zhēng)力,也進(jìn)一步鞏固了其在干簧繼電器領(lǐng)域的領(lǐng)導(dǎo)地位。
宜源科技公司深知品質(zhì)對(duì)于企業(yè)長(zhǎng)遠(yuǎn)發(fā)展的重要性。因此,公司從原材料采購(gòu)到生產(chǎn)流程控制,再到產(chǎn)品出廠檢驗(yàn),都嚴(yán)格遵循國(guó)際標(biāo)準(zhǔn)和行業(yè)規(guī)范。通過不斷提升產(chǎn)品品質(zhì),宜源科技贏得了客戶的信賴和市場(chǎng)的認(rèn)可,逐漸樹立起自己的品牌形象。
AOS ON FAIRSHILD IOR VISHAY MI ST代理經(jīng)銷商 我公司是AOS,ON,FAIRSHILD,IOR,VISHAY,MI,ST國(guó)際知名品牌代理經(jīng)銷商,主要經(jīng)營(yíng)各系品牌IC、 IGBT、MOS管。有需要的廠家,可將預(yù)計(jì)年份周期各月采購(gòu)量以及,合作方式,意向價(jià)格(注明交貨地址,是否含稅以及稅率)發(fā)給我司(sal06@wgwydz.com)。對(duì)有合作 ...… 查看全部問答∨ |
Build Options中已選中Enable kernel debugger和Enable KITL。 在Core OS Services中添加了Target Control Support。 Target Device Connectivity Options中的配置為: Download: None Transport: Ethernet Debugger: K ...… 查看全部問答∨ |
嵌入式系統(tǒng)的雙CPU通訊協(xié)議設(shè)計(jì) 我是應(yīng)屆的本科畢業(yè)生,學(xué)軟件工程的。簽到東軟IA事業(yè)部。給我出的畢業(yè)設(shè)計(jì)課題為《嵌入式系統(tǒng)的雙CPU通訊協(xié)議設(shè)計(jì)》??晌铱梢哉f基本沒有接觸過,有點(diǎn)無從下手的感覺。有沒有哪位牛人,給我點(diǎn)基本思路啊。比如: 1.用什么平臺(tái)、什么開發(fā)工具 2. ...… 查看全部問答∨ |
想知道下它是如何傳遞數(shù)據(jù)的,讀入數(shù)據(jù)后,送到輸出口的原理??比如說讀入的數(shù)據(jù)為3.85,到輸出口是怎么分配的??急… 查看全部問答∨ |
WindowsCE電源管理是不是存在設(shè)計(jì)問題?(高手請(qǐng)進(jìn)) 小弟最近被手機(jī)白屏問題所煩擾。WinCE的display驅(qū)動(dòng)和backlight驅(qū)動(dòng)都屬于可以被電源管理的設(shè)備。但是他們有著潛在關(guān)系。 在系統(tǒng)suspend的時(shí)候,應(yīng)該先關(guān)背光,再關(guān)LCD。 而在系統(tǒng)wake up的時(shí)候,則應(yīng)該先開LCD,再開背光。 而Power Manager在管 ...… 查看全部問答∨ |
silicon labs新推無線通信模塊si1000系列資料 最近剛申請(qǐng)下芯科實(shí)驗(yàn)室的一款集MCU和無線通信模塊的芯片SI1000評(píng)估板,不知道大家有沒有用過,可以一起交流一下… 查看全部問答∨ |
想問下關(guān)于功率測(cè)試的原理,用什么系列的芯片,可以用什么樣的單片機(jī),程序流程應(yīng)該如何走 這功能是不是要分別測(cè)出電流和電壓然后來計(jì)算得出呢… 查看全部問答∨ |
本人PIC單片機(jī)初學(xué)者,問個(gè)弱弱的問題,請(qǐng)各位高手幫幫忙解決。 如PIC 18F6720中,定義全局變量A,但在主函數(shù)中A的值為什么不能改變? Unsigned char A; Main() { //初始化省略; If(RA=1) ...… 查看全部問答∨ |
【設(shè)計(jì)工具】 演示如何使用ISE開發(fā)FPGA項(xiàng)目(1) $(\'swf_anF\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMTk5NDQzOTgw/v.sw ...… 查看全部問答∨ |
我用TLC5615做了波形發(fā)生器,可調(diào)頻率和幅度(用電位器),AD采集用的是TLC2543,遇到的問題是:::: 在產(chǎn)生方波的時(shí)候,當(dāng)幅度很大的時(shí)候,波形不平;而幅度小的時(shí)候波形很平;;;;還有就是正弦波,調(diào)節(jié)幅度很大的時(shí)候,波形也會(huì)變形(正弦波 ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- 國(guó)芯科技發(fā)布全球首款48V安全氣囊芯片,引領(lǐng)智能汽車新紀(jì)元
- 亞馬遜全球部署100萬臺(tái)機(jī)器人
- 自動(dòng)駕駛只用激光雷達(dá)進(jìn)行感知會(huì)有哪些問題?
- 為什么電源紋波測(cè)試結(jié)果與理論設(shè)計(jì)如此之大?
- UWB信標(biāo)與LoRa基站網(wǎng)關(guān)數(shù)據(jù)區(qū)別在哪里?
- 什么是AI 同傳技術(shù)
- 人工智能處理器和加速器到底是什么?
- PWM控制(脈沖寬度調(diào)制)的基本原理是什么
- 如何設(shè)計(jì)帶集成運(yùn)放構(gòu)成的方波發(fā)生器
- DSP調(diào)度算法的基本概念和原理
- 與PI一起探索 LinkSwitch-TN2 的秘密看視頻答題贏好禮!
- 下載MPS汽車電機(jī)控制技術(shù)干貨,贏【Keep體脂秤、自動(dòng)洗手機(jī)套裝、小米保溫杯】,開啟汽車技術(shù)進(jìn)階之旅!
- 分享你遇到的那些bug和解決技巧,贏萬圣節(jié)小驚喜!
- 泰克任意波形發(fā)生器,跨越成本極限,克服挑戰(zhàn)
- 今日競(jìng)拍:TI SimpleLink Wifi CC3220S
- TI毫米波雷達(dá)技術(shù)在工業(yè)上的應(yīng)用
- TI C2000TM的信號(hào)鏈實(shí)時(shí)性評(píng)測(cè)和使用教程
- “泰”想開車 智能篇:智能網(wǎng)聯(lián)汽車,實(shí)現(xiàn)無憂駕駛
- TI 樣片免費(fèi)申請(qǐng),曬樣片贏好禮!
- TE智能工廠解決方案,助力工業(yè)數(shù)字化轉(zhuǎn)型
- 慶國(guó)內(nèi)首臺(tái)關(guān)鍵尺寸量測(cè)設(shè)備出機(jī)中芯國(guó)際
- Yole主席:中國(guó)半導(dǎo)體設(shè)備在10年之后追上日本
- 中國(guó)反壟斷局無條件批準(zhǔn)了智路資本收購(gòu)美格納半導(dǎo)體股權(quán)
- 綿陽一集成電路項(xiàng)目,兩年形成年產(chǎn)60萬片8英寸晶圓產(chǎn)能
- 沖百億規(guī)模,馬鞍山鄭蒲港新區(qū)半導(dǎo)體產(chǎn)業(yè)釋放“芯”信號(hào)
- 熱烈歡迎浦公節(jié)能領(lǐng)導(dǎo)蒞臨中如集團(tuán)參觀考察
- STM32 ST-LINK Utility使用教程
- STM32 ST-LINK Utility解決錯(cuò)誤
- 8月機(jī)器人行業(yè)新品一覽:小米、百度、特斯拉布局機(jī)器人賽道
- 【STM32平衡小車】線性CCD( TSL1401CL)巡線
- MSP430F5529除法運(yùn)算問題
- 麻煩哪位大俠我傳一下enet_lwip,enet_io,enet_ptpd,enet_uIP這幾個(gè)程序吧?。?!
- VS2005下的類視圖分頁下,一個(gè)類在類列表里面看不到,怎么回事?.h和.cpp文件工程下都加進(jìn)去了。
- 【OpenWRT】.4 路由器通過nfs直接訪問開發(fā)機(jī)的build_dir
- C8051F350的雙極性與單極性的溫度測(cè)量差異巨大?
- 專題討論——壓電變壓器的應(yīng)用
- TMS320F28035入門教程
- 【與EEWORLD一起過年】之一——許愿2011!(已開獎(jiǎng))
- wince驅(qū)動(dòng)加載的問題!!!!!!
- LPS22HH和LPS22HB的區(qū)別