![《8051單片機(jī)原理及應(yīng)用》 課件 第二章 單片機(jī)的基本結(jié)構(gòu)_第1頁(yè)](http://file4.renrendoc.com/view5/M00/20/05/wKhkGGZV06KAB4N-AAGIrdKtfqs709.jpg)
![《8051單片機(jī)原理及應(yīng)用》 課件 第二章 單片機(jī)的基本結(jié)構(gòu)_第2頁(yè)](http://file4.renrendoc.com/view5/M00/20/05/wKhkGGZV06KAB4N-AAGIrdKtfqs7092.jpg)
![《8051單片機(jī)原理及應(yīng)用》 課件 第二章 單片機(jī)的基本結(jié)構(gòu)_第3頁(yè)](http://file4.renrendoc.com/view5/M00/20/05/wKhkGGZV06KAB4N-AAGIrdKtfqs7093.jpg)
![《8051單片機(jī)原理及應(yīng)用》 課件 第二章 單片機(jī)的基本結(jié)構(gòu)_第4頁(yè)](http://file4.renrendoc.com/view5/M00/20/05/wKhkGGZV06KAB4N-AAGIrdKtfqs7094.jpg)
![《8051單片機(jī)原理及應(yīng)用》 課件 第二章 單片機(jī)的基本結(jié)構(gòu)_第5頁(yè)](http://file4.renrendoc.com/view5/M00/20/05/wKhkGGZV06KAB4N-AAGIrdKtfqs7095.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
網(wǎng)絡(luò)空間安全學(xué)院網(wǎng)絡(luò)安全基礎(chǔ)技術(shù)應(yīng)用第二章單片機(jī)的基本結(jié)構(gòu)目錄CONTENT2.1.單片機(jī)發(fā)展簡(jiǎn)史和定義2.2.單片機(jī)內(nèi)部結(jié)構(gòu)概述2.3.中央處理器CPU2.4.程序存儲(chǔ)器ROM2.5.數(shù)據(jù)存儲(chǔ)器RAM2.6.常量和變量2.7.單片機(jī)最小系統(tǒng)2.8.擴(kuò)展閱讀:C51編譯器2.1單片機(jī)發(fā)展簡(jiǎn)史和定義20世紀(jì)70年代初,英特爾(Intel)公司推出了世界上第一臺(tái)微處理器4004,能夠處理4bit的數(shù)據(jù)如圖2-1所示。到了80年代初,Intel推出了8051單片機(jī),能夠處理8bit的數(shù)據(jù),這個(gè)單片機(jī)不僅僅是微處理器,它還把存儲(chǔ)器、通用輸入輸出接口、串行通信接口、定時(shí)器系統(tǒng)、中斷系統(tǒng)等都集成在了單顆芯片,是一款單片微型計(jì)算機(jī),這樣的單芯片結(jié)構(gòu)應(yīng)用極為廣泛,比如控制一個(gè)馬達(dá)一顆單芯片就可以搞定。單片機(jī)結(jié)構(gòu)簡(jiǎn)單、價(jià)格低廉,廣泛應(yīng)用于家用電器、汽車、工業(yè)測(cè)控、通信等設(shè)備中,可以說有“智能”的產(chǎn)品,都有單片機(jī)的影子。圖2.1-1
Intel4位處理器2.1單片機(jī)發(fā)展簡(jiǎn)史和定義Intel在1980年代授權(quán)了8051單片機(jī)的設(shè)計(jì),世界許多IC制造廠商都能生產(chǎn)基于Intel8051架構(gòu)的單片機(jī),因此,現(xiàn)在市場(chǎng)上有許多不同制造商生產(chǎn)的8051單片機(jī),其架構(gòu)和指令集基本上與Intel的原始8051兼容。如MicrochipTechnology(原Atmel)生產(chǎn)的AT89C51、AT89C52、AT89S52RC等、NXPSemiconductors(原Philips)生產(chǎn)的P89C51、WinbondElectronicsCorporation(華邦)的W77、W78系列、STC公司STC89、STC15、STC8、STC32等系列都是基于8051內(nèi)核的單片機(jī),圖2.1-2是STC公司一款雙列直插單片機(jī)外觀。圖2.1-28051單片機(jī)
2.1單片機(jī)發(fā)展簡(jiǎn)史和定義單片機(jī)是一顆封裝好的微型計(jì)算機(jī)芯片,在工業(yè)控制領(lǐng)域應(yīng)用極為廣泛,也稱微控制器(Micro-ControllerUnit,MCU),單片機(jī)把具有數(shù)據(jù)處理能力的中央處理器(CentralProcessingUnit,CPU)、只讀存儲(chǔ)器(ReadOnlyMemory,ROM)、隨機(jī)存儲(chǔ)器(RandomAccessMemory,RAM)、定時(shí)計(jì)數(shù)器(Timer/Counter)、輸入輸出并行接口(Input/Output,I/O)、串行通信接口(SerialCommunication)、中斷系統(tǒng)(InterruptSystem)等功能都集成到一塊硅片上,構(gòu)成了一個(gè)小而完善的微型計(jì)算機(jī)系統(tǒng)。傳統(tǒng)8051單片機(jī)(特指早期單片機(jī))內(nèi)部結(jié)構(gòu)如圖2.1-3所示,CPU機(jī)器周期是12T,RAM有256字節(jié)、ROM有4K字節(jié),還提供4個(gè)8位并口、1個(gè)全雙工串行口、2個(gè)16位定時(shí)/計(jì)數(shù)器,5個(gè)中斷源的中斷系統(tǒng)。圖2.1-3傳統(tǒng)8051單片機(jī)內(nèi)部結(jié)構(gòu)
2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述隨著技術(shù)的發(fā)展,現(xiàn)代8051單片機(jī),無論是運(yùn)行速度還是性能都比傳統(tǒng)8051單片機(jī)優(yōu)越,稱為增強(qiáng)型單片機(jī)。圖2.2-1展示了STC8x系列單片機(jī)內(nèi)部結(jié)構(gòu)圖,CPU、存儲(chǔ)器、數(shù)字外設(shè)都比傳統(tǒng)8051單片機(jī)性能強(qiáng)。擁有超高速1T8位8051微處理器內(nèi)核,比傳統(tǒng)8051快約12倍。內(nèi)置高精度R/C時(shí)鐘,時(shí)鐘頻率可任意設(shè)置。ROM直接使用Flash閃存,具有斷電數(shù)據(jù)不丟失的特性,讀取速度快,容量可以達(dá)到128K字節(jié)。RAM直接使用靜態(tài)RAM(StaticRAM,SRAM),SRAM到目前為止是讀寫速度最快的內(nèi)存工藝之一,傳統(tǒng)8051的RAM容量只有256字節(jié),但是現(xiàn)代單片機(jī)的RAM容量可以擴(kuò)展到12K字節(jié)。內(nèi)置ISP引導(dǎo)代碼。傳統(tǒng)8051單片機(jī)需要手動(dòng)添加ISP引導(dǎo)碼,現(xiàn)代單片機(jī)將ISP引導(dǎo)碼內(nèi)置在芯片里,通過上位機(jī)軟件直接串口下載程序,無需使用編程器。2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述傳統(tǒng)8051單片機(jī)只有4組GPIO,且只有P3口提供第二功能,現(xiàn)代單片機(jī)的GPIO口可以達(dá)到8組或更多,每個(gè)GPIO口都有擴(kuò)展功能,所有GPIO均支持4種工作模式?,F(xiàn)代單片機(jī)定時(shí)器數(shù)量增多,有3~5個(gè)16位定時(shí)器;串行接口數(shù)量增多,有2~4個(gè)高速串口。數(shù)字外設(shè)增多,自帶超高速ADC模數(shù)轉(zhuǎn)換器,支持SPI、I2C總線協(xié)議。內(nèi)置復(fù)位電路,支持上電復(fù)位、復(fù)位腳復(fù)位、看門狗溢出復(fù)位、低壓檢測(cè)復(fù)位,還支持軟件復(fù)位。有4級(jí)嵌套中斷系統(tǒng)。傳統(tǒng)8051只有5個(gè)中斷源,現(xiàn)代單片機(jī)可提供幾十個(gè)中斷源,這些中斷源可根據(jù)情況設(shè)置為4級(jí)嵌套優(yōu)先。
有DMA(DirectMemoryAccess)直接存儲(chǔ)器存取功能,該功能使得單片機(jī)可不通過CPU直接訪問單片機(jī)內(nèi)部存儲(chǔ)器。2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述有看門狗定時(shí)器,防止單片機(jī)程序跑飛或陷入死循環(huán)。綜上所述,現(xiàn)代51單片機(jī)速度更快,存儲(chǔ)容量更大,外設(shè)更加豐富,集成度更高,適用于低、中、高多種應(yīng)用場(chǎng)景的使用。除了8位的STC8H新型單片機(jī),STC公司還推出32位8051內(nèi)核(1T)單片機(jī),比傳統(tǒng)8051快約70倍,內(nèi)嵌DMA、LCD驅(qū)動(dòng)8080接口,性能可以與ARMCortex微控制器相比擬。圖2.2-1STC8x系列單片機(jī)內(nèi)部結(jié)構(gòu)2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述STC單片機(jī)命名規(guī)則STC公司成立于1999年,STC系列單片機(jī)最大特點(diǎn)是擁有超強(qiáng)抗干擾能力,且所有產(chǎn)品都具備在系統(tǒng)可編程(InSystemProgramming,ISP)下載功能,指令幾乎都可以單時(shí)鐘完成。STC系列單片機(jī)的發(fā)展歷史如表2.2-1所示。年份事件單片機(jī)特點(diǎn)2004年STC公司推出STC89系列8051單片機(jī)具有ISP在系統(tǒng)編程功能,與傳統(tǒng)8051內(nèi)部結(jié)構(gòu)一致。2006年STC公司推出STC12系列8051單片機(jī)全球首款大批量生產(chǎn)的1T8051單片機(jī),工作速度提升2011年STC公司推出STC15系列8051單片機(jī)具有IAP在應(yīng)用編程功能,采用STC-Y5超高速CPU內(nèi)核2019年STC公司推出STC8H/STC8G/STC8A系列超高速8051單片機(jī)STC公司最快的1T8051單片機(jī),采用STC-Y6超高速CPU內(nèi)核2021年STC公司推出首款STC32x系列8051單片機(jī)32位8051單片機(jī),工作速度更快。表2.2-1STC8051單片機(jī)的發(fā)展歷史2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述單片機(jī)的RAM和ROM容量是非常重要的兩個(gè)性能指標(biāo),STC單片機(jī)命名規(guī)則里就體現(xiàn)了存儲(chǔ)器容量以及增強(qiáng)性的功能特點(diǎn)。STC單片機(jī)命名規(guī)則如圖2.2-2所示,由廠家代碼、系列編號(hào)、存儲(chǔ)器容量、增強(qiáng)功能等組成,其符號(hào)如表2.2-2所示。圖2.2-2STC命名規(guī)則2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述廠家系列工作電壓RAM容量ROM容量增強(qiáng)功能STC
8912158X32XF:3.8-5.5V,F(xiàn)lash工作電壓L:2.4-3.6V低電壓W:2.5-5.5V,寬電壓1K:1024字節(jié)2K:2048字節(jié)8K:8192字節(jié)12K:12K字節(jié)08:8K字節(jié)16:16K字節(jié)28:28K字節(jié)60:60K字節(jié)64:64K字節(jié)128:128K字節(jié)W:有掉電喚醒功能專用定時(shí)器。S2:有兩組串口S4:有四組串口U:USB接口表2.2-2STC單片機(jī)命名規(guī)則2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述舉例:STC15F2K60S2:STC公司15系列單片機(jī),程序存儲(chǔ)區(qū)(ROM)是Flash,工作電壓在3.8~5.5V,2K字節(jié)的RAM,60K字節(jié)ROM,有兩組串口。IAP15F2K61S2:IAP(InApplicationProgramming,在應(yīng)用編程)開頭,表明Flash程序存儲(chǔ)區(qū)可以作為EEPROM使用,單片機(jī)通過應(yīng)用程序就可以改寫程序?qū)崿F(xiàn)仿真。是STC公司15系列單片機(jī),F(xiàn)lash型的ROM有61K字節(jié),RAM有2K字節(jié),有兩組串口。STC8H8K64U:STC公司8H系列單片機(jī),8K字節(jié)的RAM,64K字節(jié)ROM,提供USB接口。STC32G12K128:STC公司32G系列單片機(jī),12K字節(jié)的RAM,128K字節(jié)ROM。說明:1.從STC8H系列開設(shè)命名里沒有“F”字母,但ROM依然是Flash工藝,F(xiàn)lash已經(jīng)是標(biāo)配,且都具有IAP在應(yīng)用下載和仿真功能。2.從STC32G系列開設(shè)命名里沒有“U”字母,但芯片依然提供USB接口,USB已經(jīng)是標(biāo)配。2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述任務(wù)1.認(rèn)識(shí)單片機(jī)本節(jié)講述了現(xiàn)代8051單片機(jī)特點(diǎn),請(qǐng)你對(duì)照手上的開發(fā)板,找到單片機(jī)芯片,仔細(xì)看看,這個(gè)單片機(jī)是什么型號(hào),型號(hào)代碼有什么意義?打開單片機(jī)供應(yīng)商的官方網(wǎng)站,看看網(wǎng)站上都提供了哪些和單片機(jī)有關(guān)的資料。找到單片機(jī)的使用說明書,說說看這份說明書都講述了哪些內(nèi)容?2.3中央處理器CPU中央處理器(CentralProcessingUnit,簡(jiǎn)稱CPU)是計(jì)算機(jī)系統(tǒng)的運(yùn)算和控制核心,相當(dāng)于人的大腦,是計(jì)算機(jī)程序的執(zhí)行者,圖2.3-1表明CPU由運(yùn)算器和控制器組成,CPU和存儲(chǔ)器、輸入輸出設(shè)備都有聯(lián)系。最早的CPU只能并行操作4位二進(jìn)制數(shù),很快發(fā)展到8位、16位、32位,現(xiàn)在通用計(jì)算機(jī)都已經(jīng)是64位處理器了,CPU并行操作的位數(shù)越多,處理速度越快,另外CPU的處理速度還受系統(tǒng)時(shí)鐘影響,系統(tǒng)時(shí)鐘也稱“主頻”,主頻越高,處理速度越快。圖2.3-1計(jì)算機(jī)體系結(jié)構(gòu)
CPU運(yùn)算器控制器數(shù)據(jù)流指令流控制流輸入設(shè)備存儲(chǔ)器輸出設(shè)備2.3.1CPU工作過程CPU是單片機(jī)的核心配件,是單片機(jī)的運(yùn)算核心和控制核心。CPU由運(yùn)算器和控制器兩部分組成。1.運(yùn)算器:運(yùn)算器由算術(shù)邏輯單元(ALU)、累加器和寄存器組成,ALU完成兩個(gè)功能:執(zhí)行加減乘除等算術(shù)運(yùn)算;執(zhí)行邏輯與,或,比較等邏輯運(yùn)算。ALU的輸入源是兩個(gè)數(shù)據(jù),分別來自累加器和數(shù)據(jù)寄存器,ALU的運(yùn)算結(jié)果存回累加器,取代累加器原來的內(nèi)容。運(yùn)算器執(zhí)行的操作全部由控制器發(fā)出的控制信號(hào)指揮,一個(gè)算術(shù)操作產(chǎn)生一個(gè)運(yùn)算結(jié)果,一個(gè)邏輯操作產(chǎn)生一個(gè)真假判決。2.控制器:控制器協(xié)調(diào)和控制整個(gè)計(jì)算機(jī)系統(tǒng)的操作,主要由以下幾個(gè)寄存器/控制器組成。(1)程序計(jì)數(shù)器PC(ProgramCounter):也稱程序指針,保存下一條指令的地址,CPU在執(zhí)行程序時(shí),自動(dòng)修改PC的內(nèi)容,使得它始終指向下一條指令的存放地址。(2)指令寄存器IR(InstructionRegister):保存當(dāng)前正在執(zhí)行的一條指令。當(dāng)執(zhí)行一條指令時(shí),先把它從程序存儲(chǔ)器中取出,然后再傳送到指令寄存器。2.3.2單片機(jī)時(shí)鐘樹STC8H系列通用系統(tǒng)時(shí)鐘結(jié)構(gòu)如圖2.3-2所示,它也是現(xiàn)代單片機(jī)典型時(shí)鐘樹。豎梯圖形是多選一復(fù)用器。主時(shí)鐘MCLK可選內(nèi)部高速IRC、外部高速晶振、外部32K晶振或內(nèi)部32KHz,由于32KHz頻率太低,僅用于RTC時(shí)鐘,因此MCLK主要在外部高速晶振和內(nèi)部高速高精度IRC之間選擇。主時(shí)鐘MCLK經(jīng)過CLKDIV分頻后,得到系統(tǒng)時(shí)鐘SYSCLK。SYSCLK就是單片機(jī)CPU的工作時(shí)鐘。當(dāng)CLKDIV=1時(shí),系統(tǒng)時(shí)鐘與時(shí)鐘源的頻率一致。STC8H系列的IRC有四個(gè)中心頻率6MHz、10MHz、27MHz、44MHz,圍繞中心頻率,可變化范圍在±27%,從而產(chǎn)生有小數(shù)點(diǎn)的頻率。圖2.3-2STC8H系列通用系統(tǒng)時(shí)鐘結(jié)構(gòu)2.3.3CPU的工作時(shí)間單片機(jī)內(nèi)部是一個(gè)同步數(shù)字系統(tǒng),CPU和存儲(chǔ)器等通過一個(gè)統(tǒng)一的節(jié)拍工作,這個(gè)統(tǒng)一的節(jié)拍就是單片機(jī)系統(tǒng)時(shí)鐘,也稱主頻,是圖2.3-2時(shí)鐘樹中的SYSCLK。STC主頻在4~48MHz可調(diào)。單片機(jī)按照節(jié)拍工作,節(jié)拍的頻率f和節(jié)拍的時(shí)間T互為倒數(shù):
——公式2.3-12.3.3CPU的工作時(shí)間CPU有以下幾種工作時(shí)間:1.時(shí)鐘周期:?jiǎn)纹瑱C(jī)R/C時(shí)鐘電路發(fā)生的振蕩周期,也稱主頻周期、振蕩周期、時(shí)鐘節(jié)拍,是單片機(jī)最小時(shí)間單位。2.機(jī)器周期:CPU執(zhí)行一個(gè)基本操作所需要的時(shí)間稱為機(jī)器周期,STC單片機(jī)有兩種機(jī)器周期方式:12T:和傳統(tǒng)8051單片機(jī)一致,一個(gè)機(jī)器周期由12個(gè)時(shí)鐘周期組成,稱為12T工作時(shí)間。1T:一個(gè)機(jī)器周期由1個(gè)時(shí)鐘周期組成,稱為1T工作時(shí)間。單片機(jī)時(shí)鐘周期和機(jī)器周期的關(guān)系如圖2.3-3所示。圖2.3-3單片機(jī)的工作周期2.3.3CPU的工作時(shí)間3.指令周期:CPU執(zhí)行一條指令所需要的時(shí)間稱為指令周期,它由若干個(gè)機(jī)器周期組成。如果指令在一個(gè)機(jī)器周期內(nèi)完成,就稱為單周期指令;如果指令在兩個(gè)機(jī)器周期內(nèi)完成,就稱為雙周期指令;還有的指令需要三、四個(gè)機(jī)器周期才能完成。程序中經(jīng)常用到的跳轉(zhuǎn)指令是單周期指令,執(zhí)行時(shí)間最短,加法指令是四周期指令,執(zhí)行時(shí)間最長(zhǎng)。如果單片機(jī)的時(shí)鐘源是12MHz晶振,根據(jù)公式2.3-1,時(shí)鐘周期是1/12us。表2.3-1列出了1T和12T工作方式下CPU工作時(shí)間??梢?T單片機(jī)的CPU運(yùn)行速度遠(yuǎn)比12T單片機(jī)的CPU快得多。表2.3-1單片機(jī)工作時(shí)間1T工作方式12T工作方式時(shí)鐘周期1/12us1/12us機(jī)器周期1/12us1us單周期指令時(shí)間1/12us1us雙周期指令時(shí)間1/6us2us任務(wù)2.安裝KeilC51軟件任務(wù)2.安裝KeilC51軟件任務(wù)要求:在電腦上安裝KeiluVision5forC51軟件。步驟1:下載KeilC51安裝軟件包,教材使用版本KeilC51v960auVision5。步驟2:雙擊安裝包,按照提示要求進(jìn)行安裝。步驟3:在STC官方網(wǎng)站下載最新的STC-ISP編程燒錄軟件,雙擊進(jìn)行安裝。步驟4:在Keil安裝目錄下添加STC芯片型號(hào)和頭文件庫(kù)。以上步驟操作視頻見二維碼2.3-1。二維碼2.3-1
keil軟件的安裝任務(wù)3.建立一個(gè)hello測(cè)試工程任務(wù)3.建立一個(gè)hello測(cè)試工程任務(wù)要求:在Keil軟件下建立一個(gè)hello測(cè)試程序,該程序能夠和上位機(jī)實(shí)現(xiàn)usb通信。步驟1:建立工程文件夾hellotest。在書寫代碼前,先建立工程文件夾,項(xiàng)目相關(guān)文件都在放此文件夾下,方便工程項(xiàng)目的管理。步驟2:新建工程。打開Keil軟件,點(diǎn)擊Project菜單,選中“NewuVisionProject”,如圖2.3-4所示。給工程命名并保存在步驟1建立的文件夾里如圖2.3-5所示。圖2.3-4新建工程
圖2.3-5工程保存及命名2.3.3CPU的工作時(shí)間步驟3:選擇器件庫(kù)。本項(xiàng)目使用STC8H8K64U芯片,因此首先在Vendor里選擇STCMCUDatabase,如圖2.3-6所示。步驟4:選擇CPU型號(hào)。在STCMCUDatabase中尋找STC8H系列單片機(jī),找到STC8H8K64U,如圖2.3-7所示。圖2.3-6選擇器件庫(kù)圖2.3-7選擇CPU型號(hào)2.3.3CPU的工作時(shí)間首次建立工程會(huì)跳出“Copy‘STARTUP.a51’toProjectFolderandAddFiletoProject?”的對(duì)話框,選擇“是”,如圖2.3-8所示,進(jìn)入到工程代碼書寫階段。圖2.3-8在工程里自動(dòng)添加啟動(dòng)文件步驟5:書寫程序。第1步點(diǎn)擊“新建”按鈕,打開文本編輯器;第2步點(diǎn)擊“保存”按鈕在工程目錄下保存新文件;第3步輸入文件名稱,因?yàn)樵撐募侵魑募╩ain函數(shù)所在的文件),文件名可以和工程名一致,注意后綴名是.c。如圖2.3-9所示。步驟6:在工程文件里添加庫(kù)文件如圖2.3-10所示。圖2.3-9新建C語(yǔ)言文件圖2.3-10添加usb-hid庫(kù)文件2.3.3CPU的工作時(shí)間步驟7:Keil軟件界面的文本框輸入以下語(yǔ)句。#include"stc.h"#include"usb.h"#include"string.h"voidsys_init();char*USER_DEVICEDESC=NULL;char*USER_PRODUCTDESC=NULL;voidmain(){ sys_init();usb_init();//USB初始化EA=1;2.3.3CPU的工作時(shí)間while(1){if(bUsbOutReady){if(UsbOutBuffer[0]=='h'&&UsbOutBuffer[1]=='e'&&UsbOutBuffer[2]=='l'&&UsbOutBuffer[3]=='l'&&UsbOutBuffer[4]=='o') { printf_hid("ok"); }usb_OUT_done();//接收應(yīng)答(固定格式)}}2.3.3CPU的工作時(shí)間voidsys_init(){P_SW2|=0x80;//擴(kuò)展寄存器(XFR)訪問使能P0M1=0x00;P0M0=0x00;//設(shè)置為準(zhǔn)雙向口P1M1=0x00;P1M0=0x00;//設(shè)置為準(zhǔn)雙向口P2M1=0x00;P2M0=0x00;//設(shè)置為準(zhǔn)雙向口P3M1=0x00;P3M0=0x00;//設(shè)置為準(zhǔn)雙向口P4M1=0x00;P4M0=0x00;//設(shè)置為準(zhǔn)雙向口P5M1=0x00;P5M0=0x00;//設(shè)置為準(zhǔn)雙向口2.3.3CPU的工作時(shí)間P6M1=0x00;P6M0=0x00;//設(shè)置為準(zhǔn)雙向口P7M1=0x00;P7M0=0x00;//設(shè)置為準(zhǔn)雙向口P3M0&=~0x03;P3M1|=0x03;//設(shè)置USB使用的時(shí)鐘源IRC48MCR=0x80;//使能內(nèi)部48M高速IRCwhile(!(IRC48MCR&0x01));//等待時(shí)鐘穩(wěn)定}2.3.3CPU的工作時(shí)間步驟8:準(zhǔn)備編譯,在編譯前,點(diǎn)擊“OptionsforTarget”菜單,進(jìn)行如下幾項(xiàng)設(shè)置:(1)Device欄目里選擇Linker,如圖2.3-11所示。圖2.3-11選擇Linker2.3.3CPU的工作時(shí)間(2)在LX51Misc里添加宏控制語(yǔ)句,如圖2.3-12所示。圖2.3-12添加宏控制語(yǔ)句2.3.3CPU的工作時(shí)間步驟9:編譯。點(diǎn)擊“編譯”按鈕,根據(jù)編譯提示結(jié)果進(jìn)行修改,編譯后的結(jié)果必須是0errors。如圖2.3-13所示。圖2.3-13編譯按鈕和編譯結(jié)果2.3.3CPU的工作時(shí)間以上步驟操作視頻見二維碼2.3-2。二維碼2.3-2
建立hello測(cè)試工程。2.4程序存儲(chǔ)器ROMROM是只讀存儲(chǔ)器(ReadOnlyMemory)的縮寫,主要用于存放用戶程序以及一些初始化數(shù)據(jù)等,所以也稱程序存儲(chǔ)器。ROM是非易失性存儲(chǔ)器,即使掉電,數(shù)據(jù)也依然保持,可以理解成計(jì)算機(jī)的硬盤。ROM從字面上看只能讀、不能寫,實(shí)際上內(nèi)容可以修改。早期的單片機(jī)使用電可擦寫EEPROM(也稱E2PROM),速度慢且讀寫次數(shù)有限?,F(xiàn)在的單片機(jī)大多采用Flash閃存工藝,它最大的特點(diǎn)是讀取數(shù)據(jù)快,不僅有EEPROM電可擦除重寫的功能,還有斷電不丟失數(shù)據(jù)、快速讀取數(shù)據(jù)的特點(diǎn)。2.4.2特殊的ROM存儲(chǔ)單元(1)程序計(jì)數(shù)器PC程序計(jì)數(shù)器(ProgramCounter,PC)保存當(dāng)前欲執(zhí)行指令的地址,也稱指令指針或程序指針。CPU從ROM里取指,首先要訪問PC寄存器,從PC寄存器里拿到單元地址后,再到ROM的存儲(chǔ)單元取指令,CPU工作的最后一個(gè)過程是結(jié)果寫回,這個(gè)過程就包括了寫回PC,如果CPU執(zhí)行的指令是單周期的,那么PC里的內(nèi)容就自動(dòng)增1,如果指令是雙周期的,那么PC里的內(nèi)容就自動(dòng)增2,所以PC里的內(nèi)容始終指向下一個(gè)要執(zhí)行的ROM單元地址。單片機(jī)復(fù)位后,PC的內(nèi)容為0000H,從0000H單元開始執(zhí)行程序。(2)中斷向量入口地址中斷服務(wù)程序的入口地址、中斷編號(hào)合起來稱為中斷向量。當(dāng)中斷發(fā)生并被CPU響應(yīng)后,單片機(jī)就會(huì)自動(dòng)跳轉(zhuǎn)到相應(yīng)的中斷入口地址獲取指令。2.4.2特殊的ROM存儲(chǔ)單元傳統(tǒng)8051單片機(jī)只有5個(gè)中斷源,對(duì)應(yīng)5個(gè)中斷向量,如表2.4-1所示。中斷編號(hào)中斷源入口地址0外部中斷00003H1定時(shí)器0000BH2外部中斷10013H3定時(shí)器1001BH4串口0023H表2.4-1傳統(tǒng)8051單片機(jī)的中斷向量2.4.2特殊的ROM存儲(chǔ)單元STC8系列單片機(jī)支持22個(gè)中斷源,STC32系列單片機(jī)中斷源可達(dá)64個(gè)。表2.4-2列出了STC8系列單片機(jī)常用中斷向量,相較傳統(tǒng)8051,現(xiàn)代單片機(jī)增加了ADC、SPI、I2C等中斷源。中斷編號(hào)中斷源入口地址
中斷編號(hào)中斷源入口地址0外部中斷0(INT0)0003H
11外部中斷3(INT3)005BH1定時(shí)器0(Timer0)000BH
12定時(shí)器2(Timer2)0063H2外部中斷1(INT1)0013H
13-15系統(tǒng)保留
3定時(shí)器1(Timer1)001BH
16外部中斷4(INT4)0083H4串口1(UART1)0023B
17串口3(UART3)008BH5數(shù)模轉(zhuǎn)換(ADC)002BH
18串口4(UART4)0093H6低壓檢測(cè)(LVD)0033H
19定時(shí)器(Timer3)009BH7比較捕獲(CCP/PCA/PWM)003BH
20定時(shí)器(Timer4)00A3H8串口2(UART2)0043B
21比較器(CMP)
9串行接口外設(shè)(SPI)004BH
24I2C總線00C3H10外部中斷2(INT2)0053H
25USB00CBH表2.4-2STC8系列對(duì)應(yīng)的中斷向量2.4.3ROM存儲(chǔ)單元的讀寫程序存儲(chǔ)器用于存放用戶程序、數(shù)據(jù)以及表格等信息。1.用戶程序的讀寫方法:首先在編譯軟件里編寫代碼并編譯成二進(jìn)制文件,然后使用下載軟件或燒寫器將文件下載到單片機(jī)ROM存儲(chǔ)單元,單片機(jī)上電后,CPU從ROM首地址讀程序。2.用戶數(shù)據(jù)的讀寫方法:程序中用到的查表信息如數(shù)碼管顯示字型、漢字字庫(kù)等,這些數(shù)據(jù)是固定不變的,且占用較多存儲(chǔ)空間,此時(shí)數(shù)據(jù)可保存在程序存儲(chǔ)器ROM中,減少對(duì)RAM空間的消耗,在編寫程序時(shí),通過聲明存儲(chǔ)器類型規(guī)定存儲(chǔ)位置。以8位共陰數(shù)碼管字型編碼為例,在數(shù)據(jù)類型“unsignedchar”后面增加“code”標(biāo)識(shí)符:unsignedcharcodetab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};“code”是存儲(chǔ)器類型,表明存儲(chǔ)位置在程序存儲(chǔ)器ROM里。上述舉例定義數(shù)組常量tab[],數(shù)組元素分別是字型0~F的數(shù)碼管顯示編碼。任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證任務(wù)要求:將hello程序的hex文件下載到開發(fā)板,連接上位機(jī),上位機(jī)發(fā)送“hello”,單片機(jī)返回“ok”。步驟1:打開hello工程文件,生成hex文件。(1)在任務(wù)1的工程里,打開OptionsforTarget窗;(2)勾選CreatHEXFile;(3)點(diǎn)擊OK;點(diǎn)擊“編譯”快捷鍵。如圖2.4-2所示。圖2.4-2生成hex文件并編譯任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證步驟2:開發(fā)板連接電腦,usb線纜兩端分別連接開發(fā)板usb插座和電腦USB口;步驟3:打開STC-ISP軟件,設(shè)置下載條件。(1)選擇芯片型號(hào),和開發(fā)板中CPU的型號(hào)一致。(2)點(diǎn)擊“打開程序文件”,在任務(wù)1工程文件目錄的Objects下找到要下載的hex文件,選中并點(diǎn)擊“打開”按鈕。如圖2.4-3所示。圖2.4-3選擇芯片型號(hào),打開程序文件任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證步驟4:下載hex文件到開發(fā)板。先按住實(shí)驗(yàn)箱上的INT0按鍵,然后按住ON/OFF電源按鍵,接著松開ON/OFF電源按鍵,最后松開INT0按鍵,正常情況下就能識(shí)別出“STCUSBWriter(HID1)”設(shè)備。選擇CPU的內(nèi)部時(shí)鐘頻率,然后點(diǎn)擊“下載/編程”,若下載成功,提示欄會(huì)顯示“成功”,如圖2.4-4中1-3步所示。圖2.4-4程序下載和USB-HID通信驗(yàn)證2.4.3ROM存儲(chǔ)單元的讀寫步驟5:通信測(cè)試。借助USB-HID助手,實(shí)現(xiàn)電腦和開發(fā)板的握手,過程如圖2.4-4中4-7步。(1)在STC-ISP軟件中打開“USB-HID助手”的界面;(2)在設(shè)備欄選擇“STC\USB-ISP”,點(diǎn)擊“打開設(shè)備”。(3)在發(fā)送緩沖書寫“hello”點(diǎn)擊“發(fā)送”。此時(shí),在接收緩沖區(qū)收到“ok”。(4)每點(diǎn)擊“發(fā)送”一次,就收到一個(gè)“ok”。圖2.4-4程序下載和USB-HID通信驗(yàn)證任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證步驟5:通信測(cè)試。借助USB-HID助手,實(shí)現(xiàn)電腦和開發(fā)板的握手,過程如圖2.4-4中4-7步。(1)在STC-ISP軟件中打開“USB-HID助手”的界面;(2)在設(shè)備欄選擇“STC\USB-ISP”,點(diǎn)擊“打開設(shè)備”。(3)在發(fā)送緩沖書寫“hello”點(diǎn)擊“發(fā)送”。此時(shí),在接收緩沖區(qū)收到“ok”。(4)每點(diǎn)擊“發(fā)送”一次,就收到一個(gè)“ok”。圖2.4-4程序下載和USB-HID通信驗(yàn)證任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證以上步驟操作視頻見二維碼2.4-1。二維碼2.4-1hello程序的下載和驗(yàn)證。2.5數(shù)據(jù)存儲(chǔ)器RAMRAM是隨機(jī)存取存儲(chǔ)器(RandomAccessMemory)的縮寫,斷電之后數(shù)據(jù)丟失,用于存放臨時(shí)性數(shù)據(jù),也就是我們俗稱的“內(nèi)存”。STC單片機(jī)的RAM采用靜態(tài)RAM(StaticRandom-AccessMemory,SRAM)工藝,在通電情況下,SRAM里存儲(chǔ)數(shù)據(jù)可以恒常保持,但是當(dāng)斷電后,SRAM儲(chǔ)存的數(shù)據(jù)會(huì)消失,它最大的特點(diǎn)是速度快,在普通個(gè)人計(jì)算機(jī)里,SRAM是計(jì)算機(jī)的一級(jí)緩存。單片機(jī)型號(hào)不同,RAM存儲(chǔ)容量也不同,如:STC15F2K60S2單片機(jī)RAM存儲(chǔ)容量2KByte,STC8H8K64U單片機(jī)RAM存儲(chǔ)容量8KByte,STC32G12K128單片機(jī)的RAM容量是12KByte。RAM內(nèi)部結(jié)構(gòu)和ROM相同,由存儲(chǔ)單元組成,但是RAM和ROM不一樣的地方在于,CPU訪問ROM的時(shí)候,ROM地址是固定的,由PC寄存器內(nèi)容指示,而訪問RAM的時(shí)候單元地址是隨機(jī)的。2.5.1STC單片機(jī)RAM結(jié)構(gòu)傳統(tǒng)8051單片機(jī)的RAM空間由256個(gè)存儲(chǔ)單元構(gòu)成,稱為內(nèi)部RAM?,F(xiàn)代單片機(jī)擴(kuò)展了內(nèi)部RAM空間,分為兩個(gè)地址空間——內(nèi)部RAM(256字節(jié))和擴(kuò)展RAM。圖2.5-1展示了STC不同單片機(jī)型號(hào)的RAM內(nèi)部空間。傳統(tǒng)8051單片機(jī)的內(nèi)存256個(gè)存儲(chǔ)單元,地址范圍00H~FFH;STC15F2K60S2系列有2K個(gè)RAM存儲(chǔ)單元,地址范圍00H~07FFH;STC8H4K64U的內(nèi)存地址00H~0FFFH,對(duì)應(yīng)4K個(gè)存儲(chǔ)單元;STC8H8K64U的內(nèi)存地址00H~1FFFH,對(duì)應(yīng)8K個(gè)存儲(chǔ)單元。STC32G12K28的內(nèi)存地址00H~2FFFH,對(duì)應(yīng)12K個(gè)存儲(chǔ)單元。2.5.1STC單片機(jī)RAM結(jié)構(gòu)傳統(tǒng)8051單片機(jī)的RAM空間由256個(gè)存儲(chǔ)單元構(gòu)成,稱為內(nèi)部RAM。現(xiàn)代單片機(jī)擴(kuò)展了內(nèi)部RAM空間,分為兩個(gè)地址空間——內(nèi)部RAM(256字節(jié))和擴(kuò)展RAM。圖2.5-1展示了STC不同單片機(jī)型號(hào)的RAM內(nèi)部空間。傳統(tǒng)8051單片機(jī)的內(nèi)存256個(gè)存儲(chǔ)單元,地址范圍00H~FFH;STC15F2K60S2系列有2K個(gè)RAM存儲(chǔ)單元,地址范圍00H~07FFH;STC8H4K64U的內(nèi)存地址00H~0FFFH,對(duì)應(yīng)4K個(gè)存儲(chǔ)單元;STC8H8K64U的內(nèi)存地址00H~1FFFH,對(duì)應(yīng)8K個(gè)存儲(chǔ)單元。STC32G12K28的內(nèi)存地址00H~2FFFH,對(duì)應(yīng)12K個(gè)存儲(chǔ)單元。2.5.1STC單片機(jī)RAM結(jié)構(gòu)圖2.5-1STC系列單片機(jī)RAM內(nèi)部結(jié)構(gòu)2.5.1STC單片機(jī)RAM結(jié)構(gòu)單片機(jī)存儲(chǔ)器類型如表2.5-2所示。當(dāng)常量或變量的存儲(chǔ)器類型省略時(shí),默認(rèn)數(shù)據(jù)是idata存儲(chǔ)類型。存儲(chǔ)器類型說明data可直接尋址的片內(nèi)數(shù)據(jù)存儲(chǔ)器(內(nèi)部RAM低128字節(jié)),訪問速度最快idata單片機(jī)內(nèi)部自帶RAM空間(256字節(jié))bdata可位尋址的片內(nèi)數(shù)據(jù)存儲(chǔ)器(20H~2FH)xdata單片機(jī)擴(kuò)展RAM空間,當(dāng)EXTRAM=0,指示單片機(jī)內(nèi)部擴(kuò)展RAM,當(dāng)EXTRAM=1,指示單片機(jī)外部擴(kuò)展RAMcode程序存儲(chǔ)器ROM表2.5-2STC單片機(jī)存儲(chǔ)器類型2.5.2內(nèi)部RAM(256字節(jié))和SFR內(nèi)部RAM共256字節(jié),分為三個(gè)部分:低128字節(jié)RAM、高128字節(jié)RAM以及特殊功能寄存器區(qū)。高128字節(jié)RAM和SFR區(qū)共用地址如圖2.5-2(a)所示,都使用80H~FFH,地址空間貌似重疊,但物理上是獨(dú)立的,在使用的時(shí)候,SFR區(qū)的數(shù)據(jù)類型是sfr,實(shí)現(xiàn)了獨(dú)立映射。1.低128字節(jié)RAM低128字節(jié)RAM也稱通用RAM區(qū),包含4個(gè)工作組、1個(gè)位尋址區(qū)、及用戶RAM/堆棧區(qū),內(nèi)部結(jié)構(gòu)如圖2.5-2(b)所示。4個(gè)工作組,每組包含8個(gè)8位的工作寄存器,編號(hào)均為R0-R7,通過使用工作寄存器組,可以提高運(yùn)算速度。圖2.5-2傳統(tǒng)8051內(nèi)部RAM組成2.5.2內(nèi)部RAM(256字節(jié))和SFR可位尋址區(qū)20H~2FH如表2.5-2所示,位尋址區(qū)的存儲(chǔ)單元既可以按字節(jié)存取,也可以對(duì)單元中的任何一位單獨(dú)存取。位尋址區(qū)20H~2FH的位數(shù)據(jù)類型是bit。RAM地址位尋址地址B7B6B5B4B3B2B1B02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H21H.70FH21H.60EH21H.50DH21H.40CH21H.30BH21H.20AH21H.109H21H.008H20H20H.707H20H.606H20H.505H20H.404H20H.303H20H.202H20H.101H20H.000H表2.5-2位尋址區(qū)域2.5.2內(nèi)部RAM(256字節(jié))和SFR2.堆棧低128字節(jié)RAM中的30H~7FH以及高128字節(jié)80H~FFH是用戶RAM和堆棧區(qū)。在計(jì)算機(jī)領(lǐng)域中堆棧是一個(gè)連續(xù)的存儲(chǔ)空間,用來存儲(chǔ)計(jì)算機(jī)程序活動(dòng)中需要暫時(shí)保護(hù)的數(shù)據(jù),堆棧區(qū)域一端固定稱為棧底,一端向上生長(zhǎng)稱為棧頂,為了指示棧頂位置,引入特殊功能寄存器堆棧指針SP,它是一個(gè)8位專用寄存器,它指示出堆棧頂部在內(nèi)部RAM塊中的位置,堆棧的規(guī)則是先進(jìn)后出,如圖2.5-3所示。數(shù)據(jù)入棧(PUSH)的過程:SP先在原值的基礎(chǔ)上自動(dòng)加1(SP=SP+1),然后將要入棧的數(shù)據(jù)存放在SP指定的存儲(chǔ)單元中;數(shù)據(jù)出棧(POP)的過程:先將SP指向的棧頂單元的內(nèi)容傳送到POP指令給定的寄存器或內(nèi)部RAM單元中,然后SP自動(dòng)減1(SP=SP-1)。`圖2.5-3堆棧先進(jìn)后出示意圖2.5.2內(nèi)部RAM(256字節(jié))和SFR3.特殊功能寄存器區(qū)單片機(jī)RAM的高128字節(jié)80H~FFH還對(duì)應(yīng)特殊功能寄存器(SpecialFunctionRegisters)區(qū)。寄存器(Register)是一個(gè)專業(yè)術(shù)語(yǔ),寄存器其實(shí)就是存儲(chǔ)單元,是有“別名”的存儲(chǔ)單元。當(dāng)一個(gè)普通存儲(chǔ)單元不僅有單元地址,還有別名(一串由字母、數(shù)字組成的標(biāo)識(shí)符),就被稱為寄存器。別名通常表明寄存器功能。當(dāng)一個(gè)存儲(chǔ)單元被賦予某一特定功能,這個(gè)存儲(chǔ)單元就是寄存器了。單片機(jī)開辟一塊RAM區(qū)用來存儲(chǔ)GPIO、定時(shí)器、串口通信等特殊功能的配置和狀態(tài)信息。通過對(duì)這些寄存器的讀寫操作,程序可以配置和控制單片機(jī)的各種功能。單片機(jī)特殊功能寄存器一般可以分為以下幾類:系統(tǒng)控制寄存器:用于配置整個(gè)單片機(jī)的性能和工作模式,如時(shí)鐘寄存器、中斷使能寄存器、電源寄存器等。端口寄存器:用于控制和配置輸入輸出端口的狀態(tài),如端口工作模式配置寄存器、數(shù)據(jù)狀態(tài)寄存器等。定時(shí)器寄存器:用于配置和控制定時(shí)器模塊的工作,包括定時(shí)器/計(jì)數(shù)器的工作模式、計(jì)數(shù)值、預(yù)分頻等。2.5.2內(nèi)部RAM(256字節(jié))和SFR串口寄存器:用于配置和控制串口通信模塊的工作,包括通信格式、通信速率等參數(shù)的配置。存儲(chǔ)器映射寄存器:用于配置存儲(chǔ)器的工作模式和訪問。這些寄存器通常直接映射到單片機(jī)的硬件模塊,程序通過讀寫這些寄存器的值實(shí)現(xiàn)對(duì)硬件功能的控制和配置。要充分發(fā)揮單片機(jī)功能,要深入理解這些特殊功能寄存器的作用和使用方法。特殊功能寄存器的定義格式如下所示。sfrsfr_name=整型常量;例1:sfrSCON=0x98;//存儲(chǔ)單元地址0x98另起一個(gè)名字叫SCON例2:sfrTMOD=0x89;//存儲(chǔ)單元地址0x89另起一個(gè)名字叫TMODSTC8H8K單片機(jī)特殊功能寄存器列表2.5-3:2.5.2內(nèi)部RAM(256字節(jié))和SFR現(xiàn)代單片機(jī)數(shù)字外設(shè)增多,特殊功能寄存器區(qū)也隨之?dāng)U展。STC8H系列單片機(jī)的擴(kuò)展SFR地址范圍為0FA00H~0FFFFH,與外部擴(kuò)展RAM地址區(qū)域重疊。基地址寄存器名稱地址偏移量(寄存器地址=基地址+地址偏移量)01234567F8HP7
USBADR
RSTCFGF0HB
USBCONIAP_TPS
E8HP6
USBDAT
IP3HAUXINTIFE0HACCP7M1P7M0DPSDPL1DPH1CMPCR1CMPCR2D8H
USBCLK
ADCCFGIP3D0HPSWT4T3MT4HT4LT3HT3LT2HT2LC8HP5P5M1P5M0P6M1P6M0SPSTATSPCTLSPDATC0HP4WDT_CONTRIAP_DATAIAP_ADDRHIAP_ADDRLIAP_CMDIAP_TRIGIAP_CONTRB8HIPSADENP_SW2
ADC_CONTRADC_RESADC_RESL
B0HP3P3M1P3M0P4M1P4M0IP2IP2HIPHA8HIESADDRWKTCLWKTCHS3CONS3BUFTAIE2A0HP2BUS_SPEEDP_SW1
98HSCONSBUFS2CONS2BUF
IRCBANDLIRTRIMIRTRIM90HP1P1M1P1M0P0M1P0M0P2M1P2M0
88HTCONTMODTL0TL1TH0TH1AUXRINTCLKO80HP0SPDPLDPHS4CONS4BUF
PCON表2.5-2STC8H8K單片機(jī)特殊功能寄存器2.5.3內(nèi)部擴(kuò)展RAMSTC系列單片機(jī)內(nèi)部RAM,還集成了擴(kuò)展RAM,圖2.5-4展示了內(nèi)部擴(kuò)展RAM空間,當(dāng)存儲(chǔ)容量8K,內(nèi)部擴(kuò)展RAM空間的地址0100H~1FFFH。圖2.5-4存儲(chǔ)容量=8K的RAM內(nèi)部擴(kuò)展2.5.3內(nèi)部擴(kuò)展RAM單片機(jī)除了表2.5-3的特殊功能寄存器,常用的寄存器還有:PC——程序計(jì)數(shù)器,16位計(jì)數(shù)器,保存CPU下一個(gè)指令的程序存儲(chǔ)器單元地址。PC沒有物理地址,是不可尋址的,因此用戶無法對(duì)它進(jìn)行讀寫。SP——堆棧指針寄存器(StackPointer,,SP),指示當(dāng)前堆棧操作位置,總是指向棧頂。堆棧是單片機(jī)在內(nèi)部RAM區(qū)開辟的一小塊區(qū)域,數(shù)據(jù)可以一個(gè)個(gè)順序地壓入到這個(gè)區(qū)域,這個(gè)過程稱為“壓棧(Push)”,每壓入一個(gè)數(shù)據(jù),SP內(nèi)容就+1,堆棧指針SP始終指向最后一個(gè)壓入堆棧的數(shù)據(jù)所在的數(shù)據(jù)單元(棧頂)。從堆棧中讀取數(shù)據(jù)時(shí),從SP指向的堆棧單元讀取數(shù)據(jù),這個(gè)過程叫做“彈出(Pop)”,每彈出一個(gè)數(shù)據(jù),SP內(nèi)容就-1。堆棧用于保護(hù)斷點(diǎn)和保護(hù)現(xiàn)場(chǎng),采用“后進(jìn)先出”原則。PSW——程序狀態(tài)字(ProgramStatusWord,PSW)是一個(gè)8位寄存器,用于存放程序運(yùn)行中的各種狀態(tài)信息。PSW的各位定義如表2.5-3所示。位地址PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位名稱CYACF0RS1RS0OVF1P表2.5-3PSW位定義2.5.3內(nèi)部擴(kuò)展RAMCY:進(jìn)位標(biāo)志位,加法操作的結(jié)果有進(jìn)位時(shí),CY置1,否則是0;當(dāng)減法操作的結(jié)果有借位就置1,否則等于0。AC:輔助進(jìn)位標(biāo)志位,存放算術(shù)運(yùn)算中低4位向高4位進(jìn)位或借位標(biāo)志。F0:軟件標(biāo)志位,用戶定義的一個(gè)狀態(tài)標(biāo)志,可以通過軟件對(duì)它置位或清零。RS1和RS0:工作寄存器組選擇位。OV:溢出標(biāo)志,運(yùn)算結(jié)果超出范圍時(shí)置位。F1:保留未使用。P:奇偶標(biāo)志位。存放累加器ACC數(shù)據(jù)中“1”的個(gè)數(shù)的奇偶性。2.5.4外部擴(kuò)展RAMSTC系列單片機(jī)具有擴(kuò)展64KB外部數(shù)據(jù)存儲(chǔ)器的能力。圖2.5-5中當(dāng)EXTRAM=1,單片機(jī)訪問外部RAM,外部RAM的地址從0000H到FFFFH,存儲(chǔ)容量64K。外部地址空間和內(nèi)部RAM有部分重疊。內(nèi)部擴(kuò)展RAM、外部RAM都使用xdata存儲(chǔ)類型。圖2.5-5
單片機(jī)RAM外部擴(kuò)展2.5.4外部擴(kuò)展RAMEXTRAM是輔助寄存器AUXR的bit1位。當(dāng)EXTRAM=0,擴(kuò)展RAM指向內(nèi)部;當(dāng)EXTRAM=1,擴(kuò)展RAM指向單片機(jī)片外部。符號(hào)地址B7B6B5B4B3B2B1B0AUXR8EHT0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMSIST22.5.4外部擴(kuò)展RAM訪問外部數(shù)據(jù)存儲(chǔ)器期間,WR/RD/ALE信號(hào)要有效,P0端口的低8位既是數(shù)據(jù)總線又是地址低8位總線,P2端口的高8位是地址總線高8位,如圖2.5-6所示。圖2.5-6外部擴(kuò)展RAM讀寫時(shí)序注意:?jiǎn)纹瑱C(jī)上電復(fù)位EXTRAM默認(rèn)值0,數(shù)據(jù)RAM指向單片機(jī)內(nèi)部。因此,如程序中沒有EXTRAM=1的定義,默認(rèn)xdata數(shù)據(jù)存儲(chǔ)在單片機(jī)內(nèi)部。2.6
常量和變量單片機(jī)程序中處理的數(shù)據(jù)有常量和變量之分,常量在程序執(zhí)行過程中固定不變,變量在程序執(zhí)行過程中,數(shù)值不斷變化。2.6.1
常量C51支持整型常量、浮點(diǎn)型常量、字符型常量和字符串常量。(1)整型常量整型常量有十進(jìn)制整數(shù),如234、-56、0等;還有以0x開頭表示的十六進(jìn)制整數(shù),如0x1234等。整型常量的存儲(chǔ)空間根據(jù)數(shù)值的范圍分配,如234占用1個(gè)字節(jié),是char型數(shù)據(jù),0x1234占用2個(gè)字節(jié),是int型數(shù)據(jù)。(2)浮點(diǎn)型常量浮點(diǎn)型常量是帶小數(shù)點(diǎn)的數(shù)據(jù),有十進(jìn)制表示形式和指數(shù)表示形式(也稱科學(xué)計(jì)數(shù)法)兩種。十進(jìn)制表示形式又稱定點(diǎn)表示形式,由數(shù)字和小數(shù)點(diǎn)組成,如0.123,34.56等。指數(shù)表示形式由小數(shù)和標(biāo)識(shí)符“e”組成,“e”表示10的冪。舉例如下:3.14e2(十進(jìn)制的314.0)12.3e-2(十進(jìn)制的0.123)-3.456e2(十進(jìn)制的-345.6)2.6.1
常量(3)字符型常量字符型常量是用英文單引號(hào)引起的單個(gè)字符,如’a’、’s’等,字符型常量可以是可顯示的ASCII字符,也可以是不可顯示的控制字符,對(duì)不可顯示的控制字符須在前面加上反斜杠“\”組成轉(zhuǎn)義字符,利用轉(zhuǎn)義字符可以完成一些特殊功能和輸出時(shí)的格式控制。常用的轉(zhuǎn)義字符舉例如下:轉(zhuǎn)義字符含義\0空字符(null)\n換行符\r回車符\b退格符\’單引號(hào)\”雙引號(hào)\\反斜杠2.6.1
常量(4)字符串常量字符串常量是用英文雙引號(hào)引起的一串字符,如hello”等。字符串常量由字符常量組成,而且在字符串末尾自動(dòng)增加一個(gè)轉(zhuǎn)義字符‘\0’,表示字符串結(jié)束,因此字符串常量占用字節(jié)數(shù)是字符數(shù)+1,如字符串“hello”的字節(jié)數(shù)是6,由‘h’、‘e’、‘l’、‘l’、‘o’、和‘\0’組成。常量在應(yīng)用中一般使用“#define”宏定義語(yǔ)句,注意宏定義語(yǔ)句后面不能有分號(hào)“;”。#define常量名常量數(shù)值 舉例:#defineCONST60//定義常量CONST是60#difinePI3.1415926//定義常量PI是3.1415926main(){intvariable,result;//定義了兩個(gè)整型變量variable=20;//給變量賦值result=variable*CONST*PI;//給變量賦值}很明顯,用一個(gè)標(biāo)識(shí)符代表一個(gè)常量的好處是,當(dāng)這個(gè)標(biāo)識(shí)符的值需要改動(dòng)的時(shí)候,以CONST為例,只要修改第一行代碼就行了,程序中所有用到CONST的地方則無需再修改。2.6.2變量在程序運(yùn)行中,變量的值可以改變。一個(gè)變量主要由變量名、變量值兩部分組成。變量和常量一樣,必須先定義(申明),后使用,下面的定義格式中方括號(hào)“[]”表明該部分可選。[存儲(chǔ)種類]數(shù)據(jù)類型[存儲(chǔ)器類型]變量名1=[初值],變量名2=[初值],...;存儲(chǔ)種類:指變量在程序執(zhí)行過程中的作用范圍。C51變量的存儲(chǔ)種類大致有3種,列如下表2.6-1所示。存儲(chǔ)種類說明auto(自動(dòng)變量)在定義變量時(shí),未加存儲(chǔ)種類的,均為自動(dòng)變量,屬于動(dòng)態(tài)存儲(chǔ),其作用域僅限于變量所在的函數(shù)內(nèi)有效。當(dāng)函數(shù)調(diào)用結(jié)束,變量分配的存儲(chǔ)單元就釋放了。靜態(tài)(static)在定義變量時(shí),前面有static,表明是靜態(tài)存儲(chǔ),它在定義的時(shí)候就分配了存儲(chǔ)單元,一直保持不變,直到整個(gè)程序結(jié)束。extern外部變量在定義變量時(shí),前面有extern,說明這是一個(gè)已經(jīng)定義過的變量,該變量在函數(shù)體外且在其他文件中定義。表2.6-1C51數(shù)據(jù)存儲(chǔ)種類2.6.2變量數(shù)據(jù)類型:定義數(shù)據(jù)時(shí),必須指明數(shù)據(jù)類型,C51編譯器根據(jù)數(shù)據(jù)類型給變量分配存儲(chǔ)空間,數(shù)據(jù)類型見1.3節(jié)表1.3-1。(1)存儲(chǔ)器類型:指明變量所處的單片機(jī)的存儲(chǔ)器區(qū)域。單片機(jī)存儲(chǔ)器區(qū)域分為RAM存儲(chǔ)器(用data表示)、ROM程序存儲(chǔ)器(用code表示),data又可分為idata(片內(nèi)256字節(jié)的RAM區(qū))、xdata(擴(kuò)展RAM區(qū))、bdata(可位尋址區(qū))等,列表參考2.5節(jié)表2.5-1所示。(2)變量名:定義變量時(shí),必須給變量起個(gè)唯一的名字,變量名稱遵循標(biāo)識(shí)符命名原則,有效字符由字母、數(shù)字和下劃線組成,只能用字母或下劃線開頭,區(qū)分大小寫,C語(yǔ)言的關(guān)鍵字不能用作變量名。2.6.2變量(3)初值:給變量賦予一個(gè)初始值,這個(gè)值不能超過數(shù)據(jù)類型的數(shù)值范圍。初學(xué)者經(jīng)常犯的錯(cuò)誤是:①unsignedchari;//定義了一個(gè)無符號(hào)字符型變量,名字叫“i”,“i”的初值默認(rèn)0.②i=500;第①句話定義一個(gè)無符號(hào)字符型變量“i”,數(shù)值范圍0~255;第②句話給“i”賦值500,超過數(shù)值范圍。500轉(zhuǎn)換成二進(jìn)制是0x01F4,在編譯的過程中,高8位舍棄,所以“i”實(shí)際上是0xF4,也就是244,初值賦值無效。所以給變量賦值不能超過數(shù)據(jù)類型的數(shù)值范圍。(4)允許在數(shù)據(jù)類型說明符后,定義多個(gè)相同類型的變量,變量之間用逗號(hào)分割,語(yǔ)句最終以分號(hào)結(jié)束,如unsignedchara,b,c,d;(5)變量定義必須在變量使用之前,一般放在文件開頭或者函數(shù)體開頭部分。任務(wù)5.單片機(jī)的仿真任務(wù)要求:仿真hello測(cè)試程序,檢查程序執(zhí)行過程。任務(wù)資訊:在應(yīng)用仿真(InApplicationProgramming,IAP)是將程序下載到CPU后,直接在應(yīng)用系統(tǒng)仿真。這個(gè)功能可以幫助我們檢查程序的執(zhí)行過程,尤其是程序執(zhí)行效果和預(yù)期效果不一致時(shí),可以幫助程序員分析錯(cuò)誤原因。在仿真前,先打開STC-ISP軟件,按照?qǐng)D2.6-1所示將單片機(jī)設(shè)置為仿真芯片。(1)單片機(jī)和電腦連接,按住實(shí)驗(yàn)箱上的INT0按鍵,然后按一下ON/OFF電源按鍵,接著松開ON/OFF電源按鍵,最后松開INT0按鍵,識(shí)別出“STCUSBWriter(HID1)”設(shè)備。(2)根據(jù)開發(fā)板上CPU的型號(hào),選擇單片機(jī)型號(hào)。(3)勾選使用USB口進(jìn)行仿真。(4)選擇IRC時(shí)鐘頻率。(5)點(diǎn)擊“將所選目標(biāo)單片機(jī)設(shè)置為仿真芯片。(6)提示欄顯示操作成功。任務(wù)5.單片機(jī)的仿真圖2.6-1設(shè)置開發(fā)板仿真芯片的過程任務(wù)5.單片機(jī)的仿真打開Keil軟件,打開“OptionsforTarget”菜單,選擇“Debug”頁(yè)面,如圖2.6-2所示。(1)設(shè)置為STCMonitor-51Driver。(2)設(shè)置為USB仿真接口。圖2.6-2設(shè)置仿真驅(qū)動(dòng)的過程任務(wù)5.單片機(jī)的仿真在keil里打開hello測(cè)試工程文件,編譯成功后,點(diǎn)擊“debug”按鈕,進(jìn)入到調(diào)試界面。首先將一些要觀察的單片機(jī)特殊功能寄存器或者自定義的變量放到觀察窗,如圖2.6-3,鼠標(biāo)靠近P3M1,然后點(diǎn)擊鼠標(biāo)右鍵,選擇“Add...to...”將P3M1放到watch1。其次,在左邊的Register寄存器欄,會(huì)看到系統(tǒng)寄存器的變化情況,如圖2.6-4所示。1.運(yùn)行程序,觀察變量變化的情況。圖2.6-3增加觀察量的過程圖2.6-4寄存器觀察窗任務(wù)5.單片機(jī)的仿真以上步驟操作視頻見二維碼2.6-1。二維碼2.6-1hello測(cè)試程序的仿真2.7
單片機(jī)最小系統(tǒng)單片機(jī)芯片必須供電才能工作,我們把單片機(jī)、電源、時(shí)鐘、復(fù)位、ISP組合起來的電路稱為單片機(jī)最小系統(tǒng)。2.7.1電源單片機(jī)芯片的VCC管腳要連接正電源,GND管腳要接地。不同型號(hào)單片機(jī)的供電電壓等級(jí)是不一致的,有的是5V供電、有的3.3V供電、還有的是寬電壓供電,兩種電壓等級(jí)都可以。STC15F系列單片機(jī)工作電壓5.5-3.8V;STC15L系列的工作電壓是3.6-3.4V;STC8、STC32系列單片機(jī)都是寬電壓供電,工作電壓在1.9~5.5V之間,5V、3.3V供電都沒有問題。STC單片機(jī)都有電源低功耗管理功能,當(dāng)電源控制寄存器(PCON)的bit1設(shè)置為1后,單片機(jī)將進(jìn)入PowerDown掉電(停機(jī))模式,進(jìn)入該模式后,單片機(jī)時(shí)鐘(內(nèi)部系統(tǒng)時(shí)鐘或外部晶振)停振,由于沒有時(shí)鐘源,CPU、看門狗、定時(shí)器、串行口、AD轉(zhuǎn)換等功能模塊停止工作,只有外部中斷等進(jìn)行工作,此時(shí)要打開掉電喚醒功能。進(jìn)入掉電模式后,所有I/O口、特殊功能寄存器都維持進(jìn)入掉電模式前那一刻的狀態(tài)不變。2.7.2時(shí)鐘電路數(shù)字電路按照節(jié)拍(時(shí)序)工作,單片機(jī)執(zhí)行各種操作必須在這個(gè)節(jié)拍的控制下才能進(jìn)行,因此時(shí)鐘電路是單片機(jī)不可缺少的部件,沒有時(shí)鐘電路,單片機(jī)是不會(huì)工作的,時(shí)鐘電路用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號(hào)。2.7.2時(shí)鐘電路1.時(shí)鐘源(1)外部時(shí)鐘一個(gè)典型的外部時(shí)鐘電路由晶振和電容構(gòu)成,在51單片機(jī)內(nèi)部有一個(gè)高增益的反相放大器,反相放大器的輸入端為XTAL1,輸出端為XTAL2,只要在XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,就可以構(gòu)成一個(gè)穩(wěn)定的自激振蕩電路,如圖2.7-1所示。晶體振蕩器簡(jiǎn)稱晶振,晶振的振蕩頻率越高,單片機(jī)的運(yùn)行速度越快,通常使用12MHz、24MHz、36MHz晶振,如果系統(tǒng)要使用單片機(jī)串行口通信,則采用11.0592MHz或22.1184MHz的晶振,電容通常采用30pF小容量鉭電容。圖2.7-1外部時(shí)鐘晶振電路2.7.2時(shí)鐘電路(2)內(nèi)部時(shí)鐘STC系列單片機(jī)內(nèi)部都集成有一顆高精度內(nèi)部IRC振蕩器,在4~35MHz可設(shè)置,無需外部晶振,大大簡(jiǎn)化了用戶設(shè)計(jì)過程,注意,外部晶振電路的頻率最高可達(dá)36MHz,但是內(nèi)部IRC設(shè)置的時(shí)候,頻率不要超過35MHz。借助STC-ISP助手,在給STC單片機(jī)下載程序時(shí)設(shè)置內(nèi)部晶振頻率,如圖2.7-2所示,和外部晶振電路的配置相似,如果使用串行口,晶振頻率選擇11.0592MHz或它的倍數(shù)22.1184MHz。內(nèi)部高精度時(shí)鐘電路和外部時(shí)鐘電路是二選一的關(guān)系,如果選擇使用內(nèi)部時(shí)鐘電路,那么外部時(shí)鐘管腳P1.6、P1.7不需要連接晶振和電容,可當(dāng)作普通的輸入輸出口使用。2.7.2時(shí)鐘電路圖2.7-2STC-ISP內(nèi)部時(shí)鐘的選擇界面2.7.2時(shí)鐘電路單片機(jī)芯片的VCC管腳要連接正電源,GND管腳要接地。不同型號(hào)單片機(jī)的供電電壓等級(jí)是不一致的,有的是5V供電、有的3.3V供電、還有的是寬電壓供電,兩種電壓等級(jí)都可以。STC15F系列單片機(jī)工作電壓5.5-3.8V;STC15L系列的工作電壓是3.6-3.4V;STC8、STC32系列單片機(jī)都是寬電壓供電,工作電壓在1.9~5.5V之間,5V、3.3V供電都沒有問題。STC單片機(jī)都有電源低功耗管理功能,當(dāng)電源控制寄存器(PCON)的bit1設(shè)置為1后,單片機(jī)將進(jìn)入PowerDown掉電(停機(jī))模式,進(jìn)入該模式后,單片機(jī)時(shí)鐘(內(nèi)部系統(tǒng)時(shí)鐘或外部晶振)停振,由于沒有時(shí)鐘源,CPU、看門狗、定時(shí)器、串行口、AD轉(zhuǎn)換等功能模塊停止工作,只有外部中斷等進(jìn)行工作,此時(shí)要打開掉電喚醒功能。進(jìn)入掉電模式后,所有I/O口、特殊功能寄存器都維持進(jìn)入掉電模式前那一刻的狀態(tài)不變。2.7.3復(fù)位電路2.按鍵手動(dòng)復(fù)位按鍵復(fù)位是在單片機(jī)復(fù)位管腳上直接連接按鍵,通過施加一定寬度的復(fù)位脈沖,從而實(shí)現(xiàn)單片機(jī)的復(fù)位。單片機(jī)的上電復(fù)位電路和按鍵手動(dòng)復(fù)位電路通常設(shè)計(jì)在一起。如圖2.7-3所示,上電復(fù)位由電容、電阻串聯(lián)電路構(gòu)成,手動(dòng)復(fù)位由電阻、按鍵串聯(lián)構(gòu)成。對(duì)于RST(高電平復(fù)位)單片機(jī),電容和按鍵要連接供電電源VCC;對(duì)于NRST(低電平復(fù)位)單片機(jī),電容和按鍵要連接GND。(a)
高電平復(fù)位電路(b)
低電平復(fù)位電路圖2.7-3上電復(fù)位和按鍵手動(dòng)復(fù)位參考電路2.7.3復(fù)位電路3.掉電復(fù)位掉電復(fù)位也稱低壓復(fù)位,一旦單片機(jī)允許低壓復(fù)位,那么在檢測(cè)到供電電源低于低壓檢測(cè)門檻值時(shí),就會(huì)自動(dòng)復(fù)位。4.看門狗復(fù)位在工業(yè)控制/汽車電子/航空航天等需要高可靠性的系統(tǒng)中,為了防止系統(tǒng)在異常情況下受到干擾導(dǎo)致MCU長(zhǎng)時(shí)間異常工作、程序跑飛,通常引進(jìn)看門狗。如果CPU不在規(guī)定時(shí)間內(nèi)訪問看門狗,看門狗就認(rèn)為系統(tǒng)出了問題,會(huì)強(qiáng)制將系統(tǒng)進(jìn)行復(fù)位,使系統(tǒng)從頭開始執(zhí)行程序。提供看門狗功能的單片機(jī)內(nèi)部都有一個(gè)看門狗定時(shí)器,定時(shí)器溢出連接到了單片機(jī)的復(fù)位腳,通過看門狗控制寄存器(WDT_CONTR)開啟或關(guān)閉該定時(shí)器。一旦該定時(shí)器開啟,定時(shí)器的計(jì)數(shù)值一直增加,那么定時(shí)器溢出后就會(huì)復(fù)位單片機(jī),為了不讓看門狗定時(shí)器溢出,應(yīng)該在主程序大循環(huán)中增加“喂狗”語(yǔ)句,所謂“喂狗”其實(shí)就是在看門狗定時(shí)器溢出前就讓它的計(jì)數(shù)值清零,只要主程序正常,看門狗定時(shí)器就不會(huì)溢出,單片機(jī)也就不會(huì)復(fù)位。因此看門狗在工業(yè)領(lǐng)域應(yīng)用廣泛。2.7.4ISP電路在系統(tǒng)編程(InSystemProgramming,ISP)功能大大提升了單片機(jī)開發(fā)效率。早期的單片機(jī)因?yàn)闆]有ISP功能,下載hex文件時(shí)要把單片機(jī)芯片從電路板上取下來,放置在專門用來對(duì)IC芯片進(jìn)行讀寫、燒錄程序的儀器(編程器,Programmer,圖2.7-4)上燒錄。增強(qiáng)型單片機(jī)預(yù)留與PC連接的ISP接口,有UART串行口方式、SPI方式或USB方式等,不同廠家的單片機(jī)ISP接口方式不同,STC系列芯片提供串行口下載方式,STC8x以上型號(hào)還提供USB下載方式。單片機(jī)有ISP功能后,用戶無需從電路板上取下器件,可直接對(duì)空白器件編程,已經(jīng)編程的器件也可以用ISP方式擦除或再編程。圖2.7-4一款編程器外觀2.7.4ISP電路圖2.7-5展示了一種STC單片機(jī)ISP電路的設(shè)計(jì)方法,圖中CH340芯片是一款UART/USART串口協(xié)議與USB協(xié)議自動(dòng)轉(zhuǎn)換芯片。UD1+、UD1-連接電腦USB接口,P31/TXD/D+、P30/RXD/D-連接單片機(jī)P31、P30管腳。針對(duì)STC8x以上型號(hào)的單片機(jī),此電路可在兩種ISP下載方式之間切換。圖2.7-5STC單片機(jī)ISP電路2.7.4ISP電路(1)UART串口方式ISP電路圖2.7-5中R10、R11不焊接,CH340工作,電腦識(shí)別到的是串口器件,實(shí)現(xiàn)串口方式ISP下載。(2)USB方式ISP電路圖2.7-5中R3、R4、U2不焊接,UD1+、UD1-與單片機(jī)的P31/TXD/D+、P30/RXD/D-連接,單片機(jī)識(shí)別到USB-HID器件,實(shí)現(xiàn)USB方式ISP下載。任務(wù)6.繪制最小電路圖本節(jié)講述了單片機(jī)最小系統(tǒng),請(qǐng)你繪制一個(gè)有外部晶振、可按鍵手動(dòng)復(fù)位的單片機(jī)最小電路圖。電路參考圖見二維碼2.7-1,繪制過程見二維碼2.7-2。二維碼2.7-1單片機(jī)最小系統(tǒng)圖
二維碼2.7-2繪制單片機(jī)最小系統(tǒng)2.8.1編譯器計(jì)算機(jī)唯一能識(shí)別的語(yǔ)言就是機(jī)器語(yǔ)言,無論是匯編語(yǔ)言還是C語(yǔ)言都要轉(zhuǎn)換成機(jī)器語(yǔ)言。這種能夠?qū)⒏呒?jí)別語(yǔ)言翻譯為機(jī)器語(yǔ)言的軟件就稱為編譯器?,F(xiàn)代編譯器的主要工作流程有:書寫源代碼、進(jìn)行預(yù)處理、編譯、形成目標(biāo)代碼、鏈接(Linker)、得到可執(zhí)行程序。編譯的過程就是將源語(yǔ)言經(jīng)過詞法分析、語(yǔ)法分析、語(yǔ)義分析以及經(jīng)過一系列優(yōu)化生成匯編代碼。所謂詞法分析就是將輸入的字符串和源程序語(yǔ)言所允許的記號(hào)進(jìn)行對(duì)比,如果有不符合規(guī)范的記號(hào)就產(chǎn)生錯(cuò)誤提示信息。語(yǔ)法分析就是檢查詞法分析后的記號(hào)序列是否和語(yǔ)法規(guī)則一致,如果不一致就識(shí)別出位置并產(chǎn)生錯(cuò)誤提示語(yǔ)句。語(yǔ)義分析就是檢查前兩個(gè)步驟產(chǎn)生的中間表示形式是否符合規(guī)則,最后將中間表示形式的代碼轉(zhuǎn)換成可直接允許的目標(biāo)機(jī)器代碼。2.8.1編譯器編譯器可以分為“本地”編譯器和交叉編譯器兩類,本地編譯器生成的目標(biāo)代碼可直接在本地計(jì)算機(jī)和操作系統(tǒng)下運(yùn)行,而交叉編譯器生成的目標(biāo)代碼則在新的硬件平臺(tái)下運(yùn)行。比如單
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人租車合同:公司版范本
- 上海市購(gòu)房合同(商品房正式購(gòu)買適用)
- 個(gè)人聯(lián)合購(gòu)房合同樣本
- 個(gè)人房產(chǎn)轉(zhuǎn)讓合同
- 2025年品質(zhì)保障協(xié)議保證書
- 個(gè)人股權(quán)轉(zhuǎn)讓合同模板范文
- 三孩子離婚子女撫養(yǎng)合同范本
- KTV采購(gòu)合同管理規(guī)范及范文
- 個(gè)人設(shè)備租賃合同樣本
- 狗咬人賠償協(xié)議書的格式
- 體檢科運(yùn)營(yíng)可行性報(bào)告
- 廣東省廣州市黃埔區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末生物試卷+
- 北京市豐臺(tái)區(qū)市級(jí)名校2024屆數(shù)學(xué)高一第二學(xué)期期末檢測(cè)模擬試題含解析
- 設(shè)立項(xiàng)目管理公司組建方案
- 薪酬戰(zhàn)略與實(shí)踐
- 答案之書(解答之書)-電子版精選答案
- 中國(guó)古代文學(xué)史 馬工程課件(上)01總緒論
- GB/T 22085.1-2008電子束及激光焊接接頭缺欠質(zhì)量分級(jí)指南第1部分:鋼
- 上海中心大廈-介紹 課件
- 非酒精性脂肪性肝病防治指南解讀課件
- 地理微格教學(xué)課件
評(píng)論
0/150
提交評(píng)論