單片機(jī)基礎(chǔ)與實(shí)驗(yàn)_第1頁
單片機(jī)基礎(chǔ)與實(shí)驗(yàn)_第2頁
單片機(jī)基礎(chǔ)與實(shí)驗(yàn)_第3頁
單片機(jī)基礎(chǔ)與實(shí)驗(yàn)_第4頁
單片機(jī)基礎(chǔ)與實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

/單片機(jī)基礎(chǔ)與實(shí)驗(yàn)于榮成等編著同為嵌入式教育2009年2月28日1 第一講keil軟件熟悉(4課時) 111.1 Keil安裝 111.2 KeilC的工程創(chuàng)建與配置 151.3 KeilC的單步調(diào)試與軟件仿真 251.4 KeilC變量與中間文件分析 261.5 啟動代碼 261.6 KeilC的結(jié)果文件 262 第二講單片機(jī)程序空間和開發(fā)板邏輯分析(8課時) 272.1 單片機(jī)程序空間 272.1.1 RAM在單片機(jī)的空間分配 282.1.2 SFR在單片機(jī)的空間分配 282.1.3 ROM在單片機(jī)的空間分配 282.2 XBYTE 282.3 片選 292.4 跑馬燈程序 292.5 作業(yè) 293 第三講定時器和中斷(4課時) 304 第四講串口程序(4課時) 394.1 作業(yè) 394.2 硬件原理 394.2.1 TTL電平 394.2.2 RS232電平 394.3 串行通訊的方式 394.3.1 異步通訊 394.3.2 同步通訊 394.3.3 通訊方向 394.4 8051單片機(jī)的串行接口結(jié)構(gòu) 394.5 串行口控制寄存器SCON 404.6 串行口的工作方式 414.6.1 方式0 414.6.2 方式1 414.6.3 方式2 414.6.4 方式3 424.7 波特率設(shè)置 424.7.1 波特率設(shè)置 424.8 串口中斷設(shè)置 434.9 程序代碼 435 第七講IIC總線與實(shí)時時鐘(8課時) 445.1 作業(yè) 445.2 IIC原理 445.2.1 原理 455.2.2 總線基本操作 465.3 DS1307實(shí)時時鐘 465.3.1 DS1307的工作時序 465.3.2 程序代碼 476 第五超級終端(8課時) 516.1 作業(yè) 516.2 超級終端原理 516.2.1 超級終端的作用 516.2.2 超級終端的使用 516.3 關(guān)鍵程序代碼 527 第六講任務(wù)調(diào)度與前后臺系統(tǒng)(8課時) 617.1 任務(wù)調(diào)度與前后臺系統(tǒng) 617.1.1 問題引入(假設(shè)有如下項(xiàng)目) 617.2 低級處理方式: 617.3 高級處理方式 617.3.1 任務(wù)調(diào)度表 617.3.2 處理方式 628 第八講單總線與DS18B20(8課時) 648.1 硬件結(jié)構(gòu) 648.2 1-wire命令序列 648.3 ROM搜索原理 658.4 程序?qū)崿F(xiàn) 669 第九講A/D轉(zhuǎn)換(4課時) 709.1 作業(yè) 709.2 A/D轉(zhuǎn)換原理 709.2.1 ADC0831介紹 709.2.2 逐次逼近式A/D轉(zhuǎn)換器原理 709.3 時序 719.3.1 程序代碼 7210 第十講紅外線(8課時) 7410.1 作業(yè) 7410.2 紅外遙控系統(tǒng) 7410.3 HS9012時序 7910.4 遙控信號接收 7910.5 程序代碼 7911 第十一講液晶顯示模塊SMC1602(8課時) 8211.1 作業(yè) 8211.2 SMC1602顯示原理 8211.3 硬件說明 8411.3.1 狀態(tài)字說明 8811.3.2 RAM位置映射圖 8811.3.3 初始化設(shè)置命令 8911.3.4 數(shù)據(jù)與控制命令 8911.4 LCD初始化過程(復(fù)位過程)時序。 9011.5 SMC1602時序 8711.5.1 讀操作時序 8711.5.2 寫操作時序 8711.5.3 操作時序 8811.6 程序代碼 9012 第十二講重入函數(shù)與堆棧(4課時) 947第二章 單片機(jī)的硬件結(jié)構(gòu)和原理概述什么是單片機(jī)及單片機(jī)的特點(diǎn)單片機(jī)是指在一塊芯片上集成了CPU,ROM,RAM,定時器/計時器和多種I/O接口電路等,具有一定規(guī)模的微型計算機(jī)。單片機(jī)與通用微型計算機(jī)相比,在硬件結(jié)構(gòu),指令設(shè)置上均有獨(dú)到之處。單片機(jī)以其卓越的性能,得到了廣泛的應(yīng)用,已深入到各個領(lǐng)域。單片機(jī)應(yīng)用在檢測,控制,儀器儀表等各個領(lǐng)域中,其主要特點(diǎn)如下:小巧靈活,成本低,易于產(chǎn)品化,能夠組裝成各種智能式測控設(shè)備及智能儀器儀表??煽啃院?,應(yīng)用范圍廣。單片機(jī)芯片本身是按工業(yè)控制測控環(huán)境要求設(shè)計的,抗干擾性強(qiáng),能夠適應(yīng)各種惡劣的環(huán)境,這是其它機(jī)種無法比擬的。功能齊全,擴(kuò)展性強(qiáng),很容易構(gòu)成各種規(guī)模的應(yīng)用系統(tǒng),控制功能強(qiáng)。單片機(jī)內(nèi)部有掩模ROM,內(nèi)部E2PROM和外接ROM等形式,并可以很方便的擴(kuò)展外部的ROM,RAM及I/O接口,與許多通用的微機(jī)接口芯片兼容,給應(yīng)用系統(tǒng)的設(shè)計和生產(chǎn)帶來了極大的方便。具有通信功能,可以很方便的實(shí)現(xiàn)多機(jī)和分布式控制,形成控制網(wǎng)絡(luò)和遠(yuǎn)程控制。單片機(jī)的功能是通用的,單片機(jī)主要作控制器使用,但功能上是通用的,可以像一般微處理器那樣廣泛的應(yīng)用在各個領(lǐng)域。單片機(jī)發(fā)展簡史1.1單片機(jī)簡介單片機(jī)是一種集成電路芯片。它采用超大規(guī)模技術(shù)將具有數(shù)據(jù)處理能力的微處理器(CPU)、存儲器(含程序存儲器ROM和數(shù)據(jù)存儲器RAM)、輸入、輸出接口電路(I/O接口)集成在同一塊芯片上,構(gòu)成一個即小巧又很完善的計算機(jī)硬件系統(tǒng),在單片機(jī)程序的控制下能準(zhǔn)確、迅速、高效地完成程序設(shè)計者事先規(guī)定的任務(wù)。所以說,一片單片機(jī)芯片就具有了組成計算機(jī)的全部功能。由此來看,單片機(jī)有著一般微處理器(CPU)芯片所不具備的功能,它可單獨(dú)地完成現(xiàn)代工業(yè)控制所要求的智能化控制功能,這是單片機(jī)最大的特征。然而單片機(jī)又不同于單板機(jī)(一種將微處理器芯片、存儲器芯片、輸入輸出接口芯片安裝在同一塊印制電路板上的微型計算機(jī)),單片機(jī)芯片在沒有開發(fā)前,它只是具備功能極強(qiáng)的超大規(guī)模集成電路,如果對它進(jìn)行應(yīng)用開發(fā),它便是一個小型的微型計算機(jī)控制系統(tǒng),但它與單板機(jī)或個人電腦(PC機(jī))有著本質(zhì)的區(qū)別。單片機(jī)的應(yīng)用屬于芯片級應(yīng)用,需要用戶(單片機(jī)學(xué)習(xí)者與使用者)了解單片機(jī)芯片的結(jié)構(gòu)和指令系統(tǒng)以及其它集成電路應(yīng)用技術(shù)和系統(tǒng)設(shè)計所需要的理論和技術(shù),用這樣特定的芯片設(shè)計應(yīng)用程序,從而使該芯片具備特定的功能。不同的單片機(jī)有著不同的硬件特征和軟件特征,即它們的技術(shù)特征均不盡相同,硬件特征取決于單片機(jī)芯片的內(nèi)部結(jié)構(gòu),用戶要使用某種單片機(jī),必須了解該型產(chǎn)品是否滿足需要的功能和應(yīng)用系統(tǒng)所要求的特性指標(biāo)。這里的技術(shù)特征包括功能特性、控制特性和電氣特性等等,這些信息需要從生產(chǎn)廠商的技術(shù)手冊中得到。軟件特征是指指令系統(tǒng)特性和開發(fā)支持環(huán)境,指令特性即我們熟悉的單片機(jī)的尋址方式,數(shù)據(jù)處理和邏輯處理方式,輸入輸出特性及對電源的要求等等。開發(fā)支持的環(huán)境包括指令的兼容及可移植性,支持軟件(包含可支持開發(fā)應(yīng)用程序的軟件資源)及硬件資源。要利用某型號單片機(jī)開發(fā)自己的應(yīng)用系統(tǒng),掌握其結(jié)構(gòu)特征和技術(shù)特征是必須的。單片機(jī)控制系統(tǒng)能夠取代以前利用復(fù)雜電子線路或數(shù)字電路構(gòu)成的控制系統(tǒng),可以以軟件控制來實(shí)現(xiàn),并能夠?qū)崿F(xiàn)智能化,現(xiàn)在單片機(jī)控制范疇無所不在,例如通信產(chǎn)品、家用電器、智能儀器儀表、過程控制和專用控制裝置等等,單片機(jī)的應(yīng)用領(lǐng)域越來越廣泛。誠然,單片機(jī)的應(yīng)用意義遠(yuǎn)不限于它的應(yīng)用范疇或由此帶來的經(jīng)濟(jì)效益,更重要的是它已從根本上改變了傳統(tǒng)的控制方法和設(shè)計思想。是控制技術(shù)的一次革命,是一座重要的里程碑。1.2單片機(jī)發(fā)展概述1946年第一臺電子計算機(jī)誕生至今,依靠微電子技術(shù)和半導(dǎo)體技術(shù)的進(jìn)步,從電子管——晶體管——集成電路——大規(guī)模集成電路,使得計算機(jī)體積更小,功能更強(qiáng)。特別是近20年時間里,計算機(jī)技術(shù)獲得飛速的發(fā)展,計算機(jī)在工農(nóng)業(yè),科研,教育,國防和航空航天領(lǐng)域獲得了廣泛的應(yīng)用,計算機(jī)技術(shù)已經(jīng)是一個國家現(xiàn)代科技水平的重要標(biāo)志。單片機(jī)誕生于20世紀(jì)70年代,象Fairchild公司研制的F8單片微型計算機(jī)。所謂單片機(jī)是利用大規(guī)模集成電路技術(shù)把中央處理單元(CenterProcessingUnit,也即常稱的CPU)和數(shù)據(jù)存儲器(RAM)、程序存儲器(ROM)及其他I/O通信口集成在一塊芯片上,構(gòu)成一個最小的計算機(jī)系統(tǒng),而現(xiàn)代的單片機(jī)則加上了中斷單元,定時單元及A/D轉(zhuǎn)換等更復(fù)雜、更完善的電路,使得單片機(jī)的功能越來越強(qiáng)大,應(yīng)用更廣泛。20世紀(jì)70年代,微電子技術(shù)正處于發(fā)展階段,集成電路屬于中規(guī)模發(fā)展時期,各種新材料新工藝尚未成熟,單片機(jī)仍處在初級的發(fā)展階段,元件集成規(guī)模還比較小,功能比較簡單,一般均把CPU、RAM有的還包括了一些簡單的I/O口集成到芯片上,象Fairchild公司就屬于這一類型,它還需配上外圍的其他處理電路方才構(gòu)成完整的計算系統(tǒng)。類似的單片機(jī)還有Zilog公司的Z80微處理器。1976年INTEL公司推出了MCS-48單片機(jī),這個時期的單片機(jī)才是真正的8位單片微型計算機(jī),并推向市場。它以體積小,功能全,價格低贏得了廣泛的應(yīng)用,為單片機(jī)的發(fā)展奠定了基礎(chǔ),成為單片機(jī)發(fā)展史上重要的里程碑。在MCS-48的帶領(lǐng)下,其后,各大半導(dǎo)體公司相繼研制和發(fā)展了自己的單片機(jī),象Zilog公司的Z8系列。到了80年代初,單片機(jī)已發(fā)展到了高性能階段,象INTEL公司的MCS-51系列,Motorola公司的6801和6802系列,Rokwell公司的6501及6502系列等等,此外,日本的著名電氣公司NEC和HITACHI都相繼開發(fā)了具有自己特色的專用單片機(jī)。80年代,世界各大公司均競相研制出品種多功能強(qiáng)的單片機(jī),約有幾十個系列,300多個品種,此時的單片機(jī)均屬于真正的單片化,大多集成了CPU、RAM、ROM、數(shù)目繁多的I/O接口、多種中斷系統(tǒng),甚至還有一些帶A/D轉(zhuǎn)換器的單片機(jī),功能越來越強(qiáng)大,RAM和ROM的容量也越來越大,尋址空間甚至可達(dá)64kB,可以說,單片機(jī)發(fā)展到了一個新的平臺.單片機(jī)誕生于20世紀(jì)70年代末,經(jīng)歷了SCM、MCU、SoC三大階段。

1.SCM即單片微型計算機(jī)(SingleChipMicrocomputer)階段,主要是尋求最佳的單片形態(tài)嵌入式系統(tǒng)的最佳體系結(jié)構(gòu)。“創(chuàng)新模式”獲得成功,奠定了SCM與通用計算機(jī)完全不同的發(fā)展道路。在開創(chuàng)嵌入式系統(tǒng)獨(dú)立發(fā)展道路上,Intel公司功不可沒。

2.MCU即微控制器(MicroControllerUnit)階段,主要的技術(shù)發(fā)展方向是:不斷擴(kuò)展?jié)M足嵌入式應(yīng)用時,對象系統(tǒng)要求的各種外圍電路與接口電路,突顯其對象的智能化控制能力。它所涉及的領(lǐng)域都與對象系統(tǒng)相關(guān),因此,發(fā)展MCU的重任不可避免地落在電氣、電子技術(shù)廠家。從這一角度來看,Intel逐漸淡出MCU的發(fā)展也有其客觀因素。在發(fā)展MCU方面,最著名的廠家當(dāng)數(shù)Philips公司。

Philips公司以其在嵌入式應(yīng)用方面的巨大優(yōu)勢,將MCS-51從單片微型計算機(jī)迅速發(fā)展到微控制器。因此,當(dāng)我們回顧嵌入式系統(tǒng)發(fā)展道路時,不要忘記Intel和Philips的歷史功績。

3.單片機(jī)是嵌入式系統(tǒng)的獨(dú)立發(fā)展之路,向MCU階段發(fā)展的重要因素,就是尋求應(yīng)用系統(tǒng)在芯片上的最大化解決;因此,專用單片機(jī)的發(fā)展自然形成了SoC化趨勢。隨著微電子技術(shù)、IC設(shè)計、EDA工具的發(fā)展,基于SoC的單片機(jī)應(yīng)用系統(tǒng)設(shè)計會有較大的發(fā)展。因此,對單片機(jī)的理解可以從單片微型計算機(jī)、單片微控制器延伸到單片應(yīng)用系統(tǒng)單片機(jī)作為微型計算機(jī)的一個重要分支,應(yīng)用面很廣,發(fā)展很快。自單片機(jī)誕生至今,已發(fā)展為上百種系列的近千個機(jī)種。如果將8位單片機(jī)的推出作為起點(diǎn),那么單片機(jī)的發(fā)展歷史大致可分為以下幾個階段:(1)第一階段(1976-1978):單片機(jī)的控索階段。以Intel公司的MCS-48為代表。MCS–48的推出是在工控領(lǐng)域的控索,參與這一控索的公司還有Motorola、Zilog等,都取得了滿意的效果。這就是SCM的誕生年代,“單機(jī)片”一詞即由此而來。(2)第二階段(1978-1982):單片機(jī)的完善階段。Intel公司在MCS-48的基礎(chǔ)上推出了完善的,典型的單片機(jī)系列MCS–51。它在以下幾個方面奠定了典型的通用總線型單片機(jī)體系結(jié)構(gòu)。①完善的外部總線。MCS-51設(shè)置了經(jīng)典的8位單片機(jī)的總線結(jié)構(gòu),包括8位數(shù)據(jù)總線、16位位置總線、控制總線及具有很多機(jī)通信功能的串行通信接口。②CPU外圍功能單元的集中管理模式。③體現(xiàn)工控特性的位位置空間及位操作方式。④指令系統(tǒng)趨于豐富和完善,并且增加了許多突出控制功能的指令。(3)第三階段(1982-1990):8位單片機(jī)的鞏固發(fā)展及16位單片機(jī)的推出階段,也是單片機(jī)向微控制器發(fā)展的階段。Intel公司推出的MCS–96系列單片機(jī),將一些用于測控系統(tǒng)的模數(shù)轉(zhuǎn)換器、程序運(yùn)行監(jiān)視器、脈寬調(diào)制器等納入片中,體現(xiàn)了單片機(jī)的微控制器特征。隨著MCS–51系列的廣應(yīng)用,許多電氣廠商競相使用80C51為內(nèi)核,將許多測控系統(tǒng)中使用的電路技術(shù)、接口技術(shù)、多通道A/D轉(zhuǎn)換部件、可靠性技術(shù)等應(yīng)用到單片機(jī)中,增強(qiáng)了外圍電路路功能,強(qiáng)化了智能控制的特征。(4)第四階段(1990-):微控制器的全面發(fā)展階段。隨著單片機(jī)在各個領(lǐng)域全面深入地發(fā)展和應(yīng)用,出現(xiàn)了高速、大尋址范圍、強(qiáng)運(yùn)算能力的8位/16位/32位通用型單片機(jī),以及小型廉價的專用型單片機(jī)。單片機(jī)發(fā)展趨勢目前,單片機(jī)正朝著高性能和多品種方向發(fā)展趨勢將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內(nèi)裝化等幾個方面發(fā)展。下面是單片機(jī)的主要發(fā)展趨勢。(1)CMOS技術(shù)。近年,由于CHMOS技術(shù)的進(jìn)步,大大地促進(jìn)了單片機(jī)芯片采用CMOS技術(shù)進(jìn)行設(shè)計和生產(chǎn)。CMOS芯片除了低功耗特性之外,還具有功耗的可控性,使單片機(jī)可以工作在功耗精細(xì)管理狀態(tài)。因?yàn)閱纹瑱C(jī)芯片多數(shù)是采用CMOS(金屬柵氧化物)半導(dǎo)體工藝生產(chǎn)。CMOS電路的特點(diǎn)是低功耗、高密度、低速度、低價格。采用雙極型半導(dǎo)體工藝的TTL電路速度快,但功耗和芯片面積較大。隨著技術(shù)和工藝水平的提高,又出現(xiàn)了HMOS(高密度、高速度MOS)和CHMOS工藝。CHMOS和HMOS工藝的結(jié)合。目前生產(chǎn)的CHMOS電路已達(dá)到LSTTL的速度,傳輸延遲時間小于2ns,它的綜合優(yōu)勢已優(yōu)于TTL電路。因而,在單片機(jī)領(lǐng)域CMOS正在逐漸取代TTL電路。(2)低功耗。單片機(jī)的功耗已下降許多,靜態(tài)電流甚至降到1uA以下;使用電壓在3~6V之間,完全能夠適應(yīng)于電池工作。低功耗化的效應(yīng)不僅是功耗低,而且?guī)砹水a(chǎn)品的高可靠性、高抗干擾能力以及產(chǎn)品的便攜化。(3)低電壓。幾乎所有的單片機(jī)都有WAIT、STOP等省電運(yùn)行方式。允許使用的電壓范圍越來越寬,一般在3~6V范圍內(nèi)工作。低電壓供電的單片機(jī)電源下限已可達(dá)1~2V。目前0.8V供電的單片機(jī)已經(jīng)問世。(4)低噪聲與高可靠性。為提高單片機(jī)的抗電磁干擾能力,使產(chǎn)品能適應(yīng)惡劣的工作環(huán)境,滿足電磁兼容性方面更高標(biāo)準(zhǔn)的要求,各單片廠家在單片機(jī)內(nèi)部電路中都采用了新的技術(shù)措施。(5)大容量。以往單片機(jī)內(nèi)的ROM為1KB~4KB,RAM為64~128B。但在需要復(fù)雜控制的場合,該存儲容量是不夠的,必須進(jìn)行外接擴(kuò)充。為了適應(yīng)這種領(lǐng)域的要求,須運(yùn)用新的工藝,使片內(nèi)存儲器大容量化。目前,單片機(jī)內(nèi)ROM最大可達(dá)64KB,RAM最大為2KB。(6)高性能。主要是指進(jìn)一步改變CPU的性能,加快指令運(yùn)算的速度和提高系統(tǒng)控制的可靠性。采用精簡指令集(RISC)結(jié)構(gòu)和流水線技術(shù),可以大幅度提高運(yùn)行速度?,F(xiàn)指令速度最高者已達(dá)100MIPS(MillionInstructionPerSeconds,即兆指令每秒),并加強(qiáng)了位處理、中斷和定時控制功能。這類單片機(jī)的運(yùn)算速度比標(biāo)準(zhǔn)的單片機(jī)高出10倍以上。由于這類單片機(jī)有極高的指令速度,可以使用軟件模擬其I/O功能,由此引入了虛擬外設(shè)的新概念。(7)小容量、低價格。與上述相反,以4位、8位機(jī)為中心的小容量、低價格化也是發(fā)展動向之一。這類單片機(jī)的用途是把以往用數(shù)字邏輯集成電路組成的控制電路單片化,可廣泛用于家電產(chǎn)品。(8)外圍電路內(nèi)裝。這也是單片機(jī)發(fā)展的主要方向。隨著集成度的不斷提高,有可能把眾多的各種處圍功能器件集成在片內(nèi)。除了一般必須具有的CPU、ROM、RAM、定時器/計數(shù)器等以外,片內(nèi)集成的部件還有模/數(shù)轉(zhuǎn)換器、DMA控制器、聲音發(fā)生器、監(jiān)視定時器、液晶顯示驅(qū)動器、彩色電視機(jī)和錄像機(jī)用的鎖相電路等。(9)串行擴(kuò)展技術(shù)。在很長一段時間里,通用型單片機(jī)通過三總線結(jié)構(gòu)擴(kuò)展外圍器件成為單片機(jī)應(yīng)用的主流結(jié)構(gòu)。隨著低價位OTP(OneTimeProgramble)及各種特殊類型片內(nèi)程序存儲器的發(fā)展,加之處圍接口不斷進(jìn)入片內(nèi),推動了單片機(jī)“單片”應(yīng)用結(jié)構(gòu)的發(fā)展。特別是I2C、SPI等串行總線的引入,可以使單片機(jī)的引腳設(shè)計得更少,單片機(jī)系統(tǒng)結(jié)構(gòu)更加簡化及規(guī)范化。隨著半導(dǎo)體集成工藝的不斷發(fā)展,單片機(jī)的集成度將更高、體積將更小、功能將更強(qiáng)。在單片機(jī)家族中,80C51系列是其中的佼佼者,加之Intel公司將其MCS–51系列中的80C51內(nèi)核使用權(quán)以專利互換或出售形式轉(zhuǎn)讓給全世界許多著名IC設(shè)計廠商,如Philips、NEC、Atmel、AMD、華邦等,這些公司都在保持與80C51單片機(jī)兼容的基礎(chǔ)上改善了80C51的許多特性。這樣,80C51就變成有眾多制造廠商支持的、發(fā)展出上百品種的大家族,現(xiàn)統(tǒng)稱為80C51系列。80C51單片機(jī)已成為單片機(jī)發(fā)展的主流。專家認(rèn)為,雖然世界上的MCU品種繁多,功能各異,開發(fā)裝置也互不兼容,但是客觀發(fā)展表明,80C51可能最終形成事實(shí)上的標(biāo)準(zhǔn)MCU芯片.MCS-51單片機(jī)硬件結(jié)構(gòu)MCS-51系列單片機(jī)的分類中央處理器CPU存儲器的結(jié)構(gòu)并行輸入/輸出接口單片機(jī)的引腳及其功能單片機(jī)工作的基本時序第一講keil軟件熟悉(4課時)Keil安裝安裝完全版的V7.50版本KeilC軟件。打開軟件所在的文件夾——>打開《安裝說明》文件——>仔細(xì)看安裝說明;進(jìn)入setup文件夾點(diǎn)擊setup.exe文件開始安裝——>出現(xiàn)以下安裝界面——>點(diǎn)擊NEXT——>選擇FullVersion——>一路點(diǎn)擊NEXT出現(xiàn)以下安裝界面,選擇keil將要安裝在哪個盤,一般默認(rèn)就可以了——>將序列號填入,然后按以下填寫就可以了——>將選項(xiàng)的勾去掉,點(diǎn)擊NEXT——>然后一路點(diǎn)擊NEXT,就可以了!OK軟安裝完成了,祝大家學(xué)習(xí)愉快!有任何問題請聯(lián)絡(luò)我:laoyu1015@163aaaKeilC的工程創(chuàng)建與配置點(diǎn)擊桌面上的KeiluVision2圖標(biāo),進(jìn)入Keil軟件編輯界面——>點(diǎn)擊Projiect——>點(diǎn)擊新建工程——>你要將工程放在哪個文件夾內(nèi)——>建議每個工程都單獨(dú)建立一個文件夾,以避免不必要的麻煩。選擇你開發(fā)板上的CPU芯片——>我這里選擇的是ATEML的AT89S52——>然后出現(xiàn)以下界面,一般點(diǎn)擊是就可以了,給你添加了一個啟動代碼——>工程建立完成了,我們下面就開始往工程內(nèi)添加文件呢。好玩吧!點(diǎn)擊File——>點(diǎn)擊New——>新建一個文件點(diǎn)擊編輯文件,如下:點(diǎn)擊File——>點(diǎn)擊SAVE——>保存一個文件。文件名任意,但后綴為“.c”的文件。然后保存。右鍵點(diǎn)擊SourceGroup1——>選擇AddFilestoGroup‘SourceGroup1’。將剛才新建的c文件添加到工程內(nèi)。點(diǎn)擊Add,這時左邊的工程就添加了main.c文件了。這時點(diǎn)擊Close關(guān)閉對話框。雙擊main.c,然后進(jìn)行編輯。點(diǎn)擊工具欄的Rebuildalltargetfiles編譯工程?;蛘唿c(diǎn)擊Projec——>Rebuildalltargetfiles編譯工程。根據(jù)編譯鏈接的信息來修改程序,確保沒有什么錯誤。如果沒有什么錯誤,就會出現(xiàn)以下界面。表示工程已經(jīng)編譯、鏈接完成。這個時候還有一個問題沒有解決,即我要燒錄到單片機(jī)的程序還沒有生成呢?到底是什么程序呢,怎么生成呢?請見下面的KeilC的工程的配置部分。KeilC的工程配置在工程圖標(biāo)上點(diǎn)擊右鍵——>點(diǎn)擊OptionsforTarget‘Target1’進(jìn)入工程配置?;蛘唿c(diǎn)擊Project——>點(diǎn)擊OptionsforTarget‘Target1’進(jìn)入工程配置。界面如下:芯片選擇、晶振頻率選擇、RAM范圍、ROM范圍、out文件選定、define的定義、debug選項(xiàng)的配置。KeilC的單步調(diào)試與軟件仿真單步仿真、斷點(diǎn)設(shè)置、memory窗口、serial窗口、工程窗口、變量窗口、I/O口的軟件仿真及單步調(diào)試、反匯編窗口。Disassembly窗口:14:while(1)15:{16:P0=0x00;C:0x0009E4CLRAC:0x000AF580MOVP0(0x80),A17:DBYTE[0x80]=0xaa;C:0x000C7880MOVR0,#P0(0x80)C:0x000E76AAMOV@R0,#0xAA18:DBYTE[0x73]=DBYTE[0x80];C:0x0010E6MOVA,@R0C:0x00117873MOVR0,#0x73C:0x0013F6MOV@R0,A19:delay();C:0x0014120027LCALLdelay(C:0027)20:P0=0xff; 分析:14~20 ——是c語言程序。C:0x0009 ——是code位置E4 ——HEX文件的十六進(jìn)制代碼CLRA ——匯編程序KeilC變量與中間文件分析List文件、M51文件、HEX文件分析啟動代碼(保留)KeilC的結(jié)果文件HEX文件分析編程規(guī)范同為編程規(guī)范(保留)作業(yè)在keil軟件仿真條件下,循環(huán)操作P1口的8個引腳。利用開發(fā)板操作LED,熟悉I/O的操作。其它第二講單片機(jī)程序空間和開發(fā)板邏輯分析(8課時)單片機(jī)程序空間RAM在單片機(jī)的空間分配SFR80H-FFH為SFR的位置空間是沒問題,如果在52里,SFR的空間跟RAM是兩個不同的存儲空間,RAM是間接尋址,而SFR是直接尋址的。IDATA的位置空間為80H~FFH,即128字節(jié)之后的RAM空間。R0~R70~31(00H~1FH)共32個字節(jié)是4個通用工作寄存器,4組R0~R7。在發(fā)生中斷嵌套時候可以實(shí)現(xiàn)現(xiàn)場保護(hù)措施。R0~R7在中斷函數(shù)程序中使用了。在進(jìn)入中斷程序時候也需要壓棧。堆棧:51內(nèi)部RAM(DATA空間)可以設(shè)置堆棧,但它的位置是不固定的。通過SP(棧指針)來確定棧底位置,往上升。最多128字節(jié),不能夠超出data空間。子程序調(diào)用時將PC(程序指針,2個字節(jié))壓棧,完成后又出棧。中斷函數(shù)需要壓棧的寄存器更多??梢酝ㄟ^RAM_SFR_ROMdemo程序來分析。DPTR:數(shù)據(jù)指針,16位;高位DPH,低位DPL,主要用來保持16位位置,可以對64KBYTE空間尋址。SFR在單片機(jī)的空間分配可以通過以下實(shí)驗(yàn)來區(qū)分空間的差別:While(1){P0=0x00;DBYTE[0x80]=0xaa;DBYTE[0x73]=DBYTE[0x80];delay();P0=0xff;DBYTE[0x80]=0xbb;DBYTE[0x73]=DBYTE[0x80];delay();}ROM在單片機(jī)的空間分配/EA=0選用外部ROM空間/EA=1外部ROM空間XBYTE#defineXBYTE((char*)0x20000L)數(shù)組、指針數(shù)組、2為xdata、0000為數(shù)組指針的起始位置、L為長整型。#defineCBYTE((unsignedchar*)0x50000L)

#defineDBYTE((unsignedchar*)0x40000L)

#definePBYTE((unsignedchar*)0x30000L)

#defineXBYTE((unsignedchar*)0x20000L)見《指針不完全手冊》片選程序空間、位置線數(shù)量、62256位置、片選位置、片選位置的確定跑馬燈程序跑馬燈程序設(shè)計作業(yè)數(shù)碼管原理、程序設(shè)計原理繼電器操作、蜂鳴器操作計數(shù)500秒表設(shè)計第三講定時器作業(yè)非中斷方式下流水燈非中斷方式下數(shù)碼管 顯示1、2、3、4、5、6非中斷方式下500計數(shù)非中斷模式下的秒表程序顯示秒表分、秒、1/100秒秒表的停、開始、清零動作定時器/計數(shù)器的結(jié)構(gòu)及工作原理圖3.1定時器/計數(shù)器結(jié)構(gòu)框圖加法計數(shù)器是計滿溢出時才申請中斷,所以在給計數(shù)器賦初值時,不能直接輸入所需的計數(shù)值,而應(yīng)輸入的是計數(shù)器計數(shù)的最大值與這一計數(shù)值的差值,設(shè)最大值為M,計數(shù)值為N,初值為X,則X的計算方法如下:計數(shù)狀態(tài):X=M-N定時狀態(tài):X=M-定時時間/T而T=12÷晶振頻率方式和控制寄存器定時器/計數(shù)器的方式寄存器TMOD圖6.2TMOD各位定義工作方式定時器/計數(shù)器應(yīng)用舉例MCS-51單片機(jī)的中斷(4課時)作業(yè)中斷方式下流水燈中斷方式下數(shù)碼管顯示1、2、3、4、5、6中斷方式下的秒表程序顯示秒表分、秒、1/100秒秒表的停、開始、清零動作中斷的概述中斷中斷是指計算機(jī)在執(zhí)行某一程序的過程中,由于計算機(jī)系統(tǒng)內(nèi)、外的某種原因,而必須中止原程序的執(zhí)行,轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序,待處理結(jié)束之后,再回來繼續(xù)執(zhí)行被中止的原程序的過程。采用了中斷技術(shù)后的計算機(jī),可以解決CPU與外設(shè)之間速度匹配的問題,使計算機(jī)可以及時處理系統(tǒng)中許多隨機(jī)的參數(shù)和信息,同時,它也提高了計算機(jī)處理故障與應(yīng)變的能力。中斷源中斷源是指在計算機(jī)系統(tǒng)中向CPU發(fā)出中斷請求的來源,中斷可以人為設(shè)定,也可以是為響應(yīng)突發(fā)性隨機(jī)事件而設(shè)置。通常有I/O設(shè)備、實(shí)時控制系統(tǒng)中的隨機(jī)參數(shù)和信息故障源等。中斷優(yōu)先級中斷優(yōu)先級越高,則響應(yīng)優(yōu)先權(quán)就越高。當(dāng)CPU正在執(zhí)行中斷服務(wù)程序時,又有中斷優(yōu)先級更高的中斷申請產(chǎn)生,這時CPU就會暫停當(dāng)前的中斷服務(wù)轉(zhuǎn)而處理高級中斷申請,待高級中斷處理程序完畢再返回原中斷程序斷點(diǎn)處繼續(xù)執(zhí)行,這一過程稱為中斷嵌套。中斷響應(yīng)的過程(1)在每條指令結(jié)束后,系統(tǒng)都自動檢測中斷請求信號,如果有中斷請求,且CPU處于開中斷狀態(tài)下,則響應(yīng)中斷。(2)保護(hù)現(xiàn)場,在保護(hù)現(xiàn)場前,一般要關(guān)中斷,以防止現(xiàn)場被破壞。保護(hù)現(xiàn)場一般是用堆棧指令將原程序中用到的寄存器推入堆棧。(3)中斷服務(wù),即為相應(yīng)的中斷源服務(wù)。(4)恢復(fù)現(xiàn)場,用堆棧指令將保護(hù)在堆棧中的數(shù)據(jù)彈出來,在恢復(fù)現(xiàn)場前要關(guān)中斷,以防止現(xiàn)場被破壞。在恢復(fù)現(xiàn)場后應(yīng)及時開中斷。(5)返回,此時CPU將推入到堆棧的斷點(diǎn)位置彈回到程序計數(shù)器,從而使CPU繼續(xù)執(zhí)行剛才被中斷的程序。MCS-51中斷系統(tǒng)圖4.1MCS-51中斷系統(tǒng)結(jié)構(gòu)框圖中斷源表4.18051中斷源特殊功能寄存器TCON中的標(biāo)志 D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0特殊功能寄存器SCOND7D6D5D4D3D2D1D0SM0SM1SM2RENTB0RB0TIRI中斷控制中斷允許控制寄存器IED7D6D5D4D3D2D1D0EAXET2ESET1EX1ET0EX0MCS-51單片機(jī)有5個(8052有6個)中斷源,為了使每個中斷源都能獨(dú)立地被允許或禁止,以便用戶能靈活使用,它在每個中斷信號的通道中設(shè)置了一個中斷屏蔽觸發(fā)器。只有該觸發(fā)器無效,它所對應(yīng)的中斷請求信號才能進(jìn)入CPU,即此類型中斷開放。否則,即使其對應(yīng)的中斷標(biāo)志位置1,CPU也不會響應(yīng)中斷,即此類型中斷被屏蔽了。同時CPU內(nèi)還設(shè)置了一個中斷允許觸發(fā)器,它控制CPU能否響應(yīng)中斷。中斷優(yōu)先級寄存器IPD7D6D5D4D3D2D1D0XXPT2PSPT1PX1PT0PX0表4.2同級內(nèi)第二優(yōu)先級次序中斷響應(yīng)中斷響應(yīng)的條件(1)同級或高優(yōu)先級的中斷已在進(jìn)行中;(2)當(dāng)前的機(jī)器周期還不是正在執(zhí)行指令的最后一個機(jī)器周期(換言之,正在執(zhí)行的指令完成前,任何中斷請求都得不到響應(yīng));(3)正在執(zhí)行的是一條RETI或者訪問特殊功能寄存器IE或IP的指令(換言之,在RETI或讀寫IE或IP之后,不會馬上響應(yīng)中斷請求,而至少執(zhí)行一條其它指令之后才會響應(yīng))。中斷響應(yīng)過程單片機(jī)一旦響應(yīng)中斷請求,就由硬件完成以下功能:(1)根據(jù)響應(yīng)的中斷源的中斷優(yōu)先級,使相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置1;(2)執(zhí)行硬件中斷服務(wù)子程序調(diào)用,并把當(dāng)前程序計數(shù)器PC的內(nèi)容壓入堆棧;(3)清除相應(yīng)的中斷請求標(biāo)志位(串行口中斷請求標(biāo)志RI和TI除外);(4)把被響應(yīng)的中斷源所對應(yīng)的中斷服務(wù)程序的入口位置(中斷矢量)送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序。表4.3中斷服務(wù)程序入口位置表例如,現(xiàn)有外部中斷1提出申請,且主程序中有R0、R1、DPTR、累加器A需保護(hù),則編制程序應(yīng)為:ORG0000HAJMPMAINORG0013HLJMPINT1…ORG0100HMAIN:…;主程序…ORG1000HINT1:PUSHACC;中斷服務(wù)程序PUSHDPHPUSHDPLPUSH0PUSH1POP1POP0POPDPLPOPDPHPOPACCRETI編程中應(yīng)注意:(1)在0000H放一條跳轉(zhuǎn)到主程序的跳轉(zhuǎn)指令,這是因?yàn)镸CS-51單片機(jī)復(fù)位后,PC的內(nèi)容變?yōu)?000H,程序從0000H開始執(zhí)行,緊接著0003H是中斷程序入口位置,故在此中間只能插入一條轉(zhuǎn)移指令;(2)響應(yīng)中斷時,先自動執(zhí)行一條隱指令“LCALL0013H”,而0013H至001BH(定時器1溢出中斷入口位置)之間可利用的存儲單元不夠,故放一條無條件轉(zhuǎn)移指令。 (3)在中斷服務(wù)程序的末尾,必須安排一條中斷返回指令RETI,使程序自動返回主程序。中斷系統(tǒng)的應(yīng)用例1單步操作的中斷實(shí)現(xiàn)。把一個外部中斷(設(shè)為INT0])設(shè)置為電平激活方式。其中斷服務(wù)程序的末尾寫上如下幾條指令:JNBP3.2,$;在INT0變高前原地等待(死循環(huán))JBP3.2,$;在INT0變低前原地等待(死循環(huán))RETI;返回并執(zhí)行一條指令現(xiàn)在,若INT0保持低電平,且允許INT0中斷,則CPU就進(jìn)入外部中斷0服務(wù)程序,由于有上述幾條指令,它就會停在JNB處,原地等待。當(dāng)INT0端出現(xiàn)一個正脈沖(由低到高,再到低)時,程序就會往下執(zhí)行,執(zhí)行RETI后,將返回主程序,往下執(zhí)行一條指令,然后又立即響應(yīng)中斷,以等待INT0端出現(xiàn)的下一個正脈沖。這樣在INT0端每出現(xiàn)一個正脈沖,主程序就執(zhí)行一條指令,實(shí)現(xiàn)了單步執(zhí)行的目的,要注意的是,這個正脈沖的高電平持續(xù)時間不小于3個周期,以確保CPU能采集到高電平值。例2多中斷源。MCS-51單片機(jī)有兩個外部中斷輸入端,當(dāng)有2個以上中斷源時,它的中斷輸入端就不夠了。此時,可以采用中斷與查詢相結(jié)合的方法來實(shí)現(xiàn)。可以使每個中斷源都接在同一個外部中斷輸入端上,同時利用輸入口線作為多中斷源情況下各中斷源的識別線。圖4.6多中斷源ORG0003HLJMPINT0…INT0:PUSHPSWPUSHACCJBP0.7,DV1JBP0.6,DV2JBP0.5,DV3JBP0.4,DV4GOBACK:POPACCPOPPSWRETIDV1:…;裝置1中斷服務(wù)程序…AJMPGOBACKDV2:… ;裝置2中斷服務(wù)程序…AJMPGOBACKDV3:… ;裝置3中斷服務(wù)程序…AJMPGOBACKDV4:… ;裝置4中斷服務(wù)程序…AJMPGOBACK第四講串口程序(4課時)作業(yè)非中斷模式下發(fā)送、接收數(shù)據(jù),利用超級終端。ASCII碼鍵盤程序中斷模式下收發(fā)數(shù)據(jù),利用超級終端。ASCII碼鍵盤程序硬件原理TTL電平TTL:Transistor-TransistorLogic三極管結(jié)構(gòu)。

Vcc:5V;VOH>=2.4V;VOL<=0.5V;VIH>=2V;VIL<=0.8V。RS232電平232電平或者說串口電平,有的甚至說計算機(jī)電平,所有的這些說法,指得都是計算機(jī)9針串口(RS232)得電平,采用負(fù)邏輯,-15v~-3v代表1+3v~+15v代表0串行通訊的方式異步通訊它用一個起始位表示字符的開始,用停止位表示字符的結(jié)束。其每幀的格式如下: 在一幀格式中,先是一個起始位0,然后是8個數(shù)據(jù)位,規(guī)定低位在前,高位在后,接下來是奇偶校驗(yàn)位(可以省略),最后是停止位1。用這種格式表示字符,則字符可以一個接一個地傳送。在異步通訊中,CPU與外設(shè)之間必須有兩項(xiàng)規(guī)定,即字符格式和波特率。字符格式的規(guī)定是雙方能夠在對同一種0和1的串理解成同一種意義。原則上字符格式可以由通訊的雙方自由制定,但從通用、方便的角度出發(fā),一般還是使用一些標(biāo)準(zhǔn)為好,如采用ASCII標(biāo)準(zhǔn)。波特率即數(shù)據(jù)傳送的速率,其定義是每秒鐘傳送的二進(jìn)制數(shù)的位數(shù)。例如,數(shù)據(jù)傳送的速率是120字符/s,而每個字符如上述規(guī)定包含10數(shù)位,則傳送波特率為1200波特。同步通訊在異步通訊中,每個字符要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,占用了時間;所以在數(shù)據(jù)塊傳遞時,為了提高速度,常去掉這些標(biāo)志,采用同步傳送。由于數(shù)據(jù)塊傳遞開始要用同步字符來指示,同時要求由時鐘來實(shí)現(xiàn)發(fā)送端與接收端之間的同步,故硬件較復(fù)雜。通訊方向在串行通訊中,把通訊接口只能發(fā)送或接收的單向傳送方法叫單工傳送;而把數(shù)據(jù)在甲乙兩機(jī)之間的雙向傳遞,稱之為雙工傳送。在雙工傳送方式中又分為半雙工傳送和全雙工傳送。半雙工傳送是兩機(jī)之間不能同時進(jìn)行發(fā)送和接收,任一時該,只能發(fā)或者只能收信息8051單片機(jī)的串行接口結(jié)構(gòu)8051串行接口是一個可編程的全雙工串行通訊接口。它可用作異步通訊方式(UART),與串行傳送信息的外部設(shè)備相連接,或用于通過標(biāo)準(zhǔn)異步通訊協(xié)議進(jìn)行全雙工的8051多機(jī)系統(tǒng)也可以通過同步方式,使用TTL或CMOS移位寄存器來擴(kuò)充I/O口。8051單片機(jī)通過引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界通訊。SBUF是串行口緩沖寄存器,包括發(fā)送寄存器和接收寄存器。它們有相同名字和位置空間,但不會出現(xiàn)沖突,因?yàn)樗鼈儍蓚€一個只能被CPU讀出數(shù)據(jù),一個只能被CPU寫入數(shù)據(jù)。串行口控制寄存器SCON它用于定義串行口的工作方式及實(shí)施接收和發(fā)送控制。字節(jié)位置為98H,其各位定義如下表:D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRISM0、SM1:串行口工作方式選擇位,其定義如下:SM0、SM1工作方式功能描述波特率00方式08位移位寄存器Fosc/1201方式110位UART可變10方式211位UARTFosc/64或fosc/3211方式311位UART可變其中fosc為晶振頻率SM2:多機(jī)通訊控制位。在方式0時,SM2一定要等于0。在方式1中,當(dāng)(SM2)=1則只有接收到有效停止位時,RI才置1。在方式2或方式3當(dāng)(SM2)=1且接收到的第九位數(shù)據(jù)RB8=0時,RI才置1。REN:接收允許控制位。由軟件置位以允許接收,又由軟件清0來禁止接收。TB8:是要發(fā)送數(shù)據(jù)的第9位。在方式2或方式3中,要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置1或清0。例如,可約定作為奇偶校驗(yàn)位,或在多機(jī)通訊中作為區(qū)別位置幀或數(shù)據(jù)幀的標(biāo)志位。RB8:接收到的數(shù)據(jù)的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8為接收到的停止位。在方式2或方式3中,RB8為接收到的第9位數(shù)據(jù)。TI:發(fā)送中斷標(biāo)志。在方式0中,第8位發(fā)送結(jié)束時,由硬件置位。在其它方式的發(fā)送停止位前,由硬件置位。TI置位既表示一幀信息發(fā)送結(jié)束,同時也是申請中斷,可根據(jù)需要,用軟件查詢的方法獲得數(shù)據(jù)已發(fā)送完畢的信息,或用中斷的方式來發(fā)送下一個數(shù)據(jù)。TI必須用軟件清0。RI:接收中斷標(biāo)志位。在方式0,當(dāng)接收完第8位數(shù)據(jù)后,由硬件置位。在其它方式中,在接收到停止位的中間時刻由硬件置位(例外情況見于SM2的說明)。RI置位表示一幀數(shù)據(jù)接收完畢,可用查詢的方法獲知或者用中斷的方法獲知。RI也必須用軟件清0。串行口的工作方式8051單片機(jī)的全雙工串行口可編程為4種工作方式,現(xiàn)分述如下:方式0方式0為移位寄存器輸入/輸出方式??赏饨右莆患拇嫫饕詳U(kuò)展I/O口,也可以外接同步輸入/輸出設(shè)備。8位串行數(shù)據(jù)者是從RXD輸入或輸出,TXD用來輸出同步脈沖。輸出串行數(shù)據(jù)從RXD引腳輸出,TXD引腳輸出移位脈沖。CPU將數(shù)據(jù)寫入發(fā)送寄存器時,立即啟動發(fā)送,將8位數(shù)據(jù)以fos/12的固定波特率從RXD輸出,低位在前,高位在后。發(fā)送完一幀數(shù)據(jù)后,發(fā)送中斷標(biāo)志TI由硬件置位。輸入當(dāng)串行口以方式0接收時,先置位允許接收控制位REN。此時,RXD為串行數(shù)據(jù)輸入端,TXD仍為同步脈沖移位輸出端。當(dāng)(RI)=0和(REN)=1同時滿足時,開始接收。當(dāng)接收到第8位數(shù)據(jù)時,將數(shù)據(jù)移入接收寄存器,并由硬件置位RI。方式1方式1為波特率可變的10位異步通訊接口方式。發(fā)送或接收一幀信息,包括1個起始位0,8個數(shù)據(jù)位和1個停止位1。輸出當(dāng)CPU執(zhí)行一條指令將數(shù)據(jù)寫入發(fā)送緩沖SBUF時,就啟動發(fā)送。串行數(shù)據(jù)從TXD引腳輸出,發(fā)送完一幀數(shù)據(jù)后,就由硬件置位TI。輸入在(REN)=1時,串行口采樣RXD引腳,當(dāng)采樣到1至0的跳變時,確認(rèn)是開始位0,就開始接收一幀數(shù)據(jù)。只有當(dāng)(RI)=0且停止位為1或者(SM2)=0時,停止位才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。所以在方式1接收時,應(yīng)先用軟件清零RI和SM2標(biāo)志。方式2方式二為固定波特率的11位UART方式。它比方式1增加了一位可程控位1或0的第9位數(shù)據(jù)。輸出:發(fā)送的串行數(shù)據(jù)由TXD端輸出一幀信息為11位,附加的第9位來自SCON寄存器的TB8位,用軟件置位或復(fù)位。它可作為多機(jī)通訊中位置/數(shù)據(jù)信息的標(biāo)志位,也可以作為數(shù)據(jù)的奇偶校驗(yàn)位。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫入SUBF的指令時,就啟動發(fā)送器發(fā)送。發(fā)送一幀信息后,置位中斷標(biāo)志TI。輸入:在(REN)=1時,串行口采樣RXD引腳,當(dāng)采樣到1至0的跳變時,確認(rèn)是開始位0,就開始接收一幀數(shù)據(jù)。在接收到附加的第9位數(shù)據(jù)后,當(dāng)(RI)=0或者(SM2)=0時,第9位數(shù)據(jù)才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。且不置位RI。再過一位時間后,不管上述條件時否滿足,接收電路即行復(fù)位,并重新檢測RXD上從1到0的跳變。方式3方式3為波特率可變的11位UART方式。除波特率外,其余與方式2相同。波特率設(shè)置波特率設(shè)置如前所述,在串行通訊中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在8051串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時器T1的溢出率控制。方式0方式0的波特率固定為主振頻率的1/12。方式2方式2的波特率由PCON中的選擇位SMOD來決定,可由下式表示:波特率=2的SMOD次方除以64再乘一個fosc,也就是當(dāng)SMOD=1時,波特率為1/32fosc,當(dāng)SMOD=0時,波特率為1/64fosc方式1和方式3定時器T1作為波特率發(fā)生器,其公式如下:波特率=定時器T1溢出率T1溢出率=T1計數(shù)率/產(chǎn)生溢出所需的周期數(shù)式中T1計數(shù)率取決于它工作在定時器狀態(tài)還是計數(shù)器狀態(tài)。當(dāng)工作于定時器狀態(tài)時,T1計數(shù)率為fosc/12;當(dāng)工作于計數(shù)器狀態(tài)時,T1計數(shù)率為外部輸入頻率,此頻率應(yīng)小于fosc/24。產(chǎn)生溢出所需周期與定時器T1的工作方式、T1的預(yù)置值有關(guān)。定時器T1工作于方式0:溢出所需周期數(shù)=8192-x定時器T1工作于方式1:溢出所需周期數(shù)=65536-x定時器T1工作于方式2:溢出所需周期數(shù)=256-x因?yàn)榉绞?為自動重裝入初值的8位定時器/計數(shù)器模式,所以用它來做波特率發(fā)生器最恰當(dāng)。當(dāng)時鐘頻率選用11.0592MHZ時,取易獲得標(biāo)準(zhǔn)的波特率,所以很多單片機(jī)系統(tǒng)選用這個看起來“怪”的晶振就是這個道理。下表列出了定時器T1工作于方式2常用波特率及初值。常用波特率Fosc(MHZ)SMODTH1初值1920011.05921FDH960011.05920FDH480011.05920FAH240011.05920F4h120011.05920E8h串口中斷設(shè)置程序代碼第五講IIC總線與實(shí)時時鐘(8課時)作業(yè)將實(shí)時時鐘顯示在數(shù)碼管上。IIC原理I2C(Inter-IntegratedCircuit)總線是一種由Phil-ips公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。由于I2C總線僅用兩根信號線,并支持多主控工作方式,所以I2C總線在電子產(chǎn)品設(shè)備中應(yīng)用非常普遍。文獻(xiàn)[1]使用NiosⅡ的PIO接口模擬I2C時序完成對接口芯片的讀寫,而目前基于NiosⅡ的IP核越發(fā)豐富?;诖?,本文使用免費(fèi)的IP核--I2C-MasterCore,實(shí)現(xiàn)了對I2C接口芯片的讀寫操作,擴(kuò)充了一種新的設(shè)計方法。本文首先介紹了I2C總線結(jié)構(gòu)和工作原理,然后詳細(xì)說明了基于NiosⅡ的I2C-MasterCore的使用方法,最后給出了C語言的編程代碼。1I2C總線基本原理I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、進(jìn)行雙向傳送,最高傳送速度100kbit/s。I2C總線在傳送數(shù)據(jù)的過程中共有4種基本類型信號,分別是:開始信號、數(shù)據(jù)傳輸信號、應(yīng)答信號和結(jié)束信號。a)開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。所有的命令都必須在開始條件以后進(jìn)行。b)結(jié)束信號:SCL為高電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。所有的操作都必須在停止條件以前結(jié)束。總線開始和停止數(shù)據(jù)傳送的時序如圖1所示。c)數(shù)據(jù)傳輸信號:在開始條件以后,時鐘信號SCL的高電平周期期問,當(dāng)數(shù)據(jù)線穩(wěn)定時,數(shù)據(jù)線SDA的狀態(tài)表示數(shù)據(jù)有效,即數(shù)據(jù)可以被讀走,開始進(jìn)行讀操作。在時鐘信號SCL的低電平周期期間,數(shù)據(jù)線上數(shù)據(jù)才允許改變。每位數(shù)據(jù)需要一個時鐘脈沖。I2C總線的數(shù)據(jù)位傳送時序如圖2所示。d)應(yīng)答信號:接收數(shù)據(jù)的從器件收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的主控器件發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。這要求主器件必須產(chǎn)生一個與確認(rèn)位相應(yīng)的額外時鐘脈沖(第9個脈沖)。若主控器件確認(rèn)失敗,主控器件必須發(fā)送一個數(shù)據(jù)結(jié)束信號給從器件。這時從器件必須使SDA線保持高電平,使主控器件能產(chǎn)生停止條件??偩€的應(yīng)答信號時序見圖3。原理I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)各種被控制電路均并聯(lián)在這條總線上,CPU發(fā)出的控制信號分為位置碼和控制量兩部分,位置碼用來選址,即接通需要控制的電路,確定控制的種類;控制量決定該調(diào)整的類別。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨(dú)立,互不相關(guān)。I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號,它們分別是:開始信號、結(jié)束信號、數(shù)據(jù)信號與應(yīng)答信號。起始和終止信號:SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號數(shù)據(jù)信號:I2C總線進(jìn)行數(shù)據(jù)傳送時,時鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化應(yīng)答信號:接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單元發(fā)出一個應(yīng)答信號,CPU接收到應(yīng)答信號后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,由判斷為受控單元出現(xiàn)故障??偩€基本操作每一個字節(jié)必須保證是8位長度。數(shù)據(jù)傳送時,先傳送最高位(MSB),每一個被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位)。此應(yīng)答位是接收端發(fā)出的在起始條件之后,必須是器件的控制字節(jié),其中高四位為器件類型識別符(不同的芯片類型有不同的定義,EEPROM一般應(yīng)為1010),接著三位為片選,最后一位為讀寫位,當(dāng)為1時為讀操作,為0時為寫操作DS1307實(shí)時時鐘DS1307的工作時序發(fā)送方式為:MSBDS1307通過雙向數(shù)據(jù)線SDA和時鐘SCL與外界進(jìn)行數(shù)據(jù)交換,其時序關(guān)系如圖2所示。

從時序圖2中可看出,DS1307有2種操作方式:

(1)寫操作:把SDA數(shù)據(jù)線上的數(shù)據(jù)按RAM指定的首位置(WordAddress)依次寫入N個字節(jié)數(shù)據(jù),其格式為:

(2)讀操作:按RAM指定的首位置依次讀出N個字節(jié)數(shù)據(jù),其格式為:

其中:S為起始信號,1101000為DS1307的口位置,A應(yīng)答信號,A非應(yīng)答信號,P停止信號。程序代碼發(fā)送方式為:MSB/***********************************************************************/

voidI2C_start(void)

{

SDA=1;

SCL=1;

Wait8us;

SDA=0;

Wait8us;

SCL=0;

}/***********************************************************************/

voidI2C_stop(void)

{

SDA=0;

SCL=1;

Wait8us;

SDA=1;

Wait4us;

SCL=0;

}

/***********************************************************************

voidI2C_send_ack(void)

{

SDA=0;

SCL=1;

Wait4us;

SCL=0;

}

*************************************************************************/

voidI2C_send_noack(void)

{

SDA=1;

SCL=1;

Wait4us;

SCL=0;

}

/***********************************************************************/

voidI2C_write_byte(unsignedcharIIC_data)

{

unsignedchari;

for(i=0;i<8;i++)

{

SCL=0;

if((IIC_data<<i)&0x80)

SDA=1;

//判斷發(fā)送位

elseSDA=0;

Wait2us;

SCL=1;

Wait4us;

SCL=0;

}

Wait4us;

SDA=1;//發(fā)送完8bit,釋放總線準(zhǔn)備接收應(yīng)答位

Wait2us;

SCL=1;

Wait4us;//sda上數(shù)據(jù)即是從應(yīng)答位

SCL=0;//不考慮從應(yīng)答位但要控制好時序

}

/***********************************************************************/

unsignedcharI2C_read_byte(void)

{

unsignedchari,dat;

dat=0;

SDA=1;

for(i=0;i<8;i++)

{

dat=dat<<1;

SCL=1;

Wait2us;

if(SDA==1)

{

dat++;

}

SCL=0;

}

return(dat);

}/**************************************************

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論