單片機實用編程技巧值得學習_第1頁
單片機實用編程技巧值得學習_第2頁
單片機實用編程技巧值得學習_第3頁
單片機實用編程技巧值得學習_第4頁
單片機實用編程技巧值得學習_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單片機軟件系統

設計教程基礎要求熟練運用C語言編程。熟練掌握和運用一款單片機。包括硬件結構、寄存器、外設、了解基本匯編指令等。熟悉一款集成開發環境及編譯器。獨立編寫并調通2000行以上的小型程序。一、如何編寫高質量軟件合理劃分函數功能,合并常用函數嚴格的函數、變量命名方法合理劃分軟件層次。如硬件隔離層、驅動程序層、功能函數層、應用層。合理運用宏定義,提高程序可移植性經常查看反匯編代碼,練習優化指令。函數劃分常用的功能集合,可以合理合并成一個函數利用參數傳遞,將多個函數合并。例如:某菜單需要將選中的菜單條反色顯示,因此需要2個中文顯示函數:DisplayString(char*ptr,charx,chary);DisplayStringInvert(char*ptr,charx,chary);可以合并成一個函數DisplayString(char*ptr,charx,chary,boolInvertFlag);注意函數過分合并會造成運算性能下降。函數與變量命名嚴格按照模塊名_功能名的方法命名,按正確的英文(甚至拼音也可)命名單詞首字母大寫例如:ADC_CailbrateZero()CPU_SleepDelay(intTime_ms)Flash_WriteWord(intAddr,intWord)軟件層次劃分合理劃分軟件層次,將使程序結構清晰層次良好的軟件,移植性強對軟件開發者來說,便于管理和維護,甚至可實現“代碼免維護”大大提高開發速度。例:在某液晶上需要做中文菜單、數字顯示、波形顯示、滾動條等。為該應用編寫液晶驅動函數。LCD驅動層劃分范例每一層含義明確,功能完整獨立每一層只調用其下一層的函數,禁止跨層調用函數。所有變量對于非其它層函數不透明。禁止跨層使用全局變量層次劃分越多,執行效率越低更改或更換任何一層的函數,不影響其它層函數的執行。合理運用宏定義1.用宏定義作硬件隔離#defineLED1_POUTP1OUT#defineLED1_PDIRP1DIR#defineLED1_BIT(BIT2)/*更換IO只需改以上3行*/#defineLED_ONLED1_POUT|=LED1_BIT/*亮*/#defineLED_OFFLED1_POUT&=~LED1_BIT/*滅*//*更換單片機只需修改以上2行*/

用宏定義自動運算#defineOSC(1000)#defineBAUD(9600)...UBR00=((long)OSC*1000/8)/BAUD;UBR10=0x00;...#defineTIMER_PERIOD12000...TH1=(unsignedint)(65536-TIMER_PERIOD)/256;/*51單片機*/TL1=(unsignedint)(65536-TIMER_PERIOD)%256;...用宏仿定義星作編府譯開邪關#d記ef遲in搬e朝AV瓜E竊0#d柏ef庫in感e該RM寸S塊1#d洗ef郵in陪e部PE亮K聾2#d疊ef諷in剝e恢UM塊OD俊E講AV帖E添/A伐VE東:平均年值RM徐S真有鴨效值PE燥K峰值園*/..展.#i仰f蔬(依UM的OD等E=惰=R滲MS命)VA盼C_乓Ch刃1=鏈(l欲on稼g冊in得t)踩Te跳mp窄In泊tV喘1*煙Te閃mp姿In遭tV禽1;VA長C_達Ch遼2=碑(l峰on脈g安in坊t)罰Te望mp鏡In校tV泥2*策Te缸mp咽In詞tV晴2;#en嫂di士f#i戲f蓄(果UM鹽OD芝E=蒙=A股VE永)VA應C_幕Ch鑄1=栽ab哪sv勝(T駁em舟pI榮nt聯V1販);VA繳C_脆Ch受2=疏ab士sv真(T室em錫pI僻nt盡V2啊);#en蟲di斬f..剃.用宏耐定義握作功提能開充關#d掘ef摟in天e嘆ON滋1#d快ef宿in珠e脹OF推F歲0#d擁ef戴in共e樹HI隨_L櫻O伍2#d愈ef裳in攏e尸LE兆V_蓋2稅1#d耽ef渣in宜e烤NO屑NE合0#d梅ef伏in冷e推MI研NO治RC著UT棕OF番F芳/活*是否伸打開踩小值京切除質功能復*/#d潑ef詞in偶e布RS睡48暢5替ON思/厲*是否搶打開RS落-4泉85通訊者功能供*/#d俊ef躺in眼e科DA嘴C薦ON未/吸*是否潤打開羨變送寨功能攪*/#d肌ef曬in約e富DE塑FA封UL與T丙OF往F懲/*是否括打開猴參數宣備份明功能疏*/#d訊ef灑in益e現AL殘AR粥M_價MO驢DE帽NO晝NE柄/敵*報警鈴模式NO踩NE放=無報針警LE夕V_灣2=雙限HI印_L耐O=高低狗限采*/#d儉ef熔in胸e鐘OF捏FS章ET纏ON伐/霸*是否插打開叮偏移育補償革功能帆*/#d胞ef羊in堡e舌KE圈YT直ON剖E技ON吸/混*按鍵堪音*/程序狐優化打開磨編譯甩器自瘦帶的爆優化垃選項層。注茂意高撒級別孤優化固會刪賺除部臭分“涉冗余擾”代混碼,或或改斬動程晴序結歲構,蹈應注暢意揮拳發性串變量盯(vo屆la蠅ti林le)查看緣瑞反匯舅編代慌碼,捏看匯炸編代斯碼是炕否有逼冗余婚操作捉,合裝理修穿改。二、譽軟件獸結構如何退讓CP雞U盡可菠能多行地執視行多歷項任嚷務如何霧讓CP艦U盡可株能快芽地響忘應各執個事蝦件如何駛讓程虧序盡缸可能分少地著占用RA焦M如何免讓程腥序具雙有盡陪可能尖強的夕可擴皺展性如何勵讓編微出的牢程序炒盡可盯能通濱用如何船減少罪編程魯工作活量?北如何陵減少萬錯誤敏概率竿和調冒試工恒作量雕?好的任程序饒結構久,可殘以解碌決上后述問杠題實時抬性實時朝性最紡高的攪任務腫,需蓋要零勞延遲蟻立即歷響應綁。應鞋考慮鄭硬件曲實現閱。如菠用CP偏LD躲/F掀PG出A、捕獲犁等實軌現。實時枕性較孤高任臘務,顆允許賭微秒憶級延子遲的詠事件標,可么用中累斷實溫現。賴但背頑景程謀序中訊不允束許長珍時間們關閉罪中斷亭。且塑中斷慌處理憲時間平不宜富過長歉。實時屆性較蛋低事畝件,起可以級查詢福。事件每查詢1.事件園出現雕時間飯較長四,允否許響圣應延幼遲也偉較長委。如燭某個喘按鍵睡,可鵝以在翅主循附環內詠直接坦查詢2.事件趣出現談時間洲較短題,小屑于主閥循環騙時間惱,但淡允許逗響應惕延遲沸,可壯以中團斷置縣標志盡位,稅主程大序處首理,有完畢捐后清徒除標跪志。盤比如歪串口木數據月楨判續別。3.情況2中,丑若事底件無臘法產群生中鬧斷,塌可以擱定時惡中斷男查詢雀,置帶標志裝位。肥主程思序處到理順序殘多任接務程許序vo蝦id要m槐ai簽n延(v循oi擔d){in單tco筍un嶼te彩r幟=事0;wh促il劃e廈(1次)/*甩r查ep仍ea稿t慰fo火re列ve塔r螞*/{Sl韻ee枕pD普el久ay隙_m激s(馬10撞);ch漏ec睡k_廁se主ri庭al紀_i綠o()染;/*域c妻he另ck理f棍or潔s拒er臣ia受l繡in棚pu拴t磚*/pr醋oc濤es勻s_圾se蓋ri縱al商_c腦md浮s()緣瑞;/*醋p紗ro臣ce最ss舌s襲er市ia索l渣in棗pu澤t臥*/ch化ec閉k_毫kb許d_肺io()噸;/*宵c螺he滔ck伯f兇or蔽k蛛ey乎bo僻ar濫d險in狼pu登t朋*/pr受oc由es穩s_恰kb倚d_拒cm膜ds()鑄;/*塞p酬ro爐ce驅ss幣k堡ey夕bo壩ar窩d販in蹤蝶pu趕t歪*/ad葛ju臘st猛_c車tr緩lr蟲_p聲ar您ms()園;/*仁a壞dj臺us恐t題th感e炸co美nt婚ro介ll柄er侮*卵/co唇un狡te翅r+惰+;/*省i腰nc透re彈me昏nt雅c吹ou拘nt盜er敵*羞/if誼(c奮ou昨nt正er社%1棵00稈==亡0)抱{哲…}}}并發并多任覺務程眠序vo營id鉗m糖ai銹n(帽){wh映il滿e(剛1)炎{療LP留M0輪;}}串口艇中斷{…}鍵盤熱中斷{…}定時隙中斷{…}休眠事件B事件C事件A事件D低功釋耗程級序首辦選結巨構每個威事件襲不宜啟執行訴時間云過長注意滴中斷符隨機分嵌套,注意況保護再臨界澇代碼全部傅信息騎通過任全局銷變量戰傳遞學和保須存前后郵臺程中序Vo器id瞎m吵ai都n(援){wh子il牌e(飯1){等待1秒延華遲讀取謹電壓計算已溫度顯示查溫度報警灘處理}}定時中斷串口中斷最常蓋見的逢程序糟結構背景拿程序無與前亦臺程米序之霉間通練過全右局變童量傳斬遞注意禽中斷下用到堆全局城變量村的保開護注意播臨界各代碼記的保在護主程純序不煌能長志時間票關閉漁中斷中斷撿程序納盡量饅簡短啊,盡炮快返頃回。注意依避免家函數臟遞歸涂調用RT萍OS嵌入升一個刊微型蹄實時鄙操作陷系統(R蚊TO什S),可以特輕松驢實現旅多任呆務(姨進程挽)并貼發執撫行。商品幼化或夫免費奧的的RT致OS,如uC-O邁SI腹I,RT剩X-爸TI距NY,國產Sm蔥al未l-俱RT借OS等。允許槽每個占任務磁都是保死循辭環,蝦由RT撕OS負責德調度CP殿U程序互指針祥分時集執行螺每個輸任務碌。CP四U、RA醋M開銷侍較大贏,8位CP壘U或簡漁單程貢序不吐建議才使用鴉。避免毛函數爸重入重入豆(re武en羅tr乘an墻t):指函滴數直薄接或潤間接麥調用枯函數良自身千。和PC不同灰,PC采用字堆棧拌傳遞炎允許鑄函數蒜重入至。單幕片機找采用漢靜態技變量除傳遞流,不允蟲許函輪數重貍入。造成扣重入弟的原損因:1.遞歸獻調用磁。例潤如A函數車調用B函數禽,B函數跪調用C函數婦,C函數舉調用A函數顛。避免醫函數器重入2.中斷解重入假設程主程肺序循胳環會甚調用A函數夢,中忌斷也廁使用披了A函數飾,那廊么有聚可能旬在主悟循環A函數惹執行償一半謹的時筍候,自中斷倦,又隱執行A函數僚,造瘡成A函數億原來手的變魄量被任更改艇。3.硬件艇重入假設錢主程鴿序操共作液訊晶顯牢示,淚中斷抱也操難作液賓晶顯瞇示,魂有可否能在摧液晶睡時序倆一半營的時價候,藏中斷暮,時敵序重敗新開升始,猾造成杰液晶沸收到商錯誤別指令伐,發江生不窯可恢擊復的掉錯誤油。臨界廟代碼輔保護臨界怒代碼桐(Cr艱it彈ic蛙al歐C辭od粘e):指運采行過范程中爬不允液許被隊中斷氏打斷榜的代條碼。幾種擦產生時臨界壞代碼勞的原冷因:1.執行扛時間頌嚴格護,不若允許魂被延屆長。男如軟殘件模景擬串毯口,滅軟件銷循環晚產生介精確忽延遲蒙,軟乒件模炮擬時按間嚴扇格的碗異步濕時序沙(如1W透ir輸e總線遲),誓不允南許被裂打斷飛。臨界阻代碼闊保護2.中斷悔時間商很長家,某銷函數串不允筍許長屑時間笑暫停袖。比戰如液唉晶。3.因為口避免修函數真重入暴產生吹的臨炊界代舞碼。再寫冤一個胖一樣助的函更數,爸專供毯中斷均用。用re罰en捏tr希an醬t關鍵稿字定至義函禍數(蝦堆棧呼傳遞基參數播)進入謹臨界共代碼藍前關澇中斷匪,后幸開中康斷。臨界抱代碼饒保護2.中斷隱變量研傳遞宣造成安的臨粱界代碎碼:例如偏,主訊程序璃要得故到存線有周栗期計撿數值寧的長非整形猜變量Pe圾ri證od無Cn腎t。該值艱在中鬧斷內取被更劇新。中斷:{Pe蒙ri盒od忘Cn野t=TA大OF變_C城nt*6添55箏36禽+T樹AR搏;}Ma容in{…Fr余eq咱=摟1.披0/恐Pe形ri殃od隨Cn企t;害//錯誤!_D水IN穩T(賤);Te祖mp腐L=Pe楊ri閱od憲Cn淘t;_E頑IN委T(待);Fr圖eq材=軌1.現0/Te國mp猴L;膠//正確!}對象狠化編慢程單片筐機系只統的枕任何蹦一個仰獨立紛單元/部件/外設/功能蕉集合登,都羅可以靜抽象彩成一占個對載象(Ob推je脖ct)。對象英都有喪其滔屬性膚、方承法、方事件幅。以IO為例迫。屬性丑:方隊向、峽電平承。方法隱:置1,置0,取局反,兵讀取浸輸入兄值,挪讀取朗方向…事件興:跳蒸變,扶中斷…對象持化編輛程IO肚1_界DI懼R霸I展O1厲_I洋N作為阿其屬起性,著可以骨被設翠置。方法IO揀1_燈Se周t(濫Bo蘇ol味

溫馨提示

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

評論

0/150

提交評論