<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      單片機編程經驗集錦

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2010/10/5

      1、首先,程序必須模塊化。每個模塊(子程序)執行一個功能。每個模塊只有一個出口
      (RET)。

      2、設立一個模塊(子程序)ID寄存器。

      3、為每個子程序配置一個唯一的ID號碼。

      4、每當子程序執行完畢,要返回(RET)之前,先將本子程序的ID號送入 ID寄存器

      5、返回到上級程序后,先判斷ID寄存器中的ID號。如果正確,則繼續執行;如果不正確,
      則表示
      PC指針有可能已經跳錯了,子程序沒有按預計的出口返回,這時將程序攔截到初始化段或程
      序錯
      誤處理段。

      這種方法,如同在程序中設立了若干個崗哨,每次調用子程序返回后,都要對口令(ID
      號),驗
      明正身后再放行。再配合軟件陷阱,基本上可以將大多數PC指針彈飛的現象檢測到。

      到了程序錯誤處理段,要殺要剮(冷啟動還是熱啟動)就由您了。

      僅以一條代碼來揭示程序飛跑的本質!
      750102H  ;MOV 01H,#02H

      如當前PC不是指向75H,而是指向01H或02H,那么51內的指令譯碼器將把她們忠實地翻譯成
      AJMP
      XX01H 或 LJMP XXXXH  而XX01H XXXXH又是什么呢?天知道!這樣惡性飛跑下去那還不死
      定!
      改革一下:
      CLR A ;0C4H
      INC A ;04H
      MOV R1,A ;0F9H
      INC A ;04H 
      MOV @R1,A  ;86H
      每一字節代碼都不能在生成跳轉和循環,且都是單字節指令!往那跑去?
      跑出去了都要自己回來!“在家”千日好!“跳出”事事難嘛!這樣只要平時習慣了用累加
      器和
      寄存器把數倒一倒,把那些危險代碼都給倒掉,這樣雖說給PC的“足”上多加了兩字節的
      “包”
      可它不好“跑”啊!“足包”====跑!
      有朋友會問:要是PC抓做02H--LJMP 又有抓做了老鼻子遠的XXH,再抓做隔壁的YYH不就沒用

      嗎?提這樣的問題只有ZENYIN這種鉆牛角得才會提!PC那一位最活躍啊?PC0啊!要“扯
      拐”顯
      然發生在她身上,至于那PC15同志啊,睡得更死豬一樣,雷爆(強干擾)來了都打不醒?此
      外如
      果干擾都強到了PC高位都出錯的地步!關電!關電!不干了!“不是我們不行而是敵人太強
      大”!反過來要是敵人在你的專政下,只是偶爾出來搗搗亂,但一出來就沖到屁西(PC)高
      層,
      就要問問是不是你的王國根基(硬件)有問題了?而非出在意識形態(軟件)上!硬件為
      本!軟
      件為標!標本兼治鑄就堅強體魄,方能百毒不侵!

      經驗之二、不要輕信軟件狗

      關于軟件狗的討論,論壇上多矣。

      匠人也曾經查閱過許多關于軟件狗的文章。有些大師確實提出了一些比較有技巧性的方法。

      但是,匠人的忠告是:不要輕信軟件狗!

      其實,軟件狗相當于軟件的一種自律行為。一般的思路都是通過設立一個計數器,在計時中
      斷中
      對其+1,在主程序的適當地方對其清零。如果程序失控了,清零指令未被執行,但中斷造常

      生,則計數器溢出(狗狗叫了)。

      但是這里有個問題:萬一干擾導致中斷被屏蔽了,那軟件狗就永遠不會叫了!——針對這種

      能,有人提出在主程序中反復刷新中斷使能標志,保證不讓中斷被屏蔽。——但萬一程序飛
      到某
      個死循環中去了,不再執行“刷新中斷使能標志”這一功能了,還是有可能把狗狗活活餓
      死。

      所以,匠人的觀點是:看門狗必須擁有獨立的計數器。(即硬件看門狗)

      好在現在好多芯片都提供了內部WDT。這種狗都是自帶計數器的。即使干擾導致程序失控,
      WDT還
      是會造常計數直到溢出。

      當然,匠人也沒有要將軟件狗一棍子全部打死的意思。畢竟不管是軟狗還是硬狗,逮到耗子
      就是
      好狗嘛(狗拿耗子——多管閑事?)。如果哪位訓狗專家確實養過一條能看門的好軟件狗,
      請牽
      出來讓大伙瞧瞧。


      經驗之三、話說RAM冗余技術

      所謂的RAM冗余,就是:

      1、將重要的數據信息備份2份(或以上)并存放在RAM中不同的區域(指地址不相連)。

      2、當平時對這些數據進行修改時,同時也更新備份

      3、當干擾發生并被攔截到“程序錯誤處理段”中時,將數據與備份做比較,采用表決方式
      (少數
      服從多數)選出正確(或可能正確?)的那個。

      4、備份越多,效果越好。(當然,你得有足夠的存儲空間)

      5、只備份最最原始的數據。中間變量(指那些可以從原始數據重新推導出來的數據)不必
      備份


      注:

      1、這種思路的理論依據,據說是源于一種“概率論”,即一個人被老婆打腫臉的概率是很
      大的,
      但如果他捂著臉去上班卻發現全公司每個已婚男人的臉都青了,這種概率是很小的。同理,
      一個
      RAM寄存器數據被沖毀的概率是很大的,但地址不相連的多個RAM同時被沖毀的概率是很小
      的。

      2、前兩年,小匠學徒時,用過一次這種方法,但效果不太理想。當時感覺可能是概率論在
      我這失
      效了?現在回想起來,可能是備份的時機選的不好。結果將已經沖毀的數據又備份進去了。
      這樣
      以來,恢復出來的數據自然也就不對了。


      經驗之四、話說指令冗余技術

      前面有個朋友問到指令冗余,按匠人的理解,指令冗余,就是動作冗余。

      舉個例子,你要在某個輸出口上輸出一個高電平去驅動一個外部器件,你如果只送一次
      “1”,那
      么,當干擾來臨時,這個“1”就有可能變成“0”了。正確的處理方式是,你定期刷新這個
      “1”。那么,即使偶然受了干擾,它也能恢復回來。

      除了I/O口動作的冗余,匠人強烈建議大家在下面各方面也采用這種方法:

      1、LCD的顯示。有時,也許你會用一些LCD的專用驅動芯片(如HT1621),這種芯片有個好
      處,
      即你只要將顯示數據傳送給它,它就會不斷的自動掃描LCD。但是,你千萬不要以為這樣就
      沒你啥
      事了。正確的處理方式是,要記得定期刷新送顯數據(即使顯示內容沒有改變)。對于CPU
      中自帶
      LCD DRIVER 的,也要定期刷新LCD RAM。

      2、中斷使能標志的設置。不要以為你在程序初始化段將中斷設置好就OK了。應該在主程序
      中適當
      的地方定期刷新一下,以免你的中斷被掛起來。

      3、其它一些標志字和參數寄存器(包括你自己定義的),也要記得常常刷新。

      4、其它一些你認為有必要反復刷新的地方。

      經驗之五、10種軟件濾波方法

      下面奉獻——
      匠人嘔心瀝血搜腸刮肚冥思苦想東拼西湊整理出來的10種軟件濾波方法

      1、限幅濾波法(又稱程序判斷濾波法)
          A、方法:
              根據經驗判斷,確定兩次采樣允許的最大偏差值(設為A)
              每次檢測到新值時判斷:
              如果本次值與上次值之差<=A,則本次值有效
              如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值
          B、優點:
              能有效克服因偶然因素引起的脈沖干擾
          C、缺點
              無法抑制那種周期性的干擾
              平滑度差
         
      2、中位值濾波法
          A、方法:
              連續采樣N次(N取奇數)
              把N次采樣值按大小排列
              取中間值為本次有效值
          B、優點:
              能有效克服因偶然因素引起的波動干擾
              對溫度、液位的變化緩慢的被測參數有良好的濾波效果
          C、缺點:
              對流量、速度等快速變化的參數不宜

      3、算術平均濾波法
          A、方法:
              連續取N個采樣值進行算術平均運算
              N值較大時:信號平滑度較高,但靈敏度較低
              N值較小時:信號平滑度較低,但靈敏度較高
              N值的選取:一般流量,N=12;壓力:N=4
          B、優點:
              適用于對一般具有隨機干擾的信號進行濾波
              這樣信號的特點是有一個平均值,信號在某一數值范圍附近上下波動
          C、缺點:
              對于測量速度較慢或要求數據計算速度較快的實時控制不適用
              比較浪費RAM
             
      4、遞推平均濾波法(又稱滑動平均濾波法)
          A、方法:
              把連續取N個采樣值看成一個隊列
              隊列的長度固定為N
              每次采樣到一個新數據放入隊尾,并扔掉原來隊首的一次數據.(先進先出原則)
              把隊列中的N個數據進行算術平均運算,就可獲得新的濾波結果
              N值的選取:流量,N=12;壓力:N=4;液面,N=4~12;溫度,N=1~4
          B、優點:
              對周期性干擾有良好的抑制作用,平滑度高
              適用于高頻振蕩的系統   
          C、缺點:
              靈敏度低
              對偶然出現的脈沖性干擾的抑制作用較差
              不易消除由于脈沖干擾所引起的采樣值偏差
              不適用于脈沖干擾比較嚴重的場合
              比較浪費RAM
             
      5、中位值平均濾波法(又稱防脈沖干擾平均濾波法)
          A、方法:
              相當于“中位值濾波法”+“算術平均濾波法”
              連續采樣N個數據,去掉一個最大值和一個最小值
              然后計算N-2個數據的算術平均值
              N值的選取:3~14
          B、優點:
              融合了兩種濾波法的優點
              對于偶然出現的脈沖性干擾,可消除由于脈沖干擾所引起的采樣值偏差
          C、缺點:
              測量速度較慢,和算術平均濾波法一樣
              比較浪費RAM


      6、限幅平均濾波法
          A、方法:
              相當于“限幅濾波法”+“遞推平均濾波法”
              每次采樣到的新數據先進行限幅處理,
              再送入隊列進行遞推平均濾波處理
          B、優點:
              融合了兩種濾波法的優點
              對于偶然出現的脈沖性干擾,可消除由于脈沖干擾所引起的采樣值偏差
          C、缺點:
              比較浪費RAM

      7、一階滯后濾波法
          A、方法:
              取a=0~1
              本次濾波結果=(1-a)*本次采樣值+a*上次濾波結果
          B、優點:
              對周期性干擾具有良好的抑制作用
              適用于波動頻率較高的場合
          C、缺點:
              相位滯后,靈敏度低
              滯后程度取決于a值大小
              不能消除濾波頻率高于采樣頻率的1/2的干擾信號
             
      8、加權遞推平均濾波法
          A、方法:
              是對遞推平均濾波法的改進,即不同時刻的數據加以不同的權
              通常是,越接近現時刻的數據,權取得越大。
              給予新采樣值的權系數越大,則靈敏度越高,但信號平滑度越低
          B、優點:
              適用于有較大純滯后時間常數的對象
              和采樣周期較短的系統
          C、缺點:
              對于純滯后時間常數較小,采樣周期較長,變化緩慢的信號
              不能迅速反應系統當前所受干擾的嚴重程度,濾波效果差

      9、消抖濾波法
          A、方法:
              設置一個濾波計數器
              將每次采樣值與當前有效值比較:
              如果采樣值=當前有效值,則計數器清零
              如果采樣值<>當前有效值,則計數器+1,并判斷計數器是否>=上限N(溢出)
                  如果計數器溢出,則將本次值替換當前有效值,并清計數器
          B、優點:
              對于變化緩慢的被測參數有較好的濾波效果,
              可避免在臨界值附近控制器的反復開/關跳動或顯示器上數值抖動
          C、缺點:
              對于快速變化的參數不宜
              如果在計數器溢出的那一次采樣到的值恰好是干擾值,則會將干擾值當作有效值導
      入系

      10、限幅消抖濾波法
          A、方法:
              相當于“限幅濾波法”+“消抖濾波法”
              先限幅,后消抖
          B、優點:
              繼承了“限幅”和“消抖”的優點
              改進了“消抖濾波法”中的某些缺陷,避免將干擾值導入系統
          C、缺點:
              對于快速變化的參數不宜

       

      IIR 數字濾波器

      A. 方法:
         確定信號帶寬, 濾之。
         Y(n) = a1*Y(n-1) + a2*Y(n-2) + ... + ak*Y(n-k) + b0*X(n) + b1*X(n-1) + b2*X
      (n-2) + ... + bk*X(n-k)

      B. 優點:高通,低通,帶通,帶阻任意。設計簡單(用matlab)
      C. 缺點:運算量大

       

      Tags:單片機編程,經驗,單片機  
      責任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 久久乐国产精品亚洲综合| 色欲色香天天天综合网站| 久久婷婷国产综合精品| 色欲天天婬色婬香视频综合网| 久久精品桃花综合| 国产AV综合影院| 亚洲熟女综合色一区二区三区 | 伊人情人综合成人久久网小说| 色天使亚洲综合一区二区| 香蕉久久综合精品首页| 色综合久久久无码网中文| 伊人久久综合精品无码AV专区| 伊人久久大香线蕉综合网站| 久久久久一级精品亚洲国产成人综合AV区| 亚洲综合精品香蕉久久网97| 亚洲AV成人潮喷综合网| 亚洲国产成+人+综合| 久久综合精品视频| 综合国产精品第一页| 色噜噜狠狠色综合中文字幕| 狠狠色丁香久久婷婷综合蜜芽五月| 伊人久久大香线蕉综合影| 色综合久久加勒比高清88| 成人综合久久精品色婷婷| 狠狠色综合久久婷婷| 色狠狠色狠狠综合天天| 色综合久久最新中文字幕| 色青青草原桃花久久综合| 亚洲综合激情五月色一区| 狠狠色综合7777久夜色撩人| 伊人色综合一区二区三区影院视频| 日本一道综合色视频| 亚洲婷婷综合色高清在线| 自拍 偷拍 另类 综合图片| 久久综合偷偷噜噜噜色| 狠狠综合久久久久综合网| 思思91精品国产综合在线| 亚洲国产天堂久久综合| 国产综合精品一区二区三区| 色综合久久无码中文字幕| 国产成人亚洲综合网站不卡|