版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄TOC\o"1-5"\h\z\o"CurrentDocument"第1章C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)硬件結(jié)構(gòu) 3\o"CurrentDocument"功能特點(diǎn) 3\o"CurrentDocument"硬件原理 4\o"CurrentDocument"電路原理圖 4部分電路原理簡(jiǎn)介 5\o"CurrentDocument"硬件結(jié)構(gòu) 9\o"CurrentDocument"第2章KEIL集成開發(fā)環(huán)境及JTAG仿真器應(yīng)用 15\o"CurrentDocument"軟件安裝 15\o"CurrentDocument"JTAG仿真有關(guān)設(shè)置 16第3章基礎(chǔ)實(shí)驗(yàn) 18\o"CurrentDocument"啟動(dòng)代碼分析 18170口實(shí)驗(yàn) 26\o"CurrentDocument"RAM基本操作 32\o"CurrentDocument"定時(shí)器 36\o"CurrentDocument"比較器 42\o"CurrentDocument"外部中斷 44\o"CurrentDocument"PCA模塊 48\o"CurrentDocument"AD轉(zhuǎn)換 54第4章 外圍功能部件驅(qū)動(dòng)函數(shù)庫 73\o"CurrentDocument"系統(tǒng)基本初始化庫函數(shù) 73\o"CurrentDocument"SMBUS總線驅(qū)動(dòng)庫函數(shù) 81\o"CurrentDocument"SP1總線驅(qū)動(dòng)庫函數(shù) 87\o"CurrentDocument"PCA驅(qū)動(dòng)庫函數(shù) 90\o"CurrentDocument"ADC數(shù)據(jù)采集與處理驅(qū)動(dòng)庫函數(shù) 98\o"CurrentDocument"DAC驅(qū)動(dòng)庫函數(shù) 102\o"CurrentDocument"LCD顯示驅(qū)動(dòng)庫函數(shù) 104\o"CurrentDocument"PS2鍵盤驅(qū)動(dòng)庫函數(shù) 112\o"CurrentDocument"紅外遙控器解碼驅(qū)動(dòng)庫函數(shù) 118\o"CurrentDocument"鍵盤輸入顯示數(shù)據(jù)處理驅(qū)動(dòng)庫函數(shù) 121\o"CurrentDocument"SST25VF16存儲(chǔ)芯片驅(qū)動(dòng)庫函數(shù) 134\o"CurrentDocument"無線數(shù)傳模塊nREF905驅(qū)動(dòng)庫函數(shù) 145\o"CurrentDocument"實(shí)時(shí)時(shí)鐘PCF8563驅(qū)動(dòng)庫函數(shù) 154\o"CurrentDocument"DDS芯片AD9851驅(qū)動(dòng)庫函數(shù) 161第5章綜合應(yīng)用示例 164\o"CurrentDocument"多路數(shù)據(jù)采集 164\o"CurrentDocument"無線數(shù)據(jù)采集監(jiān)測(cè)網(wǎng)絡(luò) 164\o"CurrentDocument"心電圖儀 164\o"CurrentDocument"寬帶放大器 165\o"CurrentDocument"簡(jiǎn)易頻譜分析儀的制作 165uCOS_n在C8O51FO2O中的移植 165第1幸C8051F単片機(jī)創(chuàng)新賣除開發(fā)平臺(tái)硬件結(jié)構(gòu)功能特點(diǎn)C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)是ー款功能比較完善的C8O51FXXX單片機(jī)開發(fā)板,它使用的單片機(jī)是完全集成的混合信號(hào)系統(tǒng)級(jí)芯片(SOC),具有與8051指令集完全兼容的CIP-51內(nèi)核,它在ー個(gè)芯片內(nèi)集成了構(gòu)成一個(gè)單片機(jī)數(shù)據(jù)采集或控制系統(tǒng)所需要的幾乎所有模擬和數(shù)字外設(shè)及其他功能部件,包括ADC、DAC、可編程增益放大器、電壓比較器、電壓基準(zhǔn)、溫度傳感器、SMBUS(I2C)、SPLUART、定時(shí)器、可編程計(jì)數(shù)器定時(shí)器陣歹リ(以下均簡(jiǎn)稱PCA)、內(nèi)部振蕩器、看門狗定時(shí)器及電源監(jiān)視器等,這些外設(shè)部件的高度集成為設(shè)計(jì)小體積、低功耗、高可靠性和高性能的單片機(jī)應(yīng)用系統(tǒng)提供了方便,也可使系統(tǒng)的整體成本大大降低。1.I功能特點(diǎn)使用CPUPACK,除可以方便更新原芯片外,完全兼容主頻高達(dá)100M的C8O51F12O心片〇完全自主設(shè)計(jì)的硬件,并在全國大學(xué)生電子設(shè)計(jì)大賽中積累了大量的函數(shù)庫。支持在線調(diào)試,現(xiàn)場(chǎng)仿真,方便用戶調(diào)試程序。外擴(kuò)了32K的RAM,有SPI接口容量多達(dá)16MBit的非易失性存儲(chǔ)器。豐富的輸入接口(ZLG7290矩陣鍵盤及PS2鍵盤,鼠標(biāo))和豐富的輸出接口(ZLG7290,LCD液晶顯示、ハ路LED直接顯示)。I/O口全部外引,具有RS232轉(zhuǎn)換電路,可與上位機(jī)通信。?有時(shí)鐘芯片PCF8563,蜂鳴器等。?使用12c接口的AT24co2??梢赃M(jìn)行外部中斷實(shí)驗(yàn),有獨(dú)立按鍵。外部中斷可通過短路卡選擇。A/D與D/A基準(zhǔn)可以調(diào)節(jié)。提供資料完整的實(shí)驗(yàn)教程與經(jīng)調(diào)試通過的函數(shù)庫。C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)功能框如圖1-1所示:串口接口1申口接U2紅外電源電源擴(kuò)展接口5V,3.3V,GND1.2.1 電路原理圖跑馬燈タト部RAMLCD接口 PS2接口ハ位數(shù)碼管C8051F020單
片機(jī)及JTAG
接口圖1-1PCF8563時(shí)鐘24co2存儲(chǔ)器SPI接ロ的
FLASH38碼展口13譯擴(kuò)接蜂鳴
器1.2硬件原理立鍵獨(dú)按ZLG7290
鍵盤、顯示
模塊4*5矩陣鍵盤圖1-21.2.2 部分電路原理簡(jiǎn)介1,電源電路C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)的電源由一路大于7V的外部電源供電,當(dāng)使用液晶時(shí)建議外接9V,800mA的電源(為此如果發(fā)現(xiàn)開發(fā)平臺(tái)電源不正常請(qǐng)檢查7805是否損壞)。電源進(jìn)入開發(fā)平臺(tái)后經(jīng)過一個(gè)防電源反接的二極管加到7805輸入端,經(jīng)7805穩(wěn)壓得到5V電源除用于給液晶,紅外接收頭,PS2接口供電外,還提供給AS1117,用于產(chǎn)生3.3V的電壓,給開發(fā)平臺(tái)的各芯片供電。由于該平臺(tái)上有模擬部分和數(shù)字部分,因此在電源部分做了適當(dāng)?shù)墓ぷ鳎允鼓M部分獲得比較平穩(wěn)的電源,該部分的電路如圖1-3所示:圖1-3圖1-3.復(fù)位電路與時(shí)鐘電路C8051F高速S〇C單片機(jī)對(duì)電源的紋波,時(shí)鐘源的穩(wěn)定和電源監(jiān)控等方面有有著比較高的要求,為此為復(fù)位電路配置了一級(jí)RC濾波電路以減少電源對(duì)復(fù)位的影響,另請(qǐng)用戶務(wù)必保證供電系統(tǒng)的接地(接大地)良好,不然C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)的抗干擾性能將變差。C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)可以使用單片機(jī)內(nèi)的時(shí)鐘,也可以使用板上帶的22.1184M的時(shí)鐘電路,之所以選擇該時(shí)鐘在于該時(shí)鐘可以產(chǎn)生用于串口通訊所要使用的準(zhǔn)確的波特率,有關(guān)該部分的寄存器設(shè)置詳見后面的實(shí)驗(yàn)。該部分的電路如圖1-4所示:晶振 1xmu晶振 1xmu>XI !ロ!~~IXTAU>221184NWZ圖1-4.JTAG接口電路C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)使用新華龍的U-EC5仿真器進(jìn)行JTAG在線調(diào)試,該仿真器使用USB接口與電腦相連,只要安裝ー個(gè)軟件即可以實(shí)現(xiàn)在Keil內(nèi)的仿真調(diào)試,應(yīng)用十分方便。有關(guān)該部分的應(yīng)用指導(dǎo)詳見后面的實(shí)驗(yàn)。該部分的電路原理圖如圖1-5所示:
.鍵盤顯7F電路該部分電路使用12c接口的ZLG7290管理一個(gè)矩陣鍵盤掃描和八路數(shù)碼管顯示。在開發(fā)平臺(tái)上用短路帽短接J26接通給ZLG7290的電源及可以在程序中控制ZLG7290新,并通過其“?斷訪問到按下的鍵的鍵值。電路如圖1-6所示:+3VD2R:ヽpo鍵盤SCLsax-7^0\DO)6\_, 二7※ざ47旭ミ\(yùn)D*j5_21\DIOf>12\rX3713192o14TTC38KMDO/KCODIGVKCIDIGyKC2DT?KC3DIGVKC4DIGyKC5DT?KC6OG77KC7UliZUJ729OCSO-VOCSDA一M/INF+3VD2R:ヽpo鍵盤SCLsax-7^0\DO)6\_, 二7※ざ47旭ミ\(yùn)D*j5_21\DIOf>12\rX3713192o14TTC38KMDO/KCODIGVKCIDIGyKC2DT?KC3DIGVKC4DIGyKC5DT?KC6OG77KC7UliZUJ729OCSO-VOCSDA一M/INFヌ幺/RSTO00*0KR(XSAKRVSBKR3SCKRVSDKR4SEKR^SFI0WSGKR7/DPコヨ(Nい?p3JヽBBAflABCDequJMdBBSBABCD-ヽT00s8-oy^xl-C-Q一32y?ヽTS5IR3933K力RM)3.3KIR4I3.3KIR423.3KK2 ?\\4>lP"?WHP一!’"_1'-一!K9"KiOTciTKiTKI4KI、KI6—pfl_~"1'-~1'-gザf~1R).Swrf[-gwrf~1SAI№148SBI№148SC1№148SD(№148DP圖1-6.外部RAM電路這部分的電路為C8O51F單片機(jī)擴(kuò)展了一個(gè)32K的外部RAM。該存儲(chǔ)器掛在總線上,在硬件上不需要用戶的過多的關(guān)心,有關(guān)該部分的程序的操作詳見后面的實(shí)驗(yàn):電路如圖1-7所示:帚腳?展 防cQQQQQQQQC2345678元DDDDDDDDN冃-CI2345678GcQQQQQQQQC2345678元DDDDDDDDN冃-CI2345678G2()T9 1018 917 8:<_L_74HC5733 42 31ALEA825A9更Ahi2TAH復(fù)AI2-TAI326A14rIAll)ADIAl72SAD316AW1フ亞運(yùn)叵19Al)7+5vrc28W=C3714 10402〇Al02〇AlミAVR—~q圖1-7.實(shí)時(shí)時(shí)鐘電路這一部分的電路使用了一片時(shí)鐘專用芯片,它使用了12c總線接口,只要熟悉它的ー些寄存器,對(duì)它的操作將變得十分簡(jiǎn)單。電路如圖1-8所示:圖1-8圖1-8.非易失性存儲(chǔ)器說明C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)使用了兩種接口的非易失性存儲(chǔ)器,ー種是在開發(fā)板上普遍使用的I2C接口的AT24C02,ー種是廣泛應(yīng)用于エ業(yè)記錄介質(zhì)的SPI接口的SST25VF16。這兩種存儲(chǔ)器分別通過總線接到單片機(jī)上,單片機(jī)只需通過串行總路線即可訪問它們。電路如圖1-9所示:
?其它的電路將不在這里介紹,在涉及到的具體實(shí)驗(yàn)中再作介紹。1.3硬件結(jié)構(gòu)在本節(jié)中將重點(diǎn)介紹開發(fā)平臺(tái)上的各種接插部分。?JH:這部分的通過短路帽將P5口連接到開發(fā)平臺(tái)的八燈發(fā)光二極管上,用來直接顯示二進(jìn)制量,除了可以作為!/0口基本訓(xùn)練跑馬燈之外,還可以在開發(fā)過程中作為最直接的顯示,用來顯示ー個(gè)字節(jié)信息,注意右側(cè)是低位。如不需要LED可以拔掉該部分的短路帽拿掉。J12:這部分用于接通SST25VF16的SPI總線,如果需要使用該串行存儲(chǔ)器請(qǐng)將這里用短路帽短接。并且請(qǐng)注意這里四根線的依次是:NSS(P3.0),MISO,MOSI和SCKo
J12網(wǎng)J12網(wǎng)般-5-nnLJLJJ13,J14:用于調(diào)整時(shí)鐘芯片振蕩電路的負(fù)載電容,對(duì)時(shí)鐘芯片的振蕩電路微調(diào)。在一般情況下接ー個(gè)就可以。如果需要比較精確的時(shí)鐘,此時(shí)可以使用高精度頻率計(jì)測(cè)量J15輸出的頻率,當(dāng)頻率比32.768KHz偏高時(shí),加大電容:頻率比32.768KHz偏低時(shí),減小電容。J13U56C24匚コR19C25‘ロ回J15J15:時(shí)鐘頻率輸出,因?yàn)镻CF8563有可編程時(shí)鐘輸出功能,在特定的場(chǎng)合能夠?yàn)橛脩糸_發(fā)提供方便,在學(xué)習(xí)時(shí)可以編程PCF8563輸出1Hz,再接到中斷上,從而可以使時(shí)鐘1S及時(shí)更新一次,如不使用,該端可閑置。
U56C24匚コR19C25‘ロ回J15J20,J21:這部分的插針與單片機(jī)的基準(zhǔn)選擇有關(guān),J20的電壓由PR2調(diào)節(jié)決定。J21的上端(2,4,6)與單片機(jī)的內(nèi)部基準(zhǔn)源相接,因此可以通過短路帽選擇使用哪路電壓作為基準(zhǔn)。在開發(fā)板上標(biāo)的“VREFD”代表DAC的基準(zhǔn),“VREFO”代表ADCO的基準(zhǔn),“VREF1"イ昧ADC1的基準(zhǔn),請(qǐng)注意一定要為使用的轉(zhuǎn)換器選擇基準(zhǔn)源。J21J20LII|C32にコC30J21J20LII|C32にコC30PR2J22:通過PR1調(diào)節(jié)產(chǎn)生的電壓經(jīng)由此處輸出供測(cè)試用,可以用于測(cè)試AD和比較器等,一般閑置。IItC8C9?]j24IItC8C9?]j24R26練曲練PR1J22[ ]C33J23:這里連接著驅(qū)動(dòng)蜂鳴器的三極管的基極,所以當(dāng)要使用蜂鳴器時(shí)請(qǐng)用跳線將它連接到某個(gè)用于報(bào)警輸出的I/O口上。當(dāng)這個(gè)地方出現(xiàn)低電平時(shí),蜂鳴器發(fā)聲。
J24:紅外?體化接收頭的整形輸出端,從這里可以輸出紅外接收頭接收到的由紅外發(fā)射端發(fā)來的數(shù)據(jù),并目.可以直接通過跳線接給單片機(jī)的中斷,對(duì)它進(jìn)行解碼,所以在使用它的時(shí)候,一定要用跳線將它連接到軟件中定義的對(duì)它進(jìn)行讀入的地方。U12 R44C8C9而2rl-gL?JI_11 II 1. R43Cl3電+5UJ26:接通ZLG7290的關(guān)鍵所在,當(dāng)需要使用該芯片及其功能時(shí),必須用短路帽將
該處短接,因?yàn)樵撔酒碾娤鄬?duì)較大些,因此設(shè)計(jì)為當(dāng)不使用時(shí)即斷開其電源。
C40C39f^KEY?Ia|F!匚コザ.[J|||wi|e|j26JU;這里有2*4根插針,用于接通單片機(jī)的兩個(gè)UART到RS-232電平轉(zhuǎn)換芯片,注意1-2,3-4是對(duì)應(yīng)UART0,5-6,7-8對(duì)就于UART1,使用串U時(shí)需注意該處的短路帽要接對(duì),在用串口通訊前建議將2N或6-8直接相連,用串口調(diào)試助手之類串口小軟件,如果電腦能在發(fā)送一幀數(shù)據(jù)同時(shí)接收到ー幀ー樣的數(shù)據(jù)則線路沒有問題,否則請(qǐng)檢查連線,或者串口的設(shè)置。C17C16C15JUU3RXOC17C16C15JUU3TX1RX1/INT0/INT6和/INT1/1NT7:這里可以能過短路帽選擇ZLG7290,PS2以及PCF8563,獨(dú)立按鍵SW1作為中斷輸入,因此這里連接著開發(fā)平臺(tái)的ー些重要資源,它也可以通過路線選擇來自J24的紅外信號(hào)作為輸入,所以了解這一部分的分布與連接十分重要。/INTO/INTO7290/INT6PS2/INTIRCT/INTzINT7SUI?另外在開發(fā)平臺(tái)上的J4,J5,J6,J7,從左到右分別對(duì)應(yīng)著單片機(jī)的PO到P7ロ,J3的左側(cè)是AD的模擬輸入,右側(cè)則作為兩路DA的輸出與兩個(gè)比較器同相、反相端的輸入。這在開發(fā)平臺(tái)上都標(biāo)注得比較清楚,不需記憶。J3ADOTeeee??。。
EleIeleleJ3ADOTeeee??。。
EleIelelelele陰DACOCP1+CP1-CPO+CPO-PlP2DAClPO第2幸KEIL集成開發(fā)環(huán)境及JTAG仿真春應(yīng)用KEIL軟件是目前最流行開發(fā)MCS-51系列單片機(jī)的軟件,這從近年來各仿真機(jī)廠商紛紛宣布全面支持Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和ー個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(uVision)將這些部分組合在ー起。在這篇實(shí)驗(yàn)指導(dǎo)中將指導(dǎo)在Keil_V8.02中進(jìn)行相關(guān)實(shí)驗(yàn)。2.1軟件安裝?安裝keil,這是第一步,請(qǐng)選擇安裝的路徑,如圖2-1是我的安裝路徑,也可以使用其默認(rèn)的路徑:圖2-1?安裝Kei!下的C8051F的驅(qū)動(dòng)(SiC8O51F_uv3.exe),用于在Keil下使用U-EC5仿真器,如圖2-2所示
圖2-22.2JTAG仿真有關(guān)設(shè)置雙擊桌面上的KeiluVision3圖標(biāo)或者在開始菜單里找到該程序點(diǎn)擊運(yùn)行。如果之前運(yùn)行過該程序則此時(shí)打開的最近一次的工作環(huán)境,請(qǐng)找到“project”項(xiàng),并點(diǎn)擊“NewProject”新建一個(gè)工程,為新的工程命名并選擇ー個(gè)存放目錄,建議ー個(gè)工程一個(gè)文件夾,并盡量命名ー個(gè)能代表該工程實(shí)際情況的名字,便于以后查找。然后在彈出的選擇芯片對(duì)話框中選擇SiliconLaboratories”并選擇F020單片機(jī)。在彈出的是否復(fù)制“STARTJJP”對(duì)話框中點(diǎn)擊“Yes”。點(diǎn)擊菜單欄“Project'OptionsforTarget…”選項(xiàng),在出現(xiàn)的新對(duì)話框中點(diǎn)擊菜單欄的“Debug”選項(xiàng),選擇“useSiliconLaboratoriesC8051FXXX”(如圖2-3),在“Setting”中設(shè)置端口(如圖24),以進(jìn)行C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)的硬件調(diào)試,至此用戶便可以在工程中裝入、編譯、下載、運(yùn)行程序,具體的KeiluVision3調(diào)試方法在琳瑯滿目的書架上的各種參考書中有詳細(xì)的介紹,并且在實(shí)驗(yàn)中將會(huì)要使用到這些方法。圖2-3nulatoSpeedpplicaationDebug^kpoin:hpoin)ryDi圖2-4第3幸基礎(chǔ)實(shí)診在這一章里將介紹十個(gè)基本的實(shí)驗(yàn),其中包括開發(fā)環(huán)境介紹及JTAG仿真器的使用,這些實(shí)驗(yàn)是為我們積累經(jīng)驗(yàn)和技巧從而面對(duì)復(fù)雜的開發(fā)設(shè)計(jì),因此不是簡(jiǎn)單的重復(fù)別人做過的事情,初學(xué)階段即便往電腦里輸入一段別人的代碼(當(dāng)然不會(huì)是簡(jiǎn)單的“復(fù)制”'’粘貼つ,按別人的步驟去做,也能夠?qū)W到東西。啟動(dòng)代碼分析.實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)Keil集成開發(fā)環(huán)境的使用。學(xué)習(xí)51單片機(jī)啟動(dòng)代碼的分析。.實(shí)驗(yàn)設(shè)備?使用Windows2000/XP操作系統(tǒng)PC機(jī),KeiluVision3開發(fā)環(huán)境。.實(shí)驗(yàn)內(nèi)容在電腦上新建工程文件,并按要求加載“C51”的啟動(dòng)代碼,設(shè)置仿真參數(shù),輸入程序后運(yùn)行觀察程序的運(yùn)行,通過單步可以察看各寄存器的變化,從而了解單片機(jī)在上電復(fù)位后的運(yùn)行情況。.實(shí)驗(yàn)原理所謂啟動(dòng)代碼就是在程序進(jìn)入主函數(shù)之前CPU所執(zhí)行的一段代碼,這段代碼包括ー些編譯模式的定義、變量存儲(chǔ)空間的分配、變量的初始化以及在主函數(shù)執(zhí)行前對(duì)硬件的初始化操作。首先要說明,之所以要把啟動(dòng)代碼這ー塊放在實(shí)驗(yàn)的最開頭其主要目的有兩個(gè):ー個(gè)是顯示啟動(dòng)代碼的重要性,啟動(dòng)代碼的分析是后續(xù)實(shí)驗(yàn)的基礎(chǔ),在后續(xù)實(shí)驗(yàn)進(jìn)行之前必須把啟動(dòng)代碼中所包含的硬件設(shè)置掌握。我們知道C8051F020/120在默認(rèn)情況下使用的是內(nèi)部XRAM,然而我們現(xiàn)在使用的是外部XRAM,必須在編譯器為變量分配存儲(chǔ)空間和初始化前將XRAM存儲(chǔ)空間切換到片外的XRAM中。如果不那樣做,那么當(dāng)我們?yōu)樵O(shè)定為外部存儲(chǔ)模式的變量初始化以后,而當(dāng)主程序運(yùn)行以后,由于LCD顯示裝置的數(shù)據(jù)線是掛在數(shù)據(jù)總線上的,所以必須把XRAM切換到片外模式。這樣切換以后就會(huì)導(dǎo)致初始化了的變量而無法讀取到初始值的情況,因?yàn)橛布鎯?chǔ)空冋的改變將會(huì)導(dǎo)致數(shù)據(jù)的丟失。所以我們?cè)谧兞康拇鎯?chǔ)空間分配和初始化以前必須完成外部總線的切換。啟動(dòng)代碼的分析如程序清單3-1所示,請(qǐng)對(duì)照注釋仔細(xì)分析各段代碼實(shí)現(xiàn)的功能。程序清單3-1SNOMOD51;宏匯編器控制命令:禁止預(yù)定義的8051似ド為STARTUP1:中用至り的SFR絕對(duì)地址定義EMI0TCDATA0A1HEMI0CFDATA0A3HWDTCNDATAOFFHPOMDOUTDATA0A4HP1MDOUTDATA0A5HP3MDOUTDATA0A7HP74OUTDATA0B5HXBR0DATA0E1HXBR1DATA0E2HXBR2DATA0E3H;以下代碼保持最初的默認(rèn)狀態(tài)未做任何修改ThisfileispartoftheC51CompilerpackageCopyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.STARTUP.A51:Thiscodeisexecutedafterprocessorreset.STARTUP.A51:文件所生成的代碼將在單片機(jī)笑位后被執(zhí)行!lbtranslatethisfileuseA51withthefollowinginvocation:將按照下面的命令行語句調(diào)用A51編譯器進(jìn)行編譯產(chǎn)生目標(biāo)文件A51STARTUP.A51T()linkthemodifiedSTARTUP.OBJfiletoyourapplicationusethefollowingBL51invocation:將按照下面的命令行語句調(diào)用BL5!連接器把STARTUP.OBJ定位連接到您的程序代碼中BL51<yourobjectfilelist>,STARTUP.OBJ<controls>;User-definedPower-OnInitializationofMemory;自定義上電后需要初始化的儲(chǔ)存:區(qū)域;WiththefollowingEQUstatementstheinitializationofmemory;atprocessorresetcanbedefined:;使用ド列EQU偽指令定義初始化的存儲(chǔ)區(qū)域在單片機(jī)復(fù)位后定義生效; ;theabsolutestart-addressofIDATAmemoryisalways0IDATALEN EQU80H ;thelengthofIDATAmemoryinbytes.IIDATA(間接ノ址M)式起始地址固定為0:IDATALEN用「指定需要初始化的IDA1A區(qū)長(zhǎng)度(以字;節(jié)為單位)?XDATASTART EQU OH ;theabsolutestart-addressofXDATAmemoryXDATALEN EQU OH ;thelengthofXDATAmemoryinbytes.;XDATA(外部直接號(hào)址區(qū))XDATASTART用于指定需要初始化的XDATA區(qū)起始地址XDATALENI用于指定需要初始化的XDATA伙長(zhǎng)度(以字節(jié)為單位)*PDATASTART EQU OH ;theabsolutestart-addressofPDATAmemoryPDA1ALEN EQU OH ;thelengthofPDATAmemoryinbytes.;PDATA(頁フ址區(qū))PDATASTART用手指定需要初始化的PDATA區(qū)起始地址,PDATALEN用于指定;需要初始化的;PDATA區(qū)長(zhǎng)度(以字節(jié)為單位)*;Notes:TheIDATAspaceoverlapsphysicallytheDATAandBITareasofthe; 8051CPU.AtminimumthememoryspaceoccupiedfromtheC51; run-timeroutinesmustbesettozero.;注釋:8051中!DATA區(qū)物理上已經(jīng)包括了DATA區(qū)(直接尋址區(qū))以及BIT區(qū)(位尋址區(qū))。C51;(庫)占用了最小;化內(nèi)存空間,運(yùn)行時(shí)程序需要把它設(shè)為〇。;ReentrantStackInitilization;重入堆棧初始化;ThefollowingEQUstatementsdefinethestackpointerforreentrant;functionsandinitializedit:;ド面的EQU語句定義幣;入函數(shù)的堆棧指針并初始化它;StackSpacefbrreentrantfunctionsintheSMALLmodel.;SMALL模式下的帀入函數(shù)的堆棧空間IBPSTACK EQU0 ;setto1ifsmallreentrantisused.;如果再SMALL模式下使用重入則設(shè)為1IBPSTACKTOPEQU0FFH+1;settopofstacktohighestlocation+1.;設(shè)置堆棧頂最髙位置+1;StackSpacefbrreentrantfunctionsintheLARGEmodel.;LARGE模式下的重入函數(shù)的堆棧空間XBPSTACK EQU0 ;setto1iflargereentrantisused.;如果再LARGE模式下使用垂入則設(shè)為1XBPSTACKTOPEQU0FFFFH+1;settopofstacktohighestlocation+1.;設(shè)置堆棧頂最高位置+1;StackSpaceforreentrantfunctionsintheCOMPACTmodel.;COMPACT模式下的帀入函數(shù)的堆??臻gPBPSTACK EQU0 ;setto1ifcompactreentrantisused.;如果再COMPACT模式下使用垂入則設(shè)為1PBPSTACKTOPEQU0FFFFH+1;settopofstacktohighestlocation+1.;設(shè)置堆棧頂最高位置+1;PageDefinitionforUsingtheCompactModelwith64KBytexdataRAM;使用COMPACT模式時(shí)為64KB的XDATARAM定義頁;ThefollowingEQUstatementsdefinethexdatapageusedfbrpdata;variables.TheEQUPPAGEmustconformwiththePPAGEcontrolused;inthelinkerinvocation.;下面的EQU語句定義PDATA變最的使用/XDATA頁P(yáng)PAGEENABLEEQU0;setto1ifpdataobjectareused.;如果使用PDATA頁則設(shè)為1PPAGE EQU0;definePPAGEnumber.;定義頁號(hào)PPAGE_SFR DATA0A0H;SFRthatsuppliesuppermostaddressbyte;SFR的最高地址字節(jié); (most8051variantsuseP2asuppermostaddressbyte);(大多數(shù)8051變量要用P2的最高地址字節(jié));StandardSFRSymbols;標(biāo)準(zhǔn)SFR符號(hào)ACCDATA0E0HBDATA0F0HSPDATA81HDPLDATA82HDPHDATA83HNAME?C_STARTUP?C_C51STARTUPSEGMENTCODE7STACK SEGMENTIDATARSEG7STACKDS1EXTRNCODE(7C_START); 外部代碼(這個(gè)標(biāo)號(hào)將代表用戶程序的啟始地址)PUBLIC?C_STARTUP; 給外部使用的符號(hào)CSEGAT0; 在code段的〇地址處放以ド代碼(使用AT指令進(jìn)行絕對(duì)地址的定位)?C_STARTUP: LJMPSTARTUP1RSEG?C_C51STARTUP;以ド為用戶根據(jù)實(shí)驗(yàn)板的具體布設(shè)所做的配置區(qū)
STARTUP1:MOVWDTCN,#ODEH;//關(guān)看門狗MOVWDTCN,#OADH;MOVEMIOCF,#02CH;//選擇高端口模式,只用外部存儲(chǔ)器,EMIF工作在:〃地址/數(shù)據(jù)復(fù)用方式,/WR和/RD占用12個(gè)SYSCLK周期MOVEMIOTC,#03CH;〃地址建立Z保持時(shí)間為0.ALE髙/低脈寬占1個(gè)SYSCLK周期MOVP0MDOUT,#001H;〃將TXO,TX1設(shè)置為推拉輸出方式MOVP1MDOUT,#001H;MOVP3MDOUT,#02DH;//P3.5->LCD_RES,P3.3->LCD_REQ,P3.2->OE574,;//P3.0->OE574四位設(shè)置為推拉輸出方式;;//P3.4->LCD_BUSY,P3.1->PS2_DATA兩位設(shè)置為開漏輸出方式MOVP74OUT,#0FFH;〃將P4,P6,P5,P7U配置為推拉輸出方式MOVXBR0,#0DFH; 〃按照配置表進(jìn)行各個(gè)外設(shè)的配置MOVXBR1,#O1CH;MOVXBR2,#044H;IFIDATALEN〇0;如果長(zhǎng)度大于1則初始化IDATAMOVCLRRO,#IDATALEN-1AIDATALOOP:ENDIFMOVDJNZ@R0,AROJDATALOOPIFXDATALEN<>0;如果長(zhǎng)度大于1則初始化XDATAMOV DPTR,#XDATASTARTMOV R7,#LOW(XDATALEN)IF(LOW(XDATALEN))<>0;預(yù)置初始化時(shí)的外循環(huán)次數(shù)到R6MOV R6,#(HIGH(XDATALEN))+1ELSEMOV R6,#HIGH(XDATALEN)ENDIFCLR AXDATALOOP: MOVX@DPTR,AINC DPTRDJNZR7,XDATALOOPDJNZR6,XDATALOOPIFPPAGEENABLE<>0MOVPPAGE_SFR,#PPAGEENDIFIFPDA1ALEN〇0;如果長(zhǎng)度大于I則初始化PDATAMOV RO,#LOW(PDATASTART)MOV R7.#LOW(PDA1ALEN)CLR APDA1ALOOP: MOVX@RO,AINC RODJNZR7,PDATALOOPENDIFIFIBPSTACK〇0;SMALL模式下使用軍入函數(shù)時(shí)要設(shè)宜的堆棧EXTRNDATA(?C_1BP)MOV?C_IBP,#LOWIBPS1ACKTOPENDIFIFXBPSTACK<>0;COMPACT模式ド使用重入函數(shù)時(shí)要設(shè)苴的堆棧EXTRNDATA(?C_XBP)MOV ?C_XBP,#HIGHXBPSTACKTOPMOV ?C_XBP+1,#LOWXBPSTACKTOPENDIFIFPBPSTACK<>0;LARGE模式ド使用重入函數(shù)時(shí)要設(shè)置的堆棧EXTRNDATA(?C_PBP)MOV ?C_PBP,#LOWPBPSTACKTOPENDIFMOV SP,#?STACK-1;ThiscodeisrequiredifyouuseL51_BANK.A51withBankingMode4;如果你的程序使用了Mode4程序分組技術(shù)(BANKING)請(qǐng)后用卜.面的程序代碼;EXTRNCODE(?B_SWITCH0); CALL?B_SWITCH0;initbankmechanismtocodebank0;程序從第一個(gè)塊(bank。)開始執(zhí)行UMP?C_START;從這里跳到你的程序入口.實(shí)驗(yàn)方法與步驟(1)運(yùn)行uVision3(1)運(yùn)行uVision3開始啟動(dòng)開發(fā)環(huán)境,新建一個(gè)工程“Startup.code.uv2”,保存在一個(gè)新建的文件夾“Startup”中,并選擇芯片為“F020”。(2)加載Keil自帶的啟動(dòng)代碼,可以在新建工程后彈出的對(duì)話框中點(diǎn)擊“yes”直接加載,也可以在“Disk-Name\Keil\C51\LlB”的路徑中通過“Addfiles”加載,參看圖3-1:?后)Target1
?后)Target1
白白641+J圖3-1(3)右鍵單擊左側(cè)Target!進(jìn)行設(shè)置,設(shè)置包括設(shè)置時(shí)鐘為1M(便于查看運(yùn)行的大致步數(shù)),其它關(guān)于仿真的設(shè)置參看下圖,尤其注意取消“Runtomain?!边@一項(xiàng),如圖3-2:3jectWorkspace日Target1H3jectWorkspace日Target1H<~~SourceGroup1受!STARTUP.A51.startup」1E)inti=0x1234;2ichara[]="1234":3L4E)voidmain(void){}圖3-2新建一個(gè)文件,并保存為“Startup一do.C”,輸入“實(shí)驗(yàn)參考程序”項(xiàng)中程序清單3的程序。在Startup_code工程中添加剛オ建立的“.C”文件,再進(jìn)行編譯。(4)點(diǎn)擊仿真命令按鈕,進(jìn)入仿真界面,點(diǎn)擊查看匯編代碼按鈕在代碼窗出現(xiàn)匯編代碼。點(diǎn)擊“view”下的“memorywindow”,在屏幕的下方出現(xiàn)存儲(chǔ)區(qū)窗口,在Address欄內(nèi)
輸入:d:0,并回車,連續(xù)點(diǎn)擊0x00單元位置兩次(不是雙擊),在文字框中輸入01。這樣會(huì)失去看到內(nèi)存一個(gè)個(gè)被清零的機(jī)會(huì),但是卻省去了128次單擊。(5)點(diǎn)擊單步執(zhí)行按鈕,觀察執(zhí)行ー步之后,左側(cè)寄存器組與內(nèi)存“0x00-0x0e”単元的數(shù)值的變化,并與每ー步的匯編代碼結(jié)合起來分析運(yùn)行過程(注意:0的ASC碼是30)。如圖3-3所示address:|d:0 4D:OxOO:D:OxOE:D:OxlC:D:0x2A:D:0x38:D:0x46:D3OoooD:OxOO:D:OxOE:D:OxlC:D:0x2A:D:0x38:D:0x46:D3Oooo〇巨oooolooooooooooooooooooooOunuoooooooooooooooooooooooo433323〇〇OOOOOOOOOOOOOOOOOOOO〇〇〇〇nJOOOOOOOOOOOOOOOOOOOOOOOOO12|i二1234000000圖3-3如圖3?4所示可以幫助理解指令周期:圖3-4圖3-4.實(shí)驗(yàn)參考程序啟動(dòng)代碼實(shí)驗(yàn)所用的程序見程序清單3-2程序清單3-2inti=0x1234;chara[]="1234";voidmain(void){}相應(yīng)的STARTUP程序見Keil內(nèi)與實(shí)驗(yàn)原理分析項(xiàng)中程序清單3-1〇.思考嘗試在定義?個(gè)全局變量并將外部總線切換初始化代碼放在主程序中執(zhí)行,觀察外部總線切換前后變量值的改變。
3.2I/O口實(shí)驗(yàn).實(shí)驗(yàn)?zāi)康?1)熟悉對(duì)C8051fo20初始化的過程和方法(2)學(xué)會(huì)對(duì)C8051fo20的端U進(jìn)行操作的方法(3)學(xué)習(xí)硬件仿真的基本步驟.實(shí)驗(yàn)設(shè)備使用Windows2000/XP操作系統(tǒng)的PC機(jī),C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái),KeiluVision3開發(fā)環(huán)境,短路帽若干.實(shí)驗(yàn)內(nèi)容通過在kei!編寫ー個(gè)簡(jiǎn)單的用于控制C8051F020單片機(jī)的I/O的程序,來了解C8O51F單片機(jī)的初始化全過程,并能在仿真跟蹤程序的運(yùn)行過程,體會(huì)單片機(jī)指令的執(zhí)行。.實(shí)驗(yàn)原理(1)每個(gè)端口I/O引腳都可以被配置為推挽或漏極開路輸出。在標(biāo)準(zhǔn)8051中固定的“弱上拉”可以被總體禁止,這為低功耗應(yīng)用提供了進(jìn)ー步節(jié)電的能力。(2)引入數(shù)字交叉開關(guān),允許將內(nèi)部數(shù)字系統(tǒng)資源映射到P0、Pl、P2和P3的端口I/O引腳。如果用戶選用軟件進(jìn)行配置,請(qǐng)下載安裝ConfigAndConng2,安裝完后運(yùn)行:Config2,如圖3-5所示:ZhiyuanLogic騰訊軟件AnalyserSiliconLaboratorieseC8051FXXXIDE■Config圖ZhiyuanLogic騰訊軟件AnalyserSiliconLaboratorieseC8051FXXXIDE■Config圖3-5eTCP-IP配置向?qū)А鯱K5中文下載程序■U-PDC中文下載程序在彈出的對(duì)話框中選擇芯片為“020”,然后就可以“Peripherals”的下拉菜單中選擇需要配置的資源了(如圖3-6所示),這是最為簡(jiǎn)單有效的配置辦法,方便而且快速,推薦使用。
Config2-UntitledC8051F020FileOptionsPeripheralsViewHelp040PortI/OT一 」OscillatorsTimersPCAUARTsSMBusSPIADCsDACsEMIComparatorsVoltageReferenceResetSourcesInterruptskUntitledレ〃〃〃〃//Gener/////////#include//Initia//CallIvoidInit()//Emptyッ〃〃〃〃つFile//“〃〃〃〃Eordevice,/ourmainprogramResetAll圖3-6在C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)上常用的端口配置如圖3?7所示:圖3-7
(3)關(guān)于特殊功能寄存器的配置說明參看由“新華龍電子有限公司”發(fā)行的中文版《C8051F02X單片機(jī)數(shù)據(jù)手冊(cè)》,該手冊(cè)也可由網(wǎng)上下載獲得。(4)本次實(shí)驗(yàn)所用到的P5口在修改后的“STARTUP.A5ド中已經(jīng)被初始化為推挽輸出,因此可以在“STARTUP.A5ド’中將其修改為其它的輸出方式。.實(shí)驗(yàn)方法與步驟(1)將J11用短路帽進(jìn)行短接。(2)運(yùn)行Keil,新建一個(gè)工程文件,并單獨(dú)存放在某個(gè)文件夾中。選擇好芯片,添加啟動(dòng)代碼。(3)新建文件,并命名為“run」ed”,后綴名是“.C”,格程序清單4中的程序輸入。仔細(xì)閱讀該程序中關(guān)于初始化的子函數(shù),最好能用上文提到的配置軟件進(jìn)行配置,比較配置后得到的結(jié)果與實(shí)驗(yàn)所用源程序所用的配置的異同。最后編譯程序。(4)設(shè)置好仿真的參數(shù),這回要選擇硬件仿真,并且可以選中“gotomain{ド項(xiàng)。|A51 |A51 |BL51Locate|BL51MiseDebug|Utilities|Settings?*'Use:SiliconLaboratoriesC805▼]SettingsKeilMonitor_51DriverKeilISD51In-SystemDebugge:M0N390:DallasContiguousMoLPC900EPMEmulator/ProgrammST-uPSDULINKDriver〇mainO|7LoadInitiall.omainOjEdit.|1RestorInfineonXC800UUNKDriverADIMonitorDriverInfineonDASClientforXC80I.1Ed”.SiliconLaboratoriesC8051Fx:フBreakpoints“Toolbox|7WatchpointsフMemoryDispla:(5)點(diǎn)擊仿真命令按鈕后,等燒寫程序完畢,點(diǎn)擊運(yùn)行按鈕,觀察運(yùn)行結(jié)果。(6)選擇仿真為軟件仿真,按下圖所示,將P5口添加到觀察窗口1中在“Pe*Pherals,,下接菜單中打開P5ロ,單擊“即后,觀察“watches”中的P5的變化與“ParallelPort5”中的變化,找出對(duì)應(yīng)關(guān)系。如下圖所示:.程序清單程序清單3-3長(zhǎng)沙理工大學(xué)電子創(chuàng)新實(shí)驗(yàn)室* *** ケ件信息*文件名:run」ed*創(chuàng)建人:*最后修改日期:*描述:在keilv8.02中調(diào)度通過#include<c8051fD20.h>//SFR聲明#include<intrins.h>〃函數(shù)聲明voidInit_Device(void); 〃系統(tǒng)初始化voiddelay_ms(unsignedintcount);voidrun_led_left(void);?函數(shù)名稱:main*函數(shù)功能:主函數(shù)*輸入?yún)?shù):*輸出參數(shù):*說明:voidmain(void){unsignedcharled;Init_Device();P5=0x01;led=0x01;while(l)(delay_ms(1500);delay_ms(1500);led=_cror_(led,1);P5=led;)}/*******************************************************************************************函數(shù)名稱:delay_ms*函數(shù)功能:*輸入?yún)?shù):*輸出參數(shù):*說明:voiddelay_ms(unsignedintcount){unsignedintii,jj;fc)r(ii=0;ii<count;ii++)(for(jj=0;jj<250;jj++)(_nop_();_nop_();_nop_();_nop_();))}?函數(shù)名稱:Oscillator.Init*函數(shù)功能:系統(tǒng)時(shí)鐘初始化*輸入?yún)?shù):*輸出參數(shù):*說明:使用外部22.1184M晶振,使能時(shí)鐘丟失檢測(cè)voidOscillator_Init()//(inti=0;OSCXCN=0x67;for(i=0;i<3000;i++);//Wait1msforinitializationwhile((OSCXCN&0x80)==0);OSCICN=0x88;〃使用外部22.1184M晶振,使能時(shí)鐘丟失檢測(cè)}?函數(shù)名稱:Port」〇」nit*函數(shù)功能:IO口以及存儲(chǔ)器初始化*輸入?yún)?shù):*輸出參數(shù):*說明:voidPort」〇」nit()(P1MDOUT=0x01;〃設(shè)置Pl口為推挽輸出XBR0 =OxDF;〃按照配置表進(jìn)行各個(gè)外設(shè)的配置XBR1 =0xIC;XBR2=0x44;/?額外的配置請(qǐng)?jiān)诒拘形淖忠韵逻M(jìn)行配置并請(qǐng)加詳細(xì)注釋ッ/*?/}/******************************************************************************************?函數(shù)名稱:Init_Device*函數(shù)功能:初始化主函數(shù)*輸入?yún)?shù):*輸出參數(shù):*說明:*******************************************************************************************/voidInit_Device(void)//{Oscillator_Init();Port_IO_Init();}PART(2)以下程序請(qǐng)?jiān)贙eil的安裝目錄中C8O51FO2O.h上修改,添加到原文件最后即可,后續(xù)的實(shí)驗(yàn)都使用該修改后的文件,且以后不再提及:sfrl6DP =0x82;sfrl6TMR3RL=0x92;//datapointer//Timer3reloadvaluesfri6TMR3=0x94;sfr!6ADCO=Oxbe;sfrl6ADC0GT=0xc4;//Timer3counter//ADCOdata//ADCOgreaterthanwindowsfrl6ADC0LT =0xc6;sfrl6RCAP2 =Oxca;sfrl6T2 =Oxcc;sfr!6RCAP4 =0xe4;sfr!6T4 =0xf4;//ADCOlessthanwindow//Timer2capture/reload//Timer2//Timer4capture/reload//Timer4sfrl6DACO=0xd2;//DACOdatasfr16DACl=Oxd5;//DAC1data7.思考(1)修改程序,使8路LED一個(gè)接ー個(gè)的點(diǎn)亮最后全部點(diǎn)亮,再ー個(gè)接ー個(gè)的熄滅,直到完全熄滅,如此的循環(huán)運(yùn)行。(2)編寫ー個(gè)簡(jiǎn)單的計(jì)算程序,用8位LED顯示計(jì)算結(jié)果。3.3RAM基本操作.實(shí)驗(yàn)?zāi)康?1)學(xué)會(huì)配置與片內(nèi)XRAM相關(guān)的寄存器,編程讀寫片內(nèi)4KXRAM:(2)學(xué)會(huì)使用C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)上的32KByte外部RAM..實(shí)驗(yàn)設(shè)備使用Windows2000/XP操作系統(tǒng)的PC機(jī),C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái),KeiluVision3開發(fā)環(huán)境。.實(shí)驗(yàn)內(nèi)容本次實(shí)驗(yàn)主要針對(duì)單片機(jī)自帶的外部RAM進(jìn)行讀、寫操作。實(shí)驗(yàn)通過指針往XRAM一段連續(xù)的內(nèi)在單元中寫入'*0x01-0xl0”16個(gè)數(shù)據(jù),并且用指針將數(shù)據(jù)讀出與寫入的數(shù)據(jù)進(jìn)行比較,如果數(shù)據(jù)不相同則說明未能夠正常寫入,并觸發(fā)報(bào)警,通知用戶。在實(shí)驗(yàn)中因?yàn)榭偰苷懭?為了觀察檢驗(yàn)出錯(cuò)時(shí)的情況需要人為的在硬件仿真中修改內(nèi)存單元的內(nèi)容。.實(shí)驗(yàn)原理(1)標(biāo)準(zhǔn)的8051核只有256字節(jié)的RAM,在有比較復(fù)雜運(yùn)算的場(chǎng)合雖然可以通過合理的安排減少因數(shù)據(jù)存儲(chǔ)器容量小帶來的不便,但是始終不是很方便。在C8051F020單片機(jī)中有4096Byte的XRAM,可以保證足夠的數(shù)據(jù)存儲(chǔ)器供用戶使用,關(guān)于XRAM尋址的相關(guān)知識(shí)請(qǐng)參閱其它相關(guān)資料。在C51語言中通常是用“xdata”表明該變量存放在XRAM中,另C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái)上還帶有一片32KByte的外部數(shù)據(jù)存儲(chǔ)器,相關(guān)的配置說明及使用方法請(qǐng)閱讀《C8051F02X單片機(jī)數(shù)據(jù)手冊(cè)》中P129后的內(nèi)容。(2)程序中通過設(shè)置''EMI0CF1=0x20;”即規(guī)定了只使用片內(nèi)數(shù)據(jù)存儲(chǔ)器,設(shè)定了ALE高/低脈寬占1個(gè)SYSCLK周期,通過設(shè)置“EMI0TCI=0x6c;”來設(shè)定地址建立/保持時(shí)間占0個(gè)SYSCLK周期及/WR和/RD占12個(gè)SYSCLK周期。(3)硬件仿真中可以通過修改寄存器的值造成讀出出錯(cuò),從而引發(fā)報(bào)警,例如使與P5ロ相接的燈全亮。.實(shí)驗(yàn)方法與步驟(1)建立工程,設(shè)置工作及仿真環(huán)境,并檢查是否已經(jīng)選擇了USB上的U-EC5,因有時(shí)默認(rèn)為RS-232接口,會(huì)造成仿真時(shí)連接不到硬件的后果。(2)新建“.C”文件,將程序清單中的程序輸入該文件中保存,并在Keil的工程項(xiàng)目管理中添加該文件,注意此次實(shí)驗(yàn)使用標(biāo)準(zhǔn)的“STARTUP.A51",即默認(rèn)為使用片上的數(shù)據(jù)存儲(chǔ)器。(3)編譯當(dāng)前的工程,并點(diǎn)擊仿真命令按鈕,將代碼燒寫到目標(biāo)板中。(4)在如圖3-8所示位置斷點(diǎn),打開Keil的各監(jiān)視窗口,在“MemoryWindow”下的Addmss欄中輸入:“x:00”。點(diǎn)擊開始運(yùn)行按鈕,當(dāng)程序在第一個(gè)斷點(diǎn)停止時(shí),請(qǐng)注意觀察“MemoryWindow”中顯示的各內(nèi)在單元中的值。
45)46WrData=0x0;c47point=0x0000;48for(k=0;k<Ox10;k-H-)/?讀出比較*/49{50RdData二?point;/?讀數(shù)據(jù)*/51if(RdData!=WrData)/?判斷是否出錯(cuò)?/52(53P5=0x00;/?蛭鳴器響*/<=054delay*s(250);55P5=Oxff;/?蛭鳴器滅?/56}■57_nop_0;58WrData++;59point++;60_nop_0;61)62一nopー。:圖3-8(5)再次點(diǎn)擊運(yùn)行按鈕,“WrData”每加1,程序會(huì)在第二個(gè)斷點(diǎn)處暫停,注意觀察運(yùn)行過程中圖3?9中“WrData”的數(shù)值的變化。修改“MemoryWindow”中的“0x000000”單元中的值為P0”(連續(xù)點(diǎn)擊該位置兩次,再輸入數(shù)字),注意修改時(shí),“RdData”的數(shù)值最好是“0x03”。修改完后改用單步調(diào)試,注意當(dāng)程序指針指向“if(RdData!二Wrdata)”后P5口的變化。meValueaddress:x:0tfrData0x04meValueaddress:x:0tfrData0x04RdData0x000x0004X:0x000000X:0x00000CX:0x000018X:0x000024X:0x000030X:0x00003CX:0x000048000C1824303C4851D951D0112344〇〇C84〇C01123443FB73FB00123342EA62EA00123344D951D90012334I?I?!|\LocalsI?I?!|\Locals卜Watch#IハWab|\Memory#!入Memory#2人Merr圖3-96.程序清單程序清單3-4#inc1ude<c8()51K)20.h>//SFR#include<intrins.h>unsignedcharxdata*point;voidPORT_Init(void);voidOscillator_Init(void);?函數(shù)名稱:delay_ms*函數(shù)功能:延時(shí)
*輸入?yún)?shù):*輸出參數(shù):*說明:voiddelay_ms(unsignedcharcount)(unsignedcharii,jj;for(ii=0;ii<count;ii++)IforOj=0;jj<250;jj++)_nop_();}I?函數(shù)名稱:main*函數(shù)功能:主函數(shù)*輸入?yún)?shù):*輸出參數(shù):?說明:voidmain(void)unsignedchardataWrData,RdData;unsignedintk;WDTCN=Ox加;WDTCN=Oxad;Oscillator_Init();unsignedintk;WDTCN=Ox加;WDTCN=Oxad;Oscillator_Init();PORT_lnit();WrData=OxO;point=Ox(XXX);for(k=0;k<0x10;k++)(*point=WrData;point++;WrData++;)WrData=OxO;point=Ox(XKX);for(k=0;k<0x10;k++){RdData=*point;if(RdData!=WrData)(P5=0x00;/?無效看門狗?//*初始化端口*//?寫入數(shù)據(jù)從。開始?//?地址指針從0000開始?//?寫16個(gè)數(shù)據(jù)?//?寫數(shù)據(jù)到片內(nèi)數(shù)據(jù)存儲(chǔ)器(4KRAM)*//?讀出比較*//?讀數(shù)據(jù)?//?判斷是否出錯(cuò)?//?LED全亮?/delay_ms(250);/?LED全滅?//?LED全滅?/_nop_();WrData++;point++;_nop_();)_nop_();)/*************************************************************************************?函數(shù)名稱:PORT」nit*函數(shù)功能:初始化*輸入?yún)?shù):*輸出參數(shù):*說明:voidPORT_Init(void)(voidPORT_Init(void)(XBR2=0x40;EMIOCF1=0x20;EMIOTC1=0x6c;/?使能交叉開關(guān)和弱上拉?/產(chǎn)只用片內(nèi)數(shù)據(jù)存儲(chǔ)器,ALE髙ノ低脈寬占1個(gè)SYSCLK周期?//?地址建立Z保持時(shí)間占〇個(gè)SYSCLK周期/WR和/RD占12個(gè)SYSCLK周期?/P3MDOUT1=P3MDOUT1=0x20;/?使能P3.5推挽輸出?/*?函數(shù)名稱:Oscillatojlnit*函數(shù)功能:晶振初始化*輸入?yún)?shù):*輸出參數(shù):**說明:使用外部22.1184M晶振,使能時(shí)鐘丟失檢測(cè)voidOscillator_Init(){inti=0;OSCXCN=0x67;for(i=0;i<3000;i++);//Wait1msforinitializationwhile((OSCXCN&0x80)==0);OSCICN=0x88;〃使用外部22.1184M晶振,使能時(shí)鐘丟失檢測(cè)7.思考(1)如果要使用片外的RAM應(yīng)該怎么設(shè)置“EMIOCF”和“EMIOTC”?請(qǐng)自行修改程序再次完全實(shí)驗(yàn)。(2)為什么關(guān)于wEMIOCF"和“EMIOTC”的賦值要在“STARTUP.A51”中完成,如果不進(jìn)行這樣的動(dòng)作會(huì)有什么樣的情況發(fā)生?3.4定時(shí)器.實(shí)驗(yàn)?zāi)康?1)熟悉定時(shí)器/計(jì)數(shù)器的原理(2)練習(xí)定時(shí)/計(jì)數(shù)器的操作與編程(3)初步了解功能函數(shù)庫的封裝方法.實(shí)驗(yàn)設(shè)備;使用Windows2000/XP操作系統(tǒng)的PC機(jī),C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái),KeiluVision3開發(fā)環(huán)境.實(shí)驗(yàn)內(nèi)容;用定時(shí)器編寫的ー個(gè)跑馬燈程序,通過設(shè)定定時(shí)器的值,在定時(shí)器溢出產(chǎn)生中斷時(shí)再改變端口的電平即產(chǎn)生與第二個(gè)實(shí)驗(yàn)相似的流水燈效果。在編寫程序時(shí)為了節(jié)約時(shí)間,常將一些常用的功能函數(shù)做成一個(gè)個(gè)的庫文件,這樣當(dāng)程序中需要使用某項(xiàng)功能時(shí)便可以用一定つinclude”語句把做好的庫包含進(jìn)來,從而節(jié)省了大量的開發(fā)時(shí)間,這樣的程序也能便于維護(hù),在這次實(shí)驗(yàn)中將介紹這種方法。.實(shí)驗(yàn)原理;C8051F020的定時(shí)器3(T3)是ー個(gè)16位的定時(shí)器,它沒有計(jì)數(shù)器功能,由兩個(gè)8位的SFR組成:TMR3L和TMR3H。T3控制寄存器是(TMR3CN),它可以選擇時(shí)鐘的來源,和對(duì)時(shí)鐘的分頻系數(shù),并控制著T3的運(yùn)行與否。另位T3總是被配置為自動(dòng)重裝載的,用于保存至裝載的值的寄存器是TMR3RLL(Timer3reloadlow)和TMR3RLH。T3常用于啟動(dòng)AD進(jìn)行轉(zhuǎn)換,或SMBus定時(shí),也可以作為通用定時(shí)器使用。C語言提供了rinclude”命令用于實(shí)現(xiàn)“文件包含”操作,當(dāng)使用了該命令后,在編譯預(yù)處理時(shí),便完將被包含的文件按要求進(jìn)行處理,它相當(dāng)于使用工業(yè)上的標(biāo)準(zhǔn)零件。所謂的按要求,可以是指“條件編譯”,一般情況下“條件編譯”能夠在“標(biāo)識(shí)符”用“#include”命令定義之后對(duì)相應(yīng)某個(gè)程序段進(jìn)行編譯。具體的內(nèi)容請(qǐng)參閱譚浩強(qiáng)著的《C語言設(shè)計(jì)》ー書P194至P199的相關(guān)內(nèi)容。.實(shí)驗(yàn)方法與步驟;(1)建立工程,設(shè)置工作及仿真環(huán)境。(2)輸入下面的程序,分別存為“CPU」nit.C”,“CPU_Init.h”和“Timer3.C”(3)工程管理中加入保存的“Timer3.C”和“CPU」nit.C”兩個(gè)文件,右鍵單擊:“ProjectWorkspace”可以對(duì)自己的工程進(jìn)行一些說明文字式設(shè)定,如圖3-10所示,都設(shè)定好后就可以編譯了。
ProjectWorkspace -x叵ProjectWorkspace -x叵日定時(shí)器0Q主要文件
.STARTUP.A51
白國time3.cL]c8051fo20.hUlcpu_init.h0g|CPVJmt.cロc8051f020.h32voidTimer3_Init(intcounts)33 {M|34TMR3CN=0x00;35■36 TMR3RL = "counts;37 TMR3 = Oxffff;38 EIE2 1= 0x01;33 TMR3CN |= 0x04;■40}42**函數(shù)名稱:Timer3ISR43**函數(shù)功能:T3的中斷處理函數(shù)ProjectComponentsFolders/Extensions\BooksIProjectTargets:0|X| | |[groups: £]IXけ|?|Files:I定時(shí)器 I主要文件 丨STARTUP.A51time3.cCPU_Init.c圖3-10(4)加載程序,點(diǎn)擊仿真運(yùn)行。在圖3-11所示處設(shè)置ー個(gè)斷點(diǎn),當(dāng)程序運(yùn)行到斷點(diǎn)處時(shí)觀察P5U的輸出狀況。?函數(shù)名稱:Timer3ISR*函數(shù)功能:T3的中斷處理函數(shù)*箭入務(wù)數(shù):*輸出參數(shù):Port5? 7Port5? 7 Biti 0P5:|Clx7F廠!717voidTimer3_ISR(void{一H40UT:|0xFF171717J7]7171717'ins:|0x7F廠RWRRWstaticintcount;;staticinti=9,j=H40UT:|0xFF171717J7]7171717'ins:|0x7F廠RWRRWcount=0:圖3-11(5)修改自動(dòng)重裝載寄存器的值,觀察LED燈移動(dòng)的時(shí)間間隔的變化。體會(huì)定時(shí)器定時(shí)的原理,以及怎樣產(chǎn)生比較精確的定時(shí)時(shí)間。程序清單3-5**長(zhǎng)沙理工大學(xué)電子創(chuàng)新實(shí)驗(yàn)室6.程序清單程序清單3-5**長(zhǎng)沙理工大學(xué)電子創(chuàng)新實(shí)驗(yàn)室********************************************* 文件信息*文件名:run」ed*創(chuàng)建人:*最后修改日期:*描 述:在keilv8.02中調(diào)度通過〃函數(shù)聲明include<c8051f020.h>//SFR聲明?函數(shù)名稱:Port_IO_Init*函數(shù)功能:10口以及存儲(chǔ)器初始化*輸入?yún)?shù):*輸出參數(shù):*說明:voidPort_IO_Init(){/**部分配置設(shè)置已在對(duì)應(yīng)的STATUP.A51中設(shè)定,以在啟動(dòng)時(shí)自動(dòng)將XRAM切換到片外的32K中?*/P1MDOUT=OXFF;XBRO=OxDF;//按照配置表進(jìn)行各個(gè)外設(shè)的配置XBR1 =OxlC;XBR2 =0x44;//使能弱上拉/?額外的配置請(qǐng)?jiān)诒拘形淖忠韵逻M(jìn)行配置并請(qǐng)加詳細(xì)注釋?//* ?/*函數(shù)名稱:OscillatorInit*函數(shù)功能:晶振初始化*輸入?yún)?shù):*輸出參數(shù):**說明:voidOscillator_Init0 〃系統(tǒng)始終初始化(//inti=0;//OSCXCN=0x67;//for(i二〇;i<3000;i++);//Wait1msforinitialization//while((OSCXCN&0x80)=0);OSCICN =0x04;〃使用內(nèi)部2M時(shí)鐘,禁止時(shí)鐘丟失檢測(cè)*函數(shù)名稱:InterruptsInit*函數(shù)功能:中斷初始化*輸入?yún)?shù):無*輸出參數(shù):無*說明:voidInterrupts_Init(void)(//IE|=0x05J〃使能中斷〇和1//TCON=0x05:〃設(shè)置/INTO和/INT1均為邊沿中斷方式//IE|=0x80;〃使能全局中斷)?函數(shù)名稱:Init_Device*函數(shù)功能:調(diào)用以上初始化子模塊莖*輸入?yún)?shù):無*輸出參數(shù):無?說明:voidInit_Device(void)(Oscillator_Init();Port_I〇」nit();InterruptsInit0;)程序清單3-6#ifndef_CPU_Init_#define_CPU_Init_voidInit_Device(void);//CPU初始化主函數(shù)#endif程序清單3-7#include<C8051f020.h> //SFR聲明#include<CPU_Init.h>#defineSYSCLK2000000voidPORT_Init(void);voidTimer3_Init(intcounts);voidTimer3_ISR(void);unsignedintxdatap21ed|]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe|;?函數(shù)名稱:main*函數(shù)功能:主函數(shù)*輸入?yún)?shù):無*輸出參數(shù):無*說明:voidmain(void)(WDTCN=Oxde;WDTCN=Oxad;Init_Device();Timer3_Init(SYSCLK/12/10); /?調(diào)用初始化子函數(shù)?/EA=1; /*全能全局中斷?/while(I){))/*************************************************************************************?函數(shù)名稱:Timer3」nit*函數(shù)功能:T3初始化子函數(shù)*輸入?yún)?shù):counts:定時(shí)器重裝載的值*輸出參數(shù):無*說明:*************************************************************************************/voidTimer3_lnit(intcounts)TMR3CN=0x00;TMR3RL=-counts;TMR3=Oxffff;E正21=0x01;TMR3CN1=0x04;)?函數(shù)名稱:Timer3_ISR*函數(shù)功能:T3的中斷處理函數(shù)*輸入?yún)?shù):無*輸出參數(shù):無?說明:voidTimer3」SR(void)interrupt14(staticintcount;staticinti=9J=0;/?停止T3,并對(duì)TF3清零?//?使用的時(shí)幕是系統(tǒng)時(shí)鐘12分頻?//?設(shè)定定時(shí)器重裝載的值?//?立即裝入TMR3RL中的值?//?使能定時(shí)器中斷?//*Timer3開始運(yùn)行?/staticintled=()xff;TMR3CN&=?(0x80); /*對(duì)TF3清零操作*/count++;if(count==5)(count=0;P5=p21ed|j];led=led?l;i-Sj++;if(j=8)j=o;if(i=0)(i=9;led=0xff;}}7.思考(1)程序中自制程序庫的處理方式不是最有效的,但是動(dòng)作的確是比較簡(jiǎn)單的,而且也十分靈活,在后續(xù)的實(shí)驗(yàn)中會(huì)有部分的內(nèi)容用于自己將一長(zhǎng)篇的程序分解成若干個(gè)塊。(2)如果要用其它定時(shí)器完成相就的功能應(yīng)如何設(shè)置?3.5比較器.實(shí)驗(yàn)?zāi)康牧私釩8O51F的模擬部分(2)學(xué)會(huì)配置模擬比較器.實(shí)驗(yàn)設(shè)備使用Windows2000/XP操作系統(tǒng)的PC機(jī),C8051F單片機(jī)創(chuàng)新實(shí)驗(yàn)開發(fā)平臺(tái),KeiluVision3開發(fā)環(huán)境.實(shí)驗(yàn)內(nèi)容本次實(shí)驗(yàn)要求使用一個(gè)片上的模擬比較器,通過在比較器ー個(gè)輸入端上加一個(gè)參考電壓后將獨(dú)立按鍵接在另一個(gè)端,當(dāng)按動(dòng)按鍵就會(huì)在AV+到GND之間產(chǎn)生電平變換,比較器中斷觸發(fā)。所要注意的是:在按下鍵后(AV+toGND)觸發(fā)還是在松開按鍵后(GNDtoAV+)觸發(fā)。.實(shí)驗(yàn)原理(1)在C8051F020單片機(jī)內(nèi)部有兩個(gè)模擬比較器,每個(gè)比較器都有同相與反相兩個(gè)輸入端,每個(gè)比較器的輸出都可經(jīng)I/O交叉開關(guān)連接到外部引腳。每個(gè)比較器的回差電壓都可以通過對(duì)應(yīng)的比
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥物抗性寄生蟲機(jī)制
- 語言文字規(guī)范化知識(shí)競(jìng)賽試題及答案
- 2025年醫(yī)療廢物分類及管理試題附有答案
- 大學(xué)物理電磁學(xué)教學(xué)中的類比教學(xué)法研究報(bào)告教學(xué)研究課題報(bào)告
- 2025年中小學(xué)教師高級(jí)職稱專業(yè)水平能力試題庫(帶含答案)
- 服務(wù)貿(mào)易數(shù)字化創(chuàng)新
- 財(cái)務(wù)數(shù)字化轉(zhuǎn)型
- 初中化學(xué)綠色化學(xué)實(shí)驗(yàn)技術(shù)在環(huán)境教育中的應(yīng)用研究課題報(bào)告教學(xué)研究課題報(bào)告
- 編譯器實(shí)時(shí)性能優(yōu)化技術(shù)-洞察及研究
- 鋁土礦尾渣處理技術(shù)-洞察及研究
- 急性呼吸窘迫綜合征病例討論
- 畢業(yè)設(shè)計(jì)(論文)-自動(dòng)展開曬衣架設(shè)計(jì)
- T/CCMA 0164-2023工程機(jī)械電氣線路布局規(guī)范
- GB/T 43590.507-2025激光顯示器件第5-7部分:激光掃描顯示在散斑影響下的圖像質(zhì)量測(cè)試方法
- 2025四川眉山市國有資本投資運(yùn)營(yíng)集團(tuán)有限公司招聘50人筆試參考題庫附帶答案詳解
- 2024年山東濟(jì)南中考滿分作文《為了這份繁華》
- 2025年鐵嶺衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫新版
- 《煤礦安全生產(chǎn)責(zé)任制》培訓(xùn)課件2025
- 項(xiàng)目進(jìn)度跟進(jìn)及完成情況匯報(bào)總結(jié)報(bào)告
- 民間融資居間合同
- 2024-2025學(xué)年冀教版九年級(jí)數(shù)學(xué)上冊(cè)期末綜合試卷(含答案)
評(píng)論
0/150
提交評(píng)論