專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

怎樣分析單片機(jī)程序

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年04月17日   【字體:

            要:分析單片機(jī)程序是為編寫(xiě)程序做準(zhǔn)備,包括對(duì)硬件電路和軟件功能的分析,提出了實(shí)用的分析方法,并總結(jié)出分析程序的一般步驟和應(yīng)注意的問(wèn)題。

    設(shè)計(jì)單片機(jī)程序不是從零開(kāi)始,而是先對(duì)已有的相關(guān)程序進(jìn)行閱讀分析。分析程序是設(shè)計(jì)、修改、優(yōu)化、維護(hù)的重要步驟。因此,掌握單片機(jī)程序的分析方法是非常必要的。

    1 詳細(xì)閱讀設(shè)備使用說(shuō)明書(shū)

    可投產(chǎn)(使用)的單片機(jī)系統(tǒng)都附有使用說(shuō)明書(shū)(手冊(cè)),它介紹了該產(chǎn)品的(工作原理)技術(shù)指標(biāo)、使用步驟、操作方法和注意事項(xiàng),同時(shí)還有系統(tǒng)的有關(guān)狀態(tài)、顯示、報(bào)警等信息。這為閱讀程序、劃分模塊分析功能提供了極大的幫助。若有該系統(tǒng),應(yīng)對(duì)其反復(fù)操作,熟悉使用步驟和操作方法。操作時(shí)應(yīng)全面詳細(xì),確保程序和外圍電路的每一部分都執(zhí)行過(guò)。

   2 了解單片機(jī)芯片型號(hào)及功能

   目前,具有代表性的單片計(jì)算機(jī)有:8位單片機(jī),即51系列;16位單片機(jī),即96系列;32位嵌入式微處理器,即X86結(jié)構(gòu)的i386EX系列;超低功耗i486系列和RISC結(jié)構(gòu)的i960系列等。由于MCS—51系列單片機(jī)具有集成度高,處理功能強(qiáng),可*性好,價(jià)格低廉等優(yōu)點(diǎn),它在智能儀器儀表、控制工程、測(cè)試技術(shù)等領(lǐng)域得到了廣泛的應(yīng)用。繁多的單片機(jī)品種,使閱讀者必須首先知道該電路中具體使用了哪一種單片機(jī)芯片,弄清其引腳功能、存儲(chǔ)器結(jié)構(gòu)、指令系統(tǒng)等。

   3 分析掌握外圍電路各部分的作用

   在單片機(jī)應(yīng)用系統(tǒng)中,硬件是基礎(chǔ),軟件的功能是對(duì)硬件進(jìn)行合理調(diào)配和使用。在控制系統(tǒng)的開(kāi)發(fā)中,軟件和硬件設(shè)計(jì)基本上是同步進(jìn)行的。

    3.1 單片機(jī)常用的外圍電路

    單片機(jī)常用的外圍電路包括程序擴(kuò)展電路、內(nèi)存擴(kuò)展電路、并行口擴(kuò)展電路、Watchdog電路、串行通訊電平轉(zhuǎn)換電路、LED(LCD)數(shù)碼顯示電路、鍵盤(pán)電路、A/D轉(zhuǎn)換電路、D/A轉(zhuǎn)化電路、指示燈電路等,同時(shí)還必須明確該電路的實(shí)現(xiàn)方式。單片機(jī)外圍電路簡(jiǎn)圖見(jiàn)圖1。

    3.2 其他電路及連線

    為了阻抗匹配,增設(shè)驅(qū)動(dòng)電路,驅(qū)動(dòng)大電流電路時(shí)采用的光電隔離電路,CMOS電路多余輸入端的處理(接正電源或接地),地線系統(tǒng)(系統(tǒng)地,機(jī)殼地或屏蔽地,數(shù)字地,模擬地)的安排,信號(hào)線包括讀、寫(xiě)信號(hào)線、片選信號(hào)線、時(shí)鐘信號(hào)線、讀選通信號(hào)(PSEN)、地址鎖存信號(hào)(ALE)、復(fù)位信號(hào)等的連接及I/O地址的分配,掌握這些對(duì)程序的閱讀至關(guān)重要。

    4 閱讀分析程序

    4.1 單片機(jī)程序所用語(yǔ)言

    由于匯編語(yǔ)言精煉高效,小型的單片機(jī)程序常采用匯編語(yǔ)言。而C語(yǔ)言既有高級(jí)語(yǔ)言的各種特點(diǎn),又可對(duì)硬件進(jìn)行操作,進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)。對(duì)MCS—51單片機(jī),目前采用比較多的有ASM51,C51等。此外,還有匯編語(yǔ)言與BASIC語(yǔ)言混編的單片機(jī)程序。

    4.2 單片機(jī)程序的基本結(jié)構(gòu)與組成

    在整個(gè)單片機(jī)程序中初始化、自檢部分安排在單片機(jī)程序的開(kāi)始,隨后便是主(監(jiān)控)程序,各模塊和子程序,此外還有字形表及數(shù)據(jù)表等。

     4.2.1 傳統(tǒng)的程序結(jié)構(gòu)

     單片機(jī)程序一般采用模塊化設(shè)計(jì)。其中心思想是將一個(gè)功能較多、程序量較大的程序整體按其功能劃分成若干個(gè)相對(duì)獨(dú)立的程序段。通常把控制單片機(jī)應(yīng)用系統(tǒng)工作的整個(gè)程序稱(chēng)為監(jiān)控程序。監(jiān)控程序按模塊分為監(jiān)控主程序和命令處理子程序。命令處理子程序完成各種命令所規(guī)定的具體操作,它按各種命令再分為不同的子程序模塊。它的編程方法與功能要求與系統(tǒng)硬件密切相關(guān),沒(méi)有通用的方法。而監(jiān)控主程序是接受和分析來(lái)自鍵盤(pán)的命令,進(jìn)而把控制轉(zhuǎn)到相應(yīng)的處理子程序的入口,起引導(dǎo)作用。

     在一鍵多義的情況下,監(jiān)控主程序要確定控制的轉(zhuǎn)向,除了要知道當(dāng)前按鍵外,還得明確系統(tǒng)目前的“狀況”,即“狀態(tài)”?捎脿顟B(tài)表法設(shè)計(jì)監(jiān)控主程序,其核心是設(shè)計(jì)一張狀態(tài)表,規(guī)定應(yīng)用系統(tǒng)在某一狀態(tài)下各按鍵的含義,包括應(yīng)執(zhí)行哪一個(gè)命令處理子程序和完成狀態(tài)的正確變遷。狀態(tài)表的格式見(jiàn)表1。

    設(shè)計(jì)時(shí),在內(nèi)存開(kāi)辟一個(gè)現(xiàn)態(tài)單元記憶當(dāng)前的狀態(tài)。當(dāng)有鍵按下時(shí),監(jiān)控主程序根據(jù)當(dāng)前按鍵的編碼和現(xiàn)態(tài)這兩個(gè)關(guān)鍵字去查閱狀態(tài)表,從而確定系統(tǒng)該執(zhí)行哪一個(gè)處理子程序及系統(tǒng)的下一個(gè)狀態(tài)是什么,立即修改現(xiàn)態(tài)單元的內(nèi)容,以便有新的按鍵時(shí)系統(tǒng)能做出正確的響應(yīng)。在每個(gè)狀態(tài)下并非所有的按鍵都有定義,即有空鍵。

    當(dāng)某個(gè)中斷發(fā)生時(shí),中斷服務(wù)程序設(shè)置相應(yīng)的標(biāo)志,而主程序不斷地判斷這些標(biāo)志,以決定啟動(dòng)哪一個(gè)處理程序。相應(yīng)的處理程序處理完相關(guān)的任務(wù)后,清除此標(biāo)志,然后把控制權(quán)交還給主程序。對(duì)于延時(shí)或定時(shí)處理,可用一個(gè)定時(shí)器來(lái)完成。

    4.2.2 基于時(shí)間片的單片機(jī)程序

    在單片機(jī)實(shí)時(shí)控制系統(tǒng)中引入了現(xiàn)代操作系統(tǒng)的多任務(wù)思想,采用時(shí)間片輪轉(zhuǎn)調(diào)度算法對(duì)傳統(tǒng)單片機(jī)編程思想進(jìn)行了改進(jìn),并應(yīng)用在分布式系統(tǒng)中,結(jié)構(gòu)清晰、調(diào)度靈活,適用于定時(shí)要求復(fù)雜、實(shí)時(shí)性要求強(qiáng)的系統(tǒng)。

    4.3 閱讀程序并畫(huà)出程序流程圖

    程序流程圖(簡(jiǎn)稱(chēng)框圖)是用來(lái)描述程序處理過(guò)程的工具,推理過(guò)程清晰、直觀、邏輯性強(qiáng),可用于刻畫(huà)程序的控制流邏輯,為程序測(cè)試和理解提供了一種重要的輔助手段。

    只有分析者對(duì)程序進(jìn)行多次掃描,畫(huà)出每個(gè)模塊的詳細(xì)流程圖,才能明確各個(gè)模塊的任務(wù)和相互聯(lián)系及資源分配和整個(gè)程序的設(shè)計(jì)思路,各程序模塊的入口、出口和對(duì)CPU內(nèi)部寄存器的占用情況。還有CPU對(duì)啟動(dòng)A/D轉(zhuǎn)換要發(fā)什么控制信號(hào);端口地址是什么;CPU用什么方法得知A/D轉(zhuǎn)換結(jié)束,以便輸入轉(zhuǎn)換結(jié)果;采樣周期多長(zhǎng)等。這是分析和設(shè)計(jì)程序最重要的一步,也是邏輯分析和優(yōu)化的基礎(chǔ)。單片機(jī)常用功能模塊有:定時(shí)、數(shù)據(jù)采集、數(shù)字采集、數(shù)字濾波、標(biāo)度變換、控制算法、顯示、報(bào)警、打印等。

    4.4 算法分析

    算法是為解決某一特定問(wèn)題而采取的確定的有限的步驟,是求解某一問(wèn)題所使用的一組定義明確的規(guī)則,在實(shí)際應(yīng)用中又稱(chēng)為方法、方式、體制等。對(duì)有些較復(fù)雜的算法,最好用畫(huà)流程圖的方式來(lái)分析,這樣思路清晰,簡(jiǎn)潔直觀。

     單片機(jī)控制系統(tǒng)程序設(shè)計(jì)中的重要內(nèi)容,是根據(jù)被控制對(duì)象的特性,合理選擇算法,以達(dá)到所要求的控制精度和指標(biāo)。例如數(shù)據(jù)采集時(shí)進(jìn)行數(shù)字濾波處理,常用的數(shù)字濾波方式有:程序判斷濾波、中位置濾波、算術(shù)平均濾波、遞推平均濾波法、防脈沖干擾平均值濾波、一階滯后濾波等。因此,在閱讀程序前,必須對(duì)該問(wèn)題的解決方法有一定的了解,才能確定具體使用了哪一種算法。

     4.5 資源分配

     確定資源分配,包括ROM、定時(shí)器/計(jì)時(shí)器、RAM、中斷源等。其中最關(guān)鍵的是片內(nèi)RAM的分配,如00H~2FH工作寄存器,常用作指針、計(jì)數(shù)器、循環(huán)變量等;20H~2FH具有位尋址功能,用來(lái)存放各種標(biāo)志位、邏輯變量、狀態(tài)變量。對(duì)RAM應(yīng)列出一張RAM資源詳細(xì)分配表,以備閱讀查用。在數(shù)據(jù)存儲(chǔ)器中,安排好采樣數(shù)據(jù)區(qū)、處理結(jié)果數(shù)據(jù)區(qū)、顯示和打印數(shù)據(jù)區(qū)、標(biāo)志區(qū)等。該分配表可手動(dòng)畫(huà)出,而用Excel表則更方便。

    4.6 標(biāo)志位

    單片機(jī)有豐富的位操作指令和位存儲(chǔ)資源。一類(lèi)是為I/O操作服務(wù)的,如監(jiān)測(cè)到的各種邏輯信息可存入位資源中,隨時(shí)供程序使用。另一類(lèi)是為程序本身服務(wù),表明系統(tǒng)的各種狀態(tài)特點(diǎn),傳遞各模塊之間的控制信息,控制程序流向等,這一部分稱(chēng)為軟件標(biāo)志。閱讀程序時(shí),對(duì)每個(gè)位資源必須進(jìn)行詳細(xì)記錄,繪出軟件標(biāo)志的使用說(shuō)明書(shū)。需要說(shuō)明的項(xiàng)目有:名稱(chēng)和位地址:該軟件標(biāo)志在程序中的代號(hào)和存放的位單元。意義:說(shuō)明邏輯1和邏輯0代表的狀態(tài)或功能。對(duì)全局定義的軟件標(biāo)志,它有唯一的定義,對(duì)于局部定義的軟件標(biāo)志,必須注明其有效范圍。生命周期:分析每個(gè)軟件標(biāo)志初始化的狀態(tài),程序運(yùn)行時(shí)發(fā)生變化的條件和時(shí)刻,并進(jìn)行記錄。用戶(hù):對(duì)軟件標(biāo)志進(jìn)行讀操作的狀態(tài)或模塊稱(chēng)為該軟件標(biāo)志的用戶(hù)。軟件標(biāo)志的使用有兩種,一種是非破壞性的,只讀不寫(xiě);另一種是破壞性使用,這種軟件標(biāo)志多為某種申請(qǐng)標(biāo)志,響應(yīng)后立即清除,可避免重復(fù)響應(yīng)。同一標(biāo)志位在不同的狀態(tài)下可有不同的含義。多位標(biāo)志表示多個(gè)狀態(tài),這樣節(jié)省標(biāo)志位。

    4.7 抗干擾處理

    由于單片機(jī)工作環(huán)境比較惡劣和復(fù)雜,往往會(huì)影響系統(tǒng)的可*性、安全性。這些干擾有供電系統(tǒng)干擾、過(guò)程通道干擾、空間干擾等,會(huì)導(dǎo)致數(shù)據(jù)采集誤差加大、控制狀態(tài)失靈、數(shù)據(jù)受干擾發(fā)生改變、程序運(yùn)行失常。

    為保證單片機(jī)控制系統(tǒng)長(zhǎng)期穩(wěn)定運(yùn)行,必須對(duì)各種干擾進(jìn)行處理,包括必要的硬件電路,如硬件看門(mén)狗技術(shù);軟件抗干擾技術(shù),如輸入通道抗干擾技術(shù)、數(shù)字濾波、RAM數(shù)據(jù)冗余技術(shù)、軟件陷阱等。軟件和硬件抗干擾技術(shù)結(jié)合,這樣才能達(dá)到最佳效果。

    5 結(jié)語(yǔ)

     程序設(shè)計(jì)是創(chuàng)造性的工作,而程序分析往往是為創(chuàng)造性的工作做準(zhǔn)備。閱讀程序是從已有的程序開(kāi)始,分析其硬件、軟件功能,對(duì)其消化、吸收,才能對(duì)程序進(jìn)行修改、維護(hù)、優(yōu)化程序,從而擴(kuò)大系統(tǒng)的適應(yīng)范圍,提高技術(shù)指標(biāo)和性能參數(shù)。

關(guān)閉窗口

相關(guān)文章