版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、沈陽理工大學(xué)學(xué)士學(xué)位論文第一章緒論11.1課題的背景及意義11.2 主要工作及論文結(jié)構(gòu)21.2.1 主要工作21.2.2本文結(jié)構(gòu)安排2第二章 硬件設(shè)計32.1 總體方案的設(shè)計32. 2電源電路52. 3時鐘電路62. 4 復(fù)位電路72. 5 鍵盤電路8第三章 系統(tǒng)所使用芯片的介紹103.1 tg12864液晶顯示器103.1.1 概述103.1.2 特性103.1.3 外形尺寸113.1.4 硬件說明113.2 sm8952單片機簡介163.2.1程序存儲器163.2.2 數(shù)據(jù)存儲器173.2.3特殊功能寄存器(sfr)173.2.4 sm8952單片機輸入輸出口203.2.5 sm8952定
2、時/計數(shù)器213.2.6看門狗定時器(wdt)223.2.7 sm8962的中斷系統(tǒng)22第四章 系統(tǒng)軟件設(shè)計244.1 單片機變成軟件的發(fā)展244.2 程序的設(shè)計254.2.1 主程序254.2.2波形發(fā)生程序264.2.3 鍵盤掃描程序284.2.4 顯示程序29第五章 系統(tǒng)調(diào)試305.1 硬件調(diào)試305.1.1 保證電源的穩(wěn)定可靠305.1.2 對受損芯片的判斷305.1.3 結(jié)合軟件檢查短路與虛焊305.2 軟件調(diào)試305.2.1 軟件的開發(fā)環(huán)境medwin315.2.2 程序調(diào)試315.2.3 調(diào)式結(jié)果32結(jié)論34致 謝35參考文獻36附錄37外文文獻及翻譯37第一章緒論1.1課題的背
3、景及意義目前工廠使用大量的非同步電氣設(shè)備,無功功率損耗變化大、不穩(wěn)定,如塑料工廠使用的擠塑機、注塑機,以及其他行業(yè)的升降機、沖壓機、電梯、破碎機、電焊機、礦山傳送帶等。負(fù)載具有快速或極快的無功功率變化,如汽車制造廠、船舶制造廠等點焊機、縫焊機、焊接機的無功補償。汽車制造廠點焊機負(fù)荷變化極為快速,并且引發(fā)大量的無功功率,總電壓值的減少會導(dǎo)致電焊質(zhì)量差并影響焊接的生產(chǎn)效率,穩(wěn)定電流能提高焊接質(zhì)量、消除閃爍,并充分地利用現(xiàn)有設(shè)備、減少基本費用開支。無功功率補償裝置在電子供電系統(tǒng)中所承擔(dān)的作用是提高電網(wǎng)的功率因數(shù),穩(wěn)定電流,降低供電變壓器及輸送線路的損耗,提高供電效率,改善供電環(huán)境。所以無功功率補償裝
4、置在電力供電系統(tǒng)中處在一個不可缺少的非常重要的位置。合理的選擇補償裝置,可以做到最大限度的減少網(wǎng)絡(luò)的損耗,使電網(wǎng)質(zhì)量提高。反之,如選擇或使用不當(dāng),可能造成供電系統(tǒng),電壓波動,諧波增大等諸多因素。7無功功率補償裝置按投切方式分類可分為延時投切方式和瞬時投切方式兩種。延時投切方式即人們熟稱的靜態(tài)補償方式。這種投切依靠于傳統(tǒng)的接觸器的動作,當(dāng)然用于投切電容的接觸器專用的,它具有抑制電容的涌流作用,延時投切的目的在于防止接觸器過于頻繁的動作時,電容器造成損壞,更重要的是防備電容不停的投切導(dǎo)致供電系統(tǒng)振蕩,這是很危險的。當(dāng)電網(wǎng)的負(fù)荷呈感性時,如電動機、電焊機等負(fù)載,這時電網(wǎng)的電流滯后電壓一個角度。當(dāng)負(fù)荷
5、呈容性時,如過量的補償裝置的控制器,這是電網(wǎng)的電流超前于電壓的一個角度,即功率因數(shù)超前或滯后是指電流與電壓的相位關(guān)系。通過補償裝置的控制器檢測供電系統(tǒng)的物理量,來決定電容器的投切,這個物理量可以是功率因數(shù)或無功電流或無功功率。下面就功率因數(shù)型舉例說明。當(dāng)這個物理量滿足要求時,如cos超前且0.98,滯后且0.95,在這個范圍內(nèi),此時控制器沒有控制信號發(fā)出,這時已投入的電容器組不退出,沒投入的電容器組也不投入。當(dāng)檢測到cos不滿足要求時,如cos滯后且0.95,那么將一組電容器投入,并繼續(xù)監(jiān)測cos如還不滿足要求,控制器則延時一段時間(延時時間可整定),再投入一組電容器,直到全部投入為止。當(dāng)檢測
6、到超前信號如cos0.98,即呈容性載荷時,那么控制器就逐一切除電容器組。要遵循的原則就是:先投入的那組電容器組在切除時就要先切除。綜上所述可知功率因數(shù)檢測的準(zhǔn)確與否是一臺功率因數(shù)補償器好壞與否的重要標(biāo)準(zhǔn)之一,本設(shè)計的目的就是為一臺功率因數(shù)補償器提供基準(zhǔn)功率因數(shù),從而測試率因數(shù)補償器檢測的功率因數(shù)是否準(zhǔn)確。1.2 主要工作及論文結(jié)構(gòu)1.2.1 主要工作本文基于目前功率因數(shù)補償技術(shù),提出了自己的設(shè)計方案,并作了可行性分析后,開發(fā)功率因數(shù)發(fā)生器。本人的具體工作如下:1設(shè)計出了功率因數(shù)發(fā)生器的整個硬件電路,包括顯示電路的設(shè)計、控制鍵盤的設(shè)計、電源電路的設(shè)計等,并進行原理圖的設(shè)計。2 基于medwin
7、的開發(fā)環(huán)境,進行了功率因數(shù)發(fā)生器的應(yīng)用軟件設(shè)計。3 在硬件軟件完成的基礎(chǔ)上進行了功率因數(shù)發(fā)生器的總調(diào)。1.2.2本文結(jié)構(gòu)安排本文是按照工程的進展順序來安排章節(jié)的內(nèi)容,一共分為五章,各章的內(nèi)容安排如下:第一章,對課題的研究意義和工作內(nèi)容進行了介紹。第二章,具體介紹了功率因數(shù)發(fā)生器的硬件設(shè)計及開發(fā)過程。第三章,具體介紹了應(yīng)用各芯片的功能。第四章,具體介紹了應(yīng)用軟件的開發(fā)過程。第五章,總體調(diào)試的過程46第二章 硬件設(shè)計2.1 總體方案的設(shè)計功率因數(shù)型無功功率補償控制器的信號采集過程基本上如圖2.1所示。首先強正弦電壓變送器電流變送器uacib檢波裝置弱正弦信號檢波裝置信號采集裝置方波信號方波信號cp
8、u液晶顯示屏控制電容投切弱正弦信號圖2.1 功率因數(shù)的采集交流電uac和ib分別經(jīng)過電壓變送器和電流變送器轉(zhuǎn)換成弱正弦交流電信號。然后經(jīng)過檢波裝置的處理弱正弦交流電信號就被轉(zhuǎn)換成了接近于方波信號。再然后這些接近于方波的信號電信號經(jīng)過無功功率補償控制器的信號采集裝置的處理傳送給了功功無率補償控制器的cpu 。cpu對這些信號進行處理和計算后,將采集到的功率因數(shù)的信息悉數(shù)顯示到液晶顯示器上并同時對功功無率補償控制器的電容投切裝置進行控制,使其能夠投切大小合適的電容。 綜上所述可知,要想得知一臺無功功率補償控制器測得的功率因數(shù)是否準(zhǔn)確那么就需要為其提供一臺能夠產(chǎn)生標(biāo)準(zhǔn)功率因數(shù)的儀器。跟據(jù)功率因數(shù)型無
9、功功率補償控制器的信號采集過程可知,要想檢測一臺無功功率補償控制器測得的功率因數(shù)是否準(zhǔn)確功率因數(shù)發(fā)生器產(chǎn)生的信號有三種。第一種方法是讓功率因數(shù)發(fā)生器產(chǎn)生強正弦交流信號讓無功功率補償控制器來檢測。這種方法的好處是比較直接,接近無功功率補償控制器真實工作時所采集的信號。其缺點是,產(chǎn)生標(biāo)準(zhǔn)的強正弦交流信號在技術(shù)上要求比較高,即使能夠制造那么它的成本也是相當(dāng)高昂的,所以我們不采用這種方法。第二種方法是讓功率因數(shù)發(fā)生器產(chǎn)生弱正弦交流信號讓無功功率補償控制器來檢測。這種方法的技術(shù)要求和成本同上一種方法相比雖然較低,但其成本總體上看仍然較高,所以仍不采用。最后一種一種方法是我們所采用的,即讓功率因數(shù)發(fā)生器產(chǎn)
10、生方波信號讓無功功率補償控制器來檢測。這種方法雖然簡單但十分有效,因為無功功率補償控制器的電壓變送器和電流變送器和檢波裝置對無功功率補償控制器檢測功率因數(shù)的精度的影響比較少,所以可以忽略 。這種方法不但簡單有效而且其成本也低較低只有幾十塊錢,所以確實可行。功率因數(shù)補償器的基本結(jié)構(gòu)如圖2.2控制鍵盤sm8952tg12864液晶顯示屏uacib 圖2.2 功率因數(shù)發(fā)生器該設(shè)備基本具備以下功能:1、由單片機產(chǎn)生兩列周期相同相位差可調(diào)的方波,用以表示uac和ib。2、能夠在tg12864液晶屏上顯示器顯示uac和ib的相角,uac和ib的波形,功率因數(shù)cos,uac超前 ib的時間。3、擁有一個23
11、鍵盤能對單片機產(chǎn)生的波形和和顯示器顯示的內(nèi)容進行控制。2. 2電源電路由于sm8952單片機需要為其提供電壓為5v的直流電來維持它正常工作,而通常我們所用的220v交流電,所以必須設(shè)計一個電源裝置將220v交流電轉(zhuǎn)換成單片機正常工作所需要的5v直流電 。具體電源電路詳見下圖2.3。圖2.3 電源電路220v交流電經(jīng)過小型變壓器轉(zhuǎn)換成7.5低壓交流電由ac1端和ac2端輸入,然后經(jīng)過整流電路整流。整流電路的任務(wù)是將ac1端和ac2端接入的正弦波交流電變換成直流電。完成這一電路主要是靠二極管的單向?qū)щ娮饔?,因此二極管是構(gòu)成整流電路的關(guān)鍵元件。在小功率整流電路中,常見的幾種整流電路有半波、全波、橋式
12、和倍壓整流電路。為了取得更好的整流效果,我們采用了橋式整流電路,整流器件我 們選擇整流芯片db107。8由于經(jīng)過整流裝置轉(zhuǎn)換成的直流電其脈動成分仍然較大所以在db107后加了一個電容c01用來消除電流中的脈動。然后在c01后面接了一個7805穩(wěn)壓模塊,經(jīng)過7805輸出的直流電便是單片機工作時所需要的5v直流電了。2. 3時鐘電路sm8952單片機的時鐘信號通常用兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。在引腳xtal1和xtal2外接晶體振蕩器(簡稱晶振)或陶瓷諧振器,就構(gòu)成了內(nèi)部振蕩方式。由于單片機內(nèi)部有一個高增益反相放大器,當(dāng)外接晶振后,就構(gòu)成了自激振蕩器并產(chǎn)生振蕩時鐘脈沖。內(nèi)部振蕩方
13、式的外部電路如下圖2.4示。 圖2.4 時鐘電路圖中,電容器c4,c3起穩(wěn)定振蕩頻率、快速起振的作用,其電容值一般在5-30pf。在此電路中我們選用22pf的電容。晶振頻率的典型值為12mhz,我們采用11.0592 mhz。內(nèi)部振蕩方式所得的時鐘情號比較穩(wěn)定,實用電路中使用較多。sm8952單片機的指令時序 時序是用定時單位來描述的,sm8952的時序單位有四個,它們分別是節(jié)拍、狀態(tài)、機器周期和指令周期,接下來我們分別加以說明。(1) 節(jié)拍與狀態(tài): 我們把振蕩脈沖的周期定義為節(jié)拍(為方便描述,用p表示),振蕩脈沖經(jīng)過二分頻后即得到整個單片機工作系統(tǒng)的時鐘信號,把時鐘信號的周期定義為狀態(tài)(用s
14、表示),這樣一個狀態(tài)就有兩個節(jié)拍,前半周期相應(yīng)的節(jié)拍我們定義為1(p1),后半周期對應(yīng)的節(jié)拍定義為2(p2)。(2) 機器周期: mcs-51有固定的機器周期,規(guī)定一個機器周期有6個狀態(tài),分別表示為s1-s6,而一個狀態(tài)包含兩個節(jié)拍,那么一個機器周期就有12個節(jié)拍,我們可以記著s1p1、s1p2s6p1、s6p2,一個機器周期共包含12個振蕩脈沖,即機器周期就是振蕩脈沖的12分頻,顯然,如果使用6mhz的時鐘頻率,一個機器周期就是2us,而如使用12mhz的時鐘頻率,一個機器周期就是1us。 (3)指令周期:執(zhí)行一條指令所需要的時間稱為指令周期,mcs-51的指令有單字節(jié)、雙字節(jié)和三字節(jié)的,所
15、以它們的指令周期不盡相同,也就是說它們所需的機器周期不相同,可能包括一到四個不等的機器周期。2. 4 復(fù)位電路當(dāng)sm8952系列單片機的復(fù)位引腳rst(全稱reset)出現(xiàn)2個機器周期以上的高電平時,單片機就執(zhí)行復(fù)位操作。如果rst持續(xù)為高電平,單片機就處于循環(huán)復(fù)位狀態(tài)。據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位和上電或開關(guān)復(fù)位。上電復(fù)位要求接通電源后,自動實現(xiàn)復(fù)位操作。常用的上電復(fù)位電路如下圖2.5示。電源接通后,單片機自動復(fù)位。 圖2.5復(fù)位電路根據(jù)實際操作的經(jīng)驗,c1=10 uf,r09=8.2k。單片機的復(fù)位操作使單片機進入初始化狀態(tài),其中包括使程序計數(shù)器pc0000h,這表明
16、程序從0000h地址單元開始執(zhí)行。單片機冷啟動后,片內(nèi)ram為隨機值,運行中的復(fù)位操作不改變片內(nèi)ram區(qū)中的內(nèi)容,21個特殊功能寄存器復(fù)位后的狀態(tài)為確定值,見表2.1。 記住一些特殊功能寄存器復(fù)位后的主要狀態(tài),對于了解單片機的初態(tài),減少應(yīng)用程序中的韌始化部分是十分必要的。表中符號*為隨機狀態(tài);a00h,表明累加器已被清零; 表2.1 殊功能寄存器復(fù)位后的主要狀態(tài)特殊功能寄存器初始狀態(tài)特殊功能寄存器初始狀態(tài) a00htmod 00hb 00htcon00hpsw00hth000hsp00htl000hdpl00hth100hdph00htl100hp0p3ffhsbuf不定ip*00000bsc
17、on00hie0*00000bpcon0*bpsw00h,表明選寄存器0組為工作寄存器組;sp07h,表明堆棧指針指向片內(nèi)ram 07h字節(jié)單元,根據(jù)堆棧操作的先加后壓法則,第一個被壓入的內(nèi)容寫入到08h單元中;po-p3ffh,表明已向各端口線寫入1,此時,各端口既可用于輸入又可用于輸出;ip00000b,表明各個中斷源處于低優(yōu)先級;ie000000b,表明各個中斷均被關(guān)斷;系統(tǒng)復(fù)位是任何微機系統(tǒng)執(zhí)行的第一步,使整個控制芯片回到默認(rèn)的硬件狀態(tài)下。單片機的復(fù)位是由reset引腳來控制的,此引腳與高電平相接超過24個振蕩周期后,單片機即進入芯片內(nèi)部復(fù)位狀態(tài),而且一直在此狀態(tài)下等待,直到reset
18、引腳轉(zhuǎn)為低電平后,才檢查ea引腳是高電平或低電平,若為高電平則執(zhí)行芯片內(nèi)部的程序代碼,若為低電平便會執(zhí)行外部程序。2. 5 鍵盤電路每個按鍵都有它的鍵值。矩陣的行線和列線分別通過兩并行接口和單片機通信。每個按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關(guān)的一端(列線)通過電阻接vcc,而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。圖2.6 鍵盤電路第
19、三章 系統(tǒng)所使用芯片的介紹3.1 tg12864液晶顯示器液晶顯示器(lcd)是一種被動式顯示器,由于它的功耗低、抗干擾能力強、顯示界面效果良好,因而在低功耗的單片機系統(tǒng)中大量使用。2 目前市面上的lcd顯示屏種類繁多,我們選了tg12864。其在電路中的應(yīng)用如圖3.1。 圖3.1 液晶顯示電路3.1.1 概述 tg12864是一種圖形點陣液晶顯示器。它主要采用動態(tài)驅(qū)動原理由行驅(qū)動控制器和列驅(qū)動器兩部分組成了128(列)64(行)的全點陣液晶顯示。此顯示器采用了cob的軟封裝方式,通過導(dǎo)電橡膠和壓框連接lcd,使其壽命長,連接可靠。3.1.2 特性1.工作電壓為+5v10% ,可自帶驅(qū)動lcd
20、所需的負(fù)電壓。2.全屏幕點陣,點陣數(shù)為128(列)64(行),可顯示8(/行)4(行)個(1616點陣)漢字,也可完成圖形,字符的顯示。3.與cpu接口采用5條位控制總線和8位并行數(shù)據(jù)總線輸入輸出,適配m6800系列時序。4.內(nèi)部有顯示數(shù)據(jù)鎖存器,自帶el驅(qū)動。5.簡單的操作指令顯示開關(guān)設(shè)置,顯示起始行設(shè)置,地址指針設(shè)置和數(shù)據(jù)讀/寫等指令。3.1.3 外形尺寸表3.1 主要外形尺寸項 目標(biāo) 準(zhǔn) 尺 寸單 位模 塊 體 積54.050.06.5mm定 位 尺 寸49.045.0mm視 域43.529mm行 列 點 陣 數(shù)12864dots點 距 離0.320.39mm點 大 小0.280.35m
21、m3.1.4 硬件說明1. 引腳特性 表3.2 引腳特性引腳號引腳名稱級 別引 腳 功 能 描 述1gnd0v電源地2vcc+5v電源電壓3vo0-10vlcd驅(qū)動負(fù)電壓,要求vdd-vo=13v4d/ih/l寄存器選擇信號5r/wh/l讀/寫操作選擇信號6eh/l使能信號7db0h/l八位三態(tài)并行數(shù)據(jù)總線8db19db210db311db412db513db614db715cs1h/l片選信號,當(dāng)cs1=h時,液晶左半屏顯示16cs2h/l片選信號,當(dāng)cs2=h時,液晶右半屏顯示17/resh/l復(fù)位信號,低有效18vee-10v輸出-10v的負(fù)電壓(單電源供電)19swh/lsw=h時,e
22、l能發(fā)光20ac60vel驅(qū)動的輸入交流信號2. 原理簡圖 圖3.2 原理簡圖 3. 主要各部分詳解圖3.3 詳解圖(1) 顯示數(shù)據(jù)ram(ddram) ddram(6488 bits)是存儲圖形顯示數(shù)據(jù)的。此ram的每一位數(shù)據(jù)對應(yīng)顯示面板上一個點的顯示(數(shù)據(jù)為h)與不顯示(數(shù)據(jù)為l)。(2) i/o緩沖器(db0db7) i/o緩沖器為雙向三態(tài)數(shù)據(jù)緩沖器。是lcm(液晶顯示模塊)內(nèi)部總線與mpu總線的結(jié)合部。其作用是將兩個不同時鐘下工作的系統(tǒng)連接起來,實現(xiàn)通訊。i/o緩沖器在片選信號cs有效狀態(tài)下,i/o緩沖器開放,實現(xiàn)lcm(液晶顯示模塊)與mpu之間的數(shù)據(jù)傳遞。當(dāng)片選信號為無效狀態(tài)時,i
23、/o緩沖器將中斷l(xiāng)cm(液晶顯示模塊)內(nèi)部總線與mpu數(shù)據(jù)總線的聯(lián)系,對外總線呈高阻狀態(tài),從而不影響mpu的其他數(shù)據(jù)操作功能。(3) 輸入寄存器輸入寄存器用于接收在mpu運行速度下傳送給lcm(液晶顯示模塊)的數(shù)據(jù)并將其鎖存在輸入寄存器內(nèi),其輸出將在lcm(液晶顯示模塊)內(nèi)部工作時鐘的運作下將數(shù)據(jù)寫入指令寄存器或顯示存儲器內(nèi)。(4) 輸出寄存器輸出寄存器用于暫存從顯示存儲器讀出的數(shù)據(jù),在mpu讀操作時,輸出寄存器將當(dāng)前鎖存的數(shù)據(jù)通過i/o緩沖器送入mpu數(shù)據(jù)總線上。(5) 指令寄存器指令寄存器用于接收mpu發(fā)來的指令代碼,通過譯碼將指令代碼置入相關(guān)的寄存器或觸發(fā)器內(nèi)。(6) 狀態(tài)字寄存器 狀態(tài)
24、字寄存器是lcm(液晶顯示模塊)與mpu通訊時唯一的“握手”信號。狀態(tài)字寄存器向mpu表示了lcm(液晶顯示模塊)當(dāng)前的工作狀態(tài)。尤其是狀態(tài)字中的“忙”標(biāo)志位是mpu在每次對lcm(液晶顯示模塊)訪問時必須要讀出判別的狀態(tài)位。當(dāng)處于“忙”標(biāo)志位時,i/o緩沖器被封鎖,此時mpu對lcm(液晶顯示模塊)的任何操作(除讀狀態(tài)字操作外)都將是無效的。(7) x地址寄存器x地址寄存器是一個三位頁地址寄存器,其輸出控制著ddram中8個頁面的選擇,也是控制著數(shù)據(jù)傳輸通道的八選一選擇器。x地址寄存器可以由mpu以指令形式設(shè)置。x地址寄存器沒有自動修改功能,所以要想轉(zhuǎn)換頁面需要重新設(shè)置x地址寄存器的內(nèi)容。(
25、8) y地址計數(shù)器y地址計數(shù)器是一個6位循環(huán)加一計數(shù)器。它管理某一頁面上的64個單元。y地址計數(shù)器可以由mpu以指令形式設(shè)置,它和頁地址指針結(jié)合唯一選通顯示存儲器的一個單元,y地址計數(shù)器具有自動加一功能。在顯示存儲器讀/寫操作后y地址計數(shù)將自動加一。當(dāng)計數(shù)器加至3fh后循環(huán)歸零再繼續(xù)加一。(9) z地址計數(shù)器z地址計數(shù)器是一個6位地址計數(shù)器,用于確定當(dāng)前顯示行的掃描地址。z地址計數(shù)器具有自動加一功能。它與行驅(qū)動器的行掃描輸出同步,選擇相應(yīng)的列驅(qū)動的數(shù)據(jù)輸出。(10) 顯示起始行寄存器顯示起始行寄存器是一個6位寄存器,它規(guī)定了顯示存儲器所對應(yīng)顯示屏上第一行的行號。該行的數(shù)據(jù)將作為顯示屏上第一行顯
26、示狀態(tài)的控制信號。3.2 sm8952單片機簡介3.2.1程序存儲器 一個微處理器能夠聰明地執(zhí)行某種任務(wù),除了它們強大的硬件外,還需要它們運行的軟件,其實微處理器并不聰明,它們只是完全按照人們預(yù)先編寫的程序而執(zhí)行之。那么設(shè)計人員編寫的程序就存放在微處理器的程序存儲器中。程序相當(dāng)于給微處理器處理問題的一系列命令。其實程序和數(shù)據(jù)一樣,都是由機器碼組成的代碼串。只是程序代碼則存放于程序存儲器中。 sm8952具有64kb程序存儲器尋址空間,它是用于存放用戶程序、數(shù)據(jù)和表格等信息。對于內(nèi)部無rom的8031單片機,它的程序存儲器必須外接,空間地址為64kb,此時單片機的端必須接地。強制cpu從外部程序
27、存儲器讀取程序。對于內(nèi)部有rom的sm8952等單片機,正常運行時,則需接高電平,使cpu先從內(nèi)部的程序存儲中讀取程序,當(dāng)pc值超過內(nèi)部rom的容量時,才會轉(zhuǎn)向外部的程序存儲器讀取程序。 sm8952片內(nèi)有8kb的程序存儲單元,其地址為0000h1fffh,單片機啟動復(fù)位后,程序計數(shù)器的內(nèi)容為0000h,所以系統(tǒng)將從0000h單元開始執(zhí)行程序。但在程序存儲中有些特殊的單元,這在使用中應(yīng)加以注意。 其中一組特殊是0000h0002h單元,系統(tǒng)復(fù)位后,pc為0000h,單片機從0000h單元開始執(zhí)行程序,如果程序不是從0000h單元開始,則應(yīng)在這三個單元中存放一條無條件轉(zhuǎn)移指令,讓cpu直接去執(zhí)行
28、用戶指定的程序。 另一組特殊單元是0003h002ah,這40個單元各有用途,它們被均勻地分為五段,它們的定義如表3.3表3.30003h000ah外部中斷0中斷地址區(qū)000bh0012h定時/計數(shù)器0中斷地址區(qū)0013h001ah外部中斷1中斷地址區(qū)001bh0022h定時/計數(shù)器1中斷地址區(qū)0023h002ah串行中斷地址區(qū)可見以上的40個單元是專門用于存放中斷處理程序的地址單元,中斷響應(yīng)后,按中斷的類型,自動轉(zhuǎn)到各自的中斷區(qū)去執(zhí)行程序。因此以上地址單元不能用于存放程序的其他內(nèi)容,只能存放中斷服務(wù)程序。但是通常情況下,每段只有8個地址單元是不能存下完整的中斷服務(wù)程序的,因而一般也在中斷響應(yīng)
29、的地址區(qū)安放一條無條件轉(zhuǎn)移指令,指向程序存儲器的其它真正存放中斷服務(wù)程序的空間去執(zhí)行,這樣中斷響應(yīng)后,cpu讀到這條轉(zhuǎn)移指令,便轉(zhuǎn)向其他地方去繼續(xù)執(zhí)行中斷服務(wù)程序。3.2.2 數(shù)據(jù)存儲器數(shù)據(jù)存儲器也稱為隨機存取數(shù)據(jù)存儲器。sm8952單片機的數(shù)據(jù)存儲器在物理上和邏輯上都分為兩個地址空間,一個是內(nèi)部數(shù)據(jù)存儲區(qū)和一個外部數(shù)據(jù)存儲區(qū)。sm8952內(nèi)部ram有256個字節(jié)的用戶數(shù)據(jù)存儲,它們是用于存放執(zhí)行的中間結(jié)果和過程數(shù)據(jù)的。sm8952的數(shù)據(jù)存儲器均可讀寫,部分單元還可以位尋址。 sm8952內(nèi)部ram共有256個單元,這256個單元共分為兩部分。其一是地址從00h7fh單元(共128個字節(jié))為用
30、戶數(shù)據(jù)ram。從80hffh地址單元(也是128個字節(jié))為特殊寄存器(sfr)單元。 在00h1fh共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以r0r7來命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為r0r7,那么在程序中怎么區(qū)分和使用它們呢?聰明的intel工程師們又安排了一個寄存器程序狀態(tài)字寄存器(psw)來管理它們,cpu只要定義這個寄存的psw的第3和第4位(rs0和rs1),即可選中這四組通用寄存器內(nèi)部ram的20h2fh單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對它們的位進行尋址。位尋址區(qū)共有16個字節(jié),128個位,位地址為00h7fh。cpu能
31、直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移,傳送和邏輯等操作。我們常稱sm8952具有布爾處理功能,布爾處理的存儲空間指的就是這些為尋址區(qū)。53.2.3特殊功能寄存器(sfr)特殊功能寄存器(sfr)也稱為專用寄存器,特殊功能寄存器反映了sm8952單片機的運行狀態(tài)。很多功能也通過特殊功能寄存器來定義和控制程序的執(zhí)行。 sm8952有21個特殊功能寄存器,它們被離散地分布在內(nèi)部ram的80hffh地址中,這些寄存的功能已作了專門的規(guī)定,用戶不能修改其結(jié)構(gòu)。我們對其主要的寄存器作一些簡單的介紹。1. 程序計數(shù)器pc(program counter) 程序計數(shù)器在物理上是獨立的,它
32、不屬于特殊內(nèi)部數(shù)據(jù)存儲器塊中。pc是一個16位的計數(shù)器,用于存放一條要執(zhí)行的指令地址,尋址范圍為64kb,pc有自動加1功能,即完成了一條指令的執(zhí)行后,其內(nèi)容自動加1。pc本身并沒有地址,因而不可尋址,用戶無法對它進行讀寫,但是可以通過轉(zhuǎn)移、調(diào)用、返回等指令改變其內(nèi)容,以控制程序按我們的要求去執(zhí)行。2.累加器acc(accumulator)(1)累加器a累加器a是一個最常用的專用寄存器,大部分單操作指令的一個操作數(shù)取自累加器,很多雙操作數(shù)指令中的一個操作數(shù)也取自累加器。加、減、乘、除法運算的指令,運算結(jié)果都存放于累加器a或ab累加器對中。大部分的數(shù)據(jù)操作都會通過累加器a進行,它形象于一個交通要
33、道,在程序比較復(fù)雜的運算中,累加器成了制約軟件效率的“瓶頸”,它的功能較多,地位也十分重要。以至于后來發(fā)展的單片機,有的集成了多累加器結(jié)構(gòu),或者使用寄存器陣列來代替累加器,即賦予更多寄存器以累加器的功能,目的是解決累加器的“交通堵塞”問題。提高單片機的軟件效率。3(2)寄存器b 寄存器b 在乘除法指令中,乘法指令中的兩個操作數(shù)分別取自累加器a和寄存器b,其結(jié)果存放于ab寄存器對中。除法指令中,被除數(shù)取自累加器a,除數(shù)取自寄存器b,結(jié)果商存放于累加器a,余數(shù)存放于寄存器b中。3.程序狀態(tài)字(program status word) 程序狀態(tài)字是一個8位寄存器,用于存放程序運行的狀態(tài)信息,這個寄存
34、器的一些位可由軟件設(shè)置,有些位則由硬件運行時自動設(shè)置的。寄存器的各位定義如下,其中psw.1是保留位,未使用。下表是它的功能說明,并對各個位的定義介紹如下:psw.7(cy) 進位標(biāo)志位,此位有兩個功能:一是存放執(zhí)行某寫算數(shù)運算時,存放進位標(biāo)志,可被硬件或軟件置位或清零。二是在位操作中作累加位使用。 psw.6(ac) 輔助進位標(biāo)志位,當(dāng)進行加、減運算時當(dāng)有低4位向高4位進位或借位時,ac置位,否則被清零。ac輔助進位位也常用于十進制調(diào)整。 psw.5(f0) 用戶標(biāo)志位,供用戶設(shè)置的標(biāo)志位。 psw.4、psw.3(rs1和 rs0) 寄存器組選擇位。psw.2(ov) 溢出標(biāo)志。帶符號加減
35、運算中,超出了累加器a所能表示的符號數(shù)有效范圍(-128+127)時,即產(chǎn)生溢出,ov=1。表明運算運算結(jié)果錯誤。如果ov=0,表明運算結(jié)果正確。 執(zhí)行加法指令add時,當(dāng)位6向位7進位,而位7不向c進位時,ov=1?;蛘呶?不向位7進位,而位7向c進位時,同樣ov=1。除法指令,乘積超過255時,ov=1。表面乘積在ab寄存器對中。若ov=0,則說明乘積沒有超過255,乘積只在累加器a中。 除法指令,ov=1,表示除數(shù)為0,運算不被執(zhí)行。否則ov=0。psw.0(p) 奇偶校驗位。聲明累加器a的奇偶性,每個指令周期都由硬件來置位或清零,若值為1的位數(shù)奇數(shù),則p置位,否則清零。 4 .數(shù)據(jù)指針
36、(dptr) 數(shù)據(jù)指針為16位寄存器,編程時,既可以按16位寄存器來使用,也可以按兩個8位寄存器來使用,即高位字節(jié)寄存器dph和低位字節(jié)dpl。 dptr主要是用來保存16位地址,當(dāng)對64kb外部數(shù)據(jù)存儲器尋址時,可作為間址寄存器使用,此時,使用如下兩條指令: movx a, dptr movx dptr, a 在訪問程序存儲器時,dptr可用來作基址寄存器,采用基址+變址尋址方式訪問程序存儲器,這條指令常用于讀取程序存儲器內(nèi)的表格數(shù)據(jù)。 movc a, a+dptr5 . 堆棧指針sp(stack pointer) 堆棧是一種數(shù)據(jù)結(jié)構(gòu),它是一個8位寄存器,它指示堆棧頂部在內(nèi)部ram中的位置。
37、系統(tǒng)復(fù)位后,sp的初始值為07h,使得堆棧實際上是從08h開始的。但我們從ram的結(jié)構(gòu)分布中可知,08h1fh隸屬13工作寄存器區(qū),若編程時需要用到這些數(shù)據(jù)單元,必須對堆棧指針sp進行初始化,原則上設(shè)在任何一個區(qū)域均可,但一般設(shè)在30h1fh之間較為適宜。 數(shù)據(jù)的寫入堆棧我們稱為入棧(push,有些文獻也稱作插入運算或壓入),從堆棧中取出數(shù)據(jù)稱為出棧(pop,也稱為刪除運算或彈出),堆棧的最主要特征是“后進先出”規(guī)則,也即最先入棧的數(shù)據(jù)放在堆棧的最底部,而最后入棧的數(shù)據(jù)放在棧的頂部,因此,最后入棧的數(shù)據(jù)出棧時則是最先的。這和我們往一個箱里存放書本一樣,需將最先放入箱底部的書取出,必須先取走最上
38、層的書籍。這個道理非常相似。1 那么堆棧有何用途呢?堆棧的設(shè)立是為了中斷操作和子程序的調(diào)用而用于保存數(shù)據(jù)的,即常說的斷點保護和現(xiàn)場保護。微處理器無論是在轉(zhuǎn)入子程序和中斷服務(wù)程序的執(zhí)行,執(zhí)行完后,還是要回到主程序中來,在轉(zhuǎn)入子程序和中斷服務(wù)程序前,必須先將現(xiàn)場的數(shù)據(jù)進行保存起來,否則返回時,cpu并不知道原來的程序執(zhí)行到哪一步,原來的中間結(jié)果如何?所以在轉(zhuǎn)入執(zhí)行其它子程序前,先將需要保存的數(shù)據(jù)壓入堆棧中保存。以備返回時,再復(fù)原當(dāng)時的數(shù)據(jù)。供主程序繼續(xù)執(zhí)行。轉(zhuǎn)入中斷服務(wù)程序或子程序時,需要保存的數(shù)據(jù)可能有若干個,都需要一一地保留。如果微處理器進行多重子程序或中斷服務(wù)程序嵌套,那么需保存的數(shù)據(jù)就更多
39、,這要求堆棧還需要有相當(dāng)?shù)娜萘?。否則會造成堆棧溢出,丟失應(yīng)備份的數(shù)據(jù)。輕者使運算和執(zhí)行結(jié)果錯誤,重則使整個程序紊亂。 sm8952的堆棧是在ram中開辟的,即堆棧要占據(jù)一定的ram存儲單元。同時mcs-51的堆??梢杂捎脩粼O(shè)置,sp的初始值不同,堆棧的位置則不一定,不同的設(shè)計人員,使用的堆棧區(qū)則不同,不同的應(yīng)用要求,堆棧要求的容量也有所不同。堆棧的操作只有兩種,即進棧和出棧,但不管是向堆棧寫入數(shù)據(jù)還是從堆棧中讀出數(shù)據(jù),都是對棧頂單元進行的,sp就是即時指示出棧頂?shù)奈恢茫吹刂罚?。在子程序調(diào)用和中斷服務(wù)程序響應(yīng)的開始和結(jié)束期間,cpu都是根據(jù)sp指示的地址與相應(yīng)的ram存儲單元交換數(shù)據(jù)。 堆棧的
40、操作有兩種方法:其一是自動方式,即在中斷服務(wù)程序響應(yīng)或子程序調(diào)用時,返回地址自動進棧。當(dāng)需要返回執(zhí)行主程序時,返回的地址自動交給pc,以保證程序從斷點處繼續(xù)執(zhí)行,這種方式是不需要編程人員干預(yù)的。第二種方式是人工指令方式,使用專有的堆棧操作指令進行進出棧操作,也只有兩條指令:進棧為push指令,在中斷服務(wù)程序或子程序調(diào)用時作為現(xiàn)場保護。出棧操作pop指令,用于子程序完成時,為主程序恢復(fù)現(xiàn)場。3.2.4 sm8952單片機輸入輸出口sm8952有4組8位i/o口:p0、p1、p2和p3口,p1、p2和p3為準(zhǔn)雙向口,p0口則為雙向三態(tài)輸入輸出口,下面我們分別介紹這幾個口線:1. p0口和p2口p0
41、口身兼兩職,既可作為地址總線,也可作為數(shù)據(jù)總線。p2口作為外部數(shù)據(jù)存儲器或程序存儲器的地址總線的高8位輸出口ab8-ab15,p0口由ale選通作為地址總線的低8位輸出口ab0-ab7。外部的程序存儲器由psen信號選通,數(shù)據(jù)存儲器則由wr和rd讀寫信號選通,因為216=64k,所以sm8952最大可外接64kb的程序存儲器和數(shù)據(jù)存儲器。2.p1口 p1口為8位準(zhǔn)雙向口,每一位均可單獨定義為輸入或輸出口3.p3口 p3口為準(zhǔn)雙向口,為適應(yīng)引腳的第二功能的需要,增加了第二功能控制邏輯,在真正的應(yīng)用電路中,第二功能顯得更為重要。由于第二功能信號有輸入輸出兩種情況,我們分別加以說明。 p3口的輸入輸
42、出及p3口鎖存器、中斷、定時/計數(shù)器、串行口和特殊功能寄存器有關(guān),p3口的第一功能和p1口一樣可作為輸入輸出端口,同樣具有字節(jié)操作和位操作兩種方式,在位操作模式下,每一位均可定義為輸入或輸出。 我們著重討論p3口的第二功能,p3口的第二功能各管腳定義如下:(1)p3.0 串行輸入口(rxd)(2)p3.1 串行輸出口(txd)(3)p3.2 外中斷0(int0)(4)p3.3 外中斷1(int1)(5)p3.4 定時/計數(shù)器0的外部輸入口(t0)(6)p3.5 定時/計數(shù)器1的外部輸入口(t1)(7)p3.6 外部數(shù)據(jù)存儲器寫選通(wr)(8)p3.7 外部數(shù)據(jù)存儲器讀選通(rd) 對于第二功
43、能為輸出引腳,當(dāng)作i/o口使用時,第二功能信號線應(yīng)保持高電平,與非門開通,以維持從鎖存器到輸出口數(shù)據(jù)輸出通路暢通無阻。而當(dāng)作第二功能口線使用時,該位的鎖存器置高電平,使與非門對第二功能信號的輸出是暢通的,從而實現(xiàn)第二功能信號的輸出。對于第二功能為輸入的信號引腳,在口線上的輸入通路增設(shè)了一個緩沖器,輸入的第二功能信號即從這個緩沖器的輸出端取得。而作為i/o口線輸入端時,取自三態(tài)緩沖器的輸出端。這樣,不管是作為輸入口使用還是第二功能信號輸入,輸出電路中的鎖存器輸出和第二功能輸出信號線均應(yīng)置“1”。43.2.5 sm8952定時/計數(shù)器sm8952的單片機內(nèi)有三個16位可編程的定時/計數(shù)器,它們具有
44、四種工作方式,其控制字和狀態(tài)均在相應(yīng)的特殊功能寄存器中,通過對控制寄存器的編程,就可方便地選擇適當(dāng)?shù)墓ぷ鞣绞健?3.2.6看門狗定時器(wdt)看門狗定時器(wdt)是1 個16 位自運行計數(shù)器在計數(shù)器,溢出時會產(chǎn)生復(fù)位信號。wdt 對那些易受噪聲干擾、電壓波動或放電現(xiàn)象影響的系統(tǒng)很有用在程序跑飛或死機的情況下,wdt 可以使用戶程序脫離不正常狀態(tài)。wdt不同于sm8952 系統(tǒng)的定時器0、 定時器1 和定時器2 ,通過軟件周期性的清除wdt 計數(shù)器的值可以防止wdt 產(chǎn)生復(fù)位信號。sm8952 wdt可以對基準(zhǔn)時鐘源選擇分頻輸入要選擇分頻輸入就要相應(yīng)地設(shè)置wdt 控制寄存器(wdtc)的位2
45、位1和位0的值。置位wdt 的位7 (wdte) 即可使能wdt wdte 位置1 后16 位計數(shù)器根據(jù)ps2 、ps1、ps0 所確定的時鐘輸入開始工作。計數(shù)器溢出時會產(chǎn)生復(fù)位信號,此時wdt 的wdte 位會被清零,另外硬件復(fù)位也可以將wdte 清零置位wdt 的位5(clear)可以復(fù)位wdt, 同時清除計數(shù)器的內(nèi)容使計數(shù)器重新開始計數(shù)。3.2.7 sm8962的中斷系統(tǒng) 中斷這個概念比較抽象,其實單片機的處理系統(tǒng)與人的一般思維有著許多異曲同工之妙,在日常生活和工作中有很多類似的情況。假如某人正在上班,例如是編譯資料,這時侯電話鈴響了,此人在書本上做個記號(以記下他現(xiàn)在正編譯到某某頁),
46、然后與 對方通電話,而此時恰好有客人到訪,他先停下通電話,與客人說幾句話,叫客人侯,然后回頭繼續(xù)通完電話,再與客人談話。談話完畢,送走客人,繼續(xù)你的資料編譯工作。這就是日常生活和工作中的中斷現(xiàn)象,類似的情況還有很多,從編譯資料到接電話是第一次中斷,通電話的過程中引有客人到訪,這是第二次中斷,即在中斷的過程中又出現(xiàn)第二次中斷,這就是我們常說的中斷嵌套。處理完第二個中斷任務(wù)后,回頭處理第一個中斷,第一個中斷完成后,再繼續(xù)你原先的主要工作。 為什么會出現(xiàn)這樣的中斷呢?道理很簡單,人非三頭六臂,人只有一個腦袋,在一種特定的時間內(nèi),可能會面對著兩、三甚至更多的任務(wù)。但一個人又不可能在同一時間去完成多樣任
47、務(wù),因此你只能采分析任務(wù)的輕重緩急,采用中斷的方法穿插去完成它們。那么這種情況對于單片機中的中央處理器也是如此,單片機中cpu只有一個,但在同一時間內(nèi)可能會面臨著處理很多任務(wù)的情況,如運行主程序、數(shù)據(jù)的輸入和輸出,定時/和計數(shù)時間已到要處理、可能還有一些外部的更重要的中斷請求要先處理。此時也得象人的思維一樣停下某一樣(或幾樣)工作先去完成一些緊急任務(wù)的中斷方法。這樣的一樣處理方法上升到計算機理論,就是一個資源面對多項任務(wù)的處理方式,由于資源有限,面對多項任務(wù)同時要處理時,就會出現(xiàn)資源競爭的現(xiàn)象。中斷技術(shù)就是為了解決資源競爭的一個可行的方法,采用中斷技術(shù)可多項任務(wù)共享一個資源,所以有些文獻也稱中
48、斷技術(shù)是一種資源共享技術(shù)。 cpu響應(yīng)中斷請求后,就立即轉(zhuǎn)入執(zhí)行中斷服務(wù)程序。不同的中斷源、不同的中要求可能有不同的中斷處理方但它們的處理流程一般都如下所述。1.現(xiàn)場的保護和現(xiàn)場恢復(fù)中斷是在執(zhí)行其它任務(wù)的過程中轉(zhuǎn)去執(zhí)行臨時的任務(wù),為了在執(zhí)行完中斷服務(wù)程序后,回頭執(zhí)行原先的程序時,知道程序原來在何處打斷的,各有關(guān)寄存器的內(nèi)容如何,就必須在轉(zhuǎn)入執(zhí)行中斷服務(wù)程序前,將這些內(nèi)容和狀態(tài)進行備份即保護現(xiàn)場。就象文章開頭舉的例子,在看書時,電話玲響需傳去接電話時,必須在書本上做個記號,以便在接完電話后回來看書時,知道從哪些內(nèi)容繼續(xù)往下看。計算機的中斷處理方法也如此,中斷開始前需將個有關(guān)寄存器的內(nèi)容壓入堆棧進
49、行保存,以便在恢復(fù)原來程序時使用。中斷服務(wù)程序完成后,繼續(xù)執(zhí)行原先的程序,就需把保存的現(xiàn)場內(nèi)容從堆棧中彈出,恢復(fù)積存器和存儲單元的原有內(nèi)容,這就是現(xiàn)場恢復(fù)。如果在執(zhí)行中斷服務(wù)時不是按上述方法進行現(xiàn)場保護和恢復(fù)現(xiàn)場,就會是程序運行紊亂,程序跑飛,自然使單片機不能正常工作。2.中斷的打開和中斷的關(guān)閉在中斷處理進行過程中,可能又有新的中斷請求到來,這里規(guī)定,現(xiàn)場保護和現(xiàn)場恢復(fù)的操作是不允許打擾的,否則保護和恢復(fù)的過程就可能使數(shù)據(jù)出錯,為此在進行現(xiàn)場保護和現(xiàn)場恢復(fù)的過程中,必須關(guān)閉總中斷,屏蔽其它所有的中斷,待這個操作完成后再打開總中斷,以便實現(xiàn)中斷嵌套。3.中斷服務(wù)程序既然有中斷產(chǎn)生,就必然有其具體
50、的需執(zhí)行的任務(wù),中斷服務(wù)程序就是執(zhí)行中斷處理的具體內(nèi)容,一般以子程序的形式出現(xiàn),所有的中斷都要轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,進行中斷服務(wù)。4.中斷的返回執(zhí)行完中斷服務(wù)程序后,必然要返回,中斷返回就是被程序運行從中斷服務(wù)程序轉(zhuǎn)回到原工作程序上來。在單片機中,中斷返回是通過一條專門的指令實現(xiàn)的,自然這條指令是中斷服務(wù)程序的最后一條指令。第四章 系統(tǒng)軟件設(shè)計4.1 單片機變成軟件的發(fā)展軟件系統(tǒng)設(shè)計是整個檢測系統(tǒng)設(shè)計至關(guān)重要的組成部分,軟件部分設(shè)計的好壞,直接關(guān)系到整個系統(tǒng)功能實現(xiàn)和運行的可靠性。隨著計算機應(yīng)用的不斷推廣,計算機軟件的設(shè)計也發(fā)生了巨大的變化,程序設(shè)計方法也在不斷進步、更新,程序設(shè)計語言也從初期
51、的機器語言到用符號表示的匯編語言以至發(fā)展到高級語言。8051芯片的派生門類特別多(達(dá)到了上百種之多)sm 8952就是其中的一種。而c語言對于它們的每一個硬件資源又無一例外地要能進行操作。這些都是過去以mpu為基礎(chǔ)的c語言所沒有的。經(jīng)過keil/franklin、archmeades、iar、bso/tasking等公司艱若不懈的努力,終于于90年代開始而趨成熟,成為專業(yè)化的mcu高級語言了。過去長期困擾人們的所謂“高級語言產(chǎn)生代碼太長,運行速度太慢,因此不適合單片機使用”的致使缺點已被大幅度地克服。目前,8051上的c語言的代碼長度,已經(jīng)做到了匯編水平的1.21.5倍。4k字節(jié)以上的程度,c
52、語言的優(yōu)勢更能得到發(fā)揮。至于執(zhí)行速度的問題,只要有好的仿真器的幫助,找出關(guān)鍵代碼,進一步用人工優(yōu)化,就可很簡單地達(dá)到十分美滿的程度。如果談到開發(fā)速度、軟件質(zhì)量、結(jié)構(gòu)嚴(yán)謹(jǐn)、程序堅固等方面的話,則c語言的完美絕非匯編語言編程所可比擬的。今天,確實已經(jīng)到mcu開發(fā)人員拿起c語言利器的時候了。下面結(jié)合sm8952單片機介紹單片機c語言的優(yōu)越性:不懂得單片機的指令集,也能夠編寫完美的單片機程序;無須懂得單片機的具體硬件,也能夠編出符合硬件實際的專業(yè)水平的程序;不同函數(shù)的數(shù)據(jù)實行覆蓋,有效利用片上有限的ram空間;程序具有堅固性:數(shù)據(jù)被破壞是導(dǎo)致程序運行異常的重要因素。c語言對數(shù)據(jù)進行了許多專業(yè)性的處理,
53、避免了運行中間非異步的破壞;c語言提供復(fù)雜的數(shù)據(jù)類型(數(shù)組、結(jié)構(gòu)、聯(lián)合、枚舉、指針等),極大地增強了程序處理能力和靈活性;提供auto、static、const等存儲類型和專門針對單片機的data、idata、pdata、xdata、code等存儲類型,自動為變量合理地分配地址;提供small、compact、large等編譯模式,以適應(yīng)片上存儲器的大??;中斷服務(wù)程序的現(xiàn)場保護和恢復(fù),中斷向量表的填寫,是直接與單片機相關(guān)的,都由c編譯器代辦;提供常用的標(biāo)準(zhǔn)函數(shù)庫,以供用戶直接使用;頭文件中定義宏、說明復(fù)雜數(shù)據(jù)類型和函數(shù)原型,有利于程序的移植和支持單片機的系列化產(chǎn)品的開發(fā);有嚴(yán)格的句法檢查,錯誤很少,可容易地在高級語言的水平上迅速地被排掉;可方便地接受多種實用程序的服務(wù):如片上資源的初始化有專門的實用程序自動生成;再如,有實時多任務(wù)操作系統(tǒng)可調(diào)度多道任務(wù),簡化用戶編程,提高運行的安全性等等。4.2 程序的設(shè)計4.2.1 主程序通過應(yīng)用要求來分析功率因數(shù)發(fā)生器所使用的程序主要可以分為以下幾個部分:顯示程序;鍵盤輸入程序;波形發(fā)生程序。軟件設(shè)計的主程序流程圖如圖4.1所示在整個程序中,每個部分都有其具體的明確的任務(wù),分別編制、調(diào)試后再把它們連接在
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度道路運輸安全責(zé)任書與保障協(xié)議3篇
- 二零二五年環(huán)境與職業(yè)健康安全風(fēng)險防范協(xié)議9篇
- 2025年粵教新版選擇性必修1歷史上冊月考試卷
- 2025年華師大新版九年級化學(xué)上冊月考試卷含答案
- 2025年上教版八年級化學(xué)下冊階段測試試卷
- 2025年華師大版八年級英語下冊月考試卷
- 2025年滬科版選修3化學(xué)下冊月考試卷
- 2024年度物流倉儲代運營服務(wù)合同3篇
- 2025年岳麓版八年級數(shù)學(xué)上冊階段測試試卷含答案
- 二零二五年度環(huán)保節(jié)能合伙經(jīng)營退伙協(xié)議書3篇
- 分居聲明告知書范本
- 新概念英語第一冊25-50課測試卷
- DL T774-2015規(guī)程試題庫(含答案)
- 采購合同采購合同采購合同
- 云南省律師服務(wù)收費管理辦法及標(biāo)準(zhǔn)
- 華為C語言通用編程規(guī)范
- 搞笑詩朗誦《生活》4人
- 團建活動滿意度調(diào)查問卷
- 數(shù)獨題目難度系數(shù)3級共100題后附參考答案
- 齊魯醫(yī)學(xué)數(shù)字疼痛評分表
- GB∕T 7588.1-2020 電梯制造與安裝安全規(guī)范 第1部分:乘客電梯和載貨電梯
評論
0/150
提交評論