0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)的程序編寫

WSTm_UCAS2004 ? 來源:YXQ ? 2019-08-12 09:57 ? 次閱讀

MCU的程序的編寫與PC下的程序的編寫存在很大的區(qū)別,雖然現(xiàn)在基于C的MCU開發(fā)工具越來越流行,但對(duì)于一個(gè)高效的程序代碼和喜歡使用匯編的設(shè)計(jì)者來講,匯編語(yǔ)言仍然是最簡(jiǎn)潔、最有效的編程語(yǔ)言。

對(duì)于MCU的程序編寫,其基本的框架可以說是大體一致的,一般分為初始化部分(這是MCU程序設(shè)計(jì)與PC最大的不同),主程序循環(huán)體和中斷處理程序三大部分,其分別說明如下:

初始化:對(duì)于所有的MCU程序的設(shè)計(jì)來講,出世化是最基本也是最重要的一步,一般包括如下內(nèi)容:

屏蔽所有中斷并初始化堆棧指針:初始化部分一般不希望有任何中斷發(fā)生。

清除系統(tǒng)的RAM區(qū)域和顯示Memory:雖然有時(shí)可能沒有完全的必要,但從可靠性及一致性的角度出發(fā),特別是對(duì)于防止意外的錯(cuò)誤,還是建議養(yǎng)成良好的編程習(xí)慣。

IO口的初始化:根據(jù)項(xiàng)目的應(yīng)用的要求,設(shè)定相關(guān)IO口的輸入輸出方式,對(duì)與輸入口,需要設(shè)定其上拉或下拉電阻;對(duì)于輸出口,則必須設(shè)定其出世的電平輸出,以防出現(xiàn)不必要的錯(cuò)誤。

中斷的設(shè)置:對(duì)于所有項(xiàng)目需要用到的中斷源,應(yīng)該給予開啟并設(shè)定中斷的觸發(fā)條件,而對(duì)于不使用的多余的中斷,則必須給予關(guān)閉。

其他功能模塊的初始化:對(duì)于所有需要用到的MCU的外圍功能模塊,必須按項(xiàng)目的應(yīng)用的要求進(jìn)行相應(yīng)的設(shè)置,如UART的通訊,需要設(shè)定Baud Rate,數(shù)據(jù)長(zhǎng)度,校驗(yàn)方式和Stop Bit的長(zhǎng)度等,而對(duì)于Programmer Timer,則必須設(shè)置其時(shí)鐘源,分頻數(shù)及Reload Data等。

參數(shù)的出世化:完成了MCU的硬件和資源的出世化后,接下來就是對(duì)程序中使用到的一些變量和數(shù)據(jù)的初始化設(shè)置,這一部分的初始化需要根據(jù)具體的項(xiàng)目及程序的總體安排來設(shè)計(jì)。對(duì)于一些用EEPROM來保存項(xiàng)目預(yù)制數(shù)的應(yīng)用來講,建議在初始化時(shí)將相關(guān)的數(shù)據(jù)拷貝到MCU的RAM,以提高程序?qū)?shù)據(jù)的訪問速度,同時(shí)降低系統(tǒng)的功耗(原則上,訪問外部EEPROM都會(huì)增加電源的功耗)。

主程序循環(huán)體:大多數(shù)MCU是屬于長(zhǎng)時(shí)間不間斷運(yùn)行的,因此其主程序體基本上都是以循環(huán)的方式來設(shè)計(jì),對(duì)于存在多種工作模式的應(yīng)用來講,則可能存在多個(gè)循環(huán)體,相互之間通過狀態(tài)標(biāo)志來進(jìn)行轉(zhuǎn)換。對(duì)于主程序體,一般情況下主要安排如下的模塊:

計(jì)算程序:計(jì)算程序一般比較耗時(shí),因此堅(jiān)決反對(duì)放在任何中斷中處理,特別是乘除法運(yùn)算。

顯示傳輸程序:主要針對(duì)存在外部LED、LCD Driver的應(yīng)用。

中斷處理程序:中斷程序主要用于處理實(shí)時(shí)性要求較高的任務(wù)和事件,如,外部突發(fā)性信號(hào)檢測(cè),按鍵的檢測(cè)和處理,定時(shí)計(jì)數(shù),LED顯示掃描等。

一般情況下,中斷程序應(yīng)盡可能保證代碼的簡(jiǎn)潔和短小,對(duì)于不需要實(shí)時(shí)去處理的功能,可以在中斷中設(shè)置觸發(fā)的標(biāo)志,然后由主程序來執(zhí)行具體的事務(wù)――這一點(diǎn)非常重要,特別是對(duì)于低功耗、低速的MCU來講,必須保證所有中斷的及時(shí)響應(yīng)。

對(duì)于不同任務(wù)體的安排,不同的MCU其處理的方法也有所不同。

例如,對(duì)于低速、低功耗的MCU(Fosc=32768Hz)應(yīng)用,考慮到此類項(xiàng)目均為手持式設(shè)備和采用普通的LCD顯示,對(duì)按鍵的反應(yīng)和顯示的反應(yīng)要求實(shí)時(shí)性較高,應(yīng)此一般采用定時(shí)中斷的方式來處理按鍵的動(dòng)作和數(shù)據(jù)的顯示;而對(duì)于高速的MCU,如Fosc》1MHz的應(yīng)用,由于此時(shí)MCU有足夠的時(shí)間來執(zhí)行主程序循環(huán)體,因此可以只在相應(yīng)的中斷中設(shè)置各種觸發(fā)標(biāo)志,并將所有的任務(wù)放在主程序體中來執(zhí)行。

在MCU的程序設(shè)計(jì)中,還需要特別注意的一點(diǎn)就是:要防止在中斷和主程序體中同時(shí)訪問或設(shè)置同一個(gè)變量或數(shù)據(jù)的情況。有效的預(yù)防方法是,將此類數(shù)據(jù)的處理安排在一個(gè)模塊中,通過判斷觸發(fā)標(biāo)志來決定是否執(zhí)行該數(shù)據(jù)的相關(guān)操作;而在其他的程序體中(主要是中斷),對(duì)需要進(jìn)行該數(shù)據(jù)的處理的地方只設(shè)置觸發(fā)的標(biāo)志。――這可以保證數(shù)據(jù)的執(zhí)行是可預(yù)知和唯一的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44452

    瀏覽量

    630807
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3543

    瀏覽量

    93465
  • 匯編語(yǔ)言
    +關(guān)注

    關(guān)注

    14

    文章

    406

    瀏覽量

    35650

原文標(biāo)題:美國(guó)為什么圍堵不了中國(guó)?66年前,毛主席一句話點(diǎn)出了原因!

文章出處:【微信號(hào):UCAS2004,微信公眾號(hào):國(guó)科環(huán)宇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    單片機(jī)原理與應(yīng)用:Proteus環(huán)境下單片機(jī)程序編寫及仿真#單片機(jī)

    單片機(jī)PROTPro仿真技術(shù)單片機(jī)原理
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年11月09日 14:31:20

    單片機(jī)程序編寫優(yōu)化

    (3,2) 可以改為N=3*3說明:在有內(nèi)置硬件乘法器的單片機(jī)中(如51 系列),乘法運(yùn)算比求平方運(yùn)算快得多, 因?yàn)楦↑c(diǎn)數(shù)的求平方是通過調(diào)用子程序來實(shí)現(xiàn)的,乘法運(yùn)算的子程序比平方運(yùn)算的子程序
    發(fā)表于 12-05 13:53

    單片機(jī)入門:單片機(jī)程序編寫、仿真、調(diào)試常用的軟件有...

    不同的型號(hào)的單片機(jī)需要不同的開發(fā)軟件。我們以80C51系列、PIC系列和AVR系列為例分別說明。單片機(jī)程序編寫不需要任何特殊的軟件,只要是文本編緝軟件就可以了,如WINDOWS自帶的
    發(fā)表于 11-05 00:44

    單片機(jī)程序編寫有點(diǎn)小問題 還望各位大神出手相助!

    單片機(jī)程序編寫有點(diǎn)小問題還望各位大神出手相助謝謝
    發(fā)表于 10-28 01:29

    怎樣在阿里云物聯(lián)網(wǎng)平臺(tái)上進(jìn)行單片機(jī)程序編寫

    阿里云物聯(lián)網(wǎng)平臺(tái)是怎樣設(shè)置的?怎樣在阿里云物聯(lián)網(wǎng)平臺(tái)上進(jìn)行單片機(jī)程序編寫呢?
    發(fā)表于 02-22 06:04

    C51單片機(jī)程序編寫注意事項(xiàng)

    C51單片機(jī)頭文件的詳細(xì)介紹,是初學(xué)者必須了解的知識(shí)。
    發(fā)表于 03-17 08:00 ?8次下載

    單片機(jī)程序編寫步驟

    單片機(jī)又稱單片微控制器,它不是完成某一個(gè)邏輯功能的芯片,而是把一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上。相當(dāng)于一個(gè)微型的計(jì)算機(jī),和計(jì)算機(jī)相比,單片機(jī)只缺少了I/O設(shè)備。概括的講:一塊芯片就成了一臺(tái)計(jì)算機(jī)。它的體積小、質(zhì)量輕、價(jià)格便宜、為學(xué)
    發(fā)表于 11-14 14:29 ?1.9w次閱讀

    PIC單片機(jī)程序編寫和空間分配時(shí)應(yīng)注意哪些問題

    控制部分采用PICl6F7X系列單片機(jī),運(yùn)用匯編語(yǔ)言編程,運(yùn)行速度較快,能夠達(dá)到系統(tǒng)的要求。在這里使用的大多是數(shù)字信號(hào)的控制,電機(jī)的控制只有開和合兩種狀態(tài)。在動(dòng)作的過程中需要兩只手臂、身體、頭部、腳部等的協(xié)調(diào)動(dòng)作。
    發(fā)表于 11-20 15:10 ?1073次閱讀

    51單片機(jī)與迪文DGUS屏通信例程之三: 單片機(jī)程序編寫

    相信接觸過STC15系列單片機(jī)的小伙伴們,應(yīng)該會(huì)對(duì)其編程風(fēng)格比較熟悉,沒錯(cuò),STC15系列單片機(jī)可以采用庫(kù)函數(shù)編程,官方提供了標(biāo)準(zhǔn)的函數(shù)庫(kù),我們只需要利用好庫(kù)函數(shù),便可大大簡(jiǎn)化配置流程,從而提高編程效率。
    發(fā)表于 04-22 13:59 ?1.1w次閱讀
    51<b class='flag-5'>單片機(jī)</b>與迪文DGUS屏通信例程之三: <b class='flag-5'>單片機(jī)</b><b class='flag-5'>程序</b><b class='flag-5'>編寫</b>

    ARM處理器與51單片機(jī)程序編寫到底有什么區(qū)別

    (1)int變量在51單片機(jī)中占2個(gè)字節(jié);在ARM處理器中占4個(gè)字節(jié)。 (2)結(jié)構(gòu)體對(duì)齊在51單片機(jī)中按照一個(gè)字節(jié)對(duì)齊;在ARM中按照結(jié)構(gòu)體默認(rèn)對(duì)齊規(guī)則對(duì)齊。 (3)字節(jié)在內(nèi)存的排列順序在51
    發(fā)表于 06-25 17:43 ?1次下載
    ARM處理器與51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>程序</b><b class='flag-5'>編寫</b>到底有什么區(qū)別

    PIC單片機(jī)程序編寫和動(dòng)作標(biāo)志位的使用方法解析

    在這里使用的大多是數(shù)字信號(hào)的控制,電機(jī)的控制只有開和合兩種狀態(tài)。在動(dòng)作的過程中需要兩只手臂、身體、頭部、腳部等的協(xié)調(diào)動(dòng)作。整個(gè)控制系統(tǒng)比較復(fù)雜,因而在PIC程序編寫和空間分配方面需要注意一些問題。
    發(fā)表于 01-25 17:04 ?2937次閱讀
    PIC<b class='flag-5'>單片機(jī)</b><b class='flag-5'>程序</b><b class='flag-5'>編寫</b>和動(dòng)作標(biāo)志位的使用方法解析

    單片機(jī)程序如何編寫

    設(shè)計(jì)編寫單片機(jī)程序是一個(gè)漸進(jìn)的過程不可一蹴而就,畢竟單片機(jī)程序是與硬件有密切關(guān)系的,我們一般稱為單片機(jī)
    的頭像 發(fā)表于 02-12 14:38 ?3.7w次閱讀
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>程序</b>如何<b class='flag-5'>編寫</b>

    單片機(jī)程序編寫方法

    學(xué)習(xí)單片機(jī)最主要的是學(xué)習(xí)寫程序的方法,程序的功能千變?nèi)f化,是學(xué)不完的,只有掌握了一定方法,才能用這種方法去寫新的程序。
    發(fā)表于 09-22 17:17 ?4167次閱讀

    單片機(jī)程序編寫以及單片機(jī)的開發(fā)技巧

    單片機(jī)的學(xué)習(xí)竅門 任何一款MCU,其基本原理和功能都是大同小異,所不同的只是其外圍功能模塊的配置及數(shù)量、指令系統(tǒng)等。 對(duì)于指令系統(tǒng),雖然形式上看似千差萬別,但實(shí)際上只是符號(hào)的不同,其所代表的含義
    發(fā)表于 10-30 15:02 ?2626次閱讀

    STC15系列單片機(jī)與迪文DGUS屏應(yīng)用(六):單片機(jī)程序編寫

    STC15系列單片機(jī)可以采用庫(kù)函數(shù)編程,官方提供了標(biāo)準(zhǔn)的函數(shù)庫(kù),我們只需要利用好庫(kù)函數(shù),便可大大簡(jiǎn)化配置流程,從而提高編程效率。
    的頭像 發(fā)表于 12-24 17:34 ?1344次閱讀