娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

    所有的中檔系列PIC單片機,PORTB端口最高的4個引腳(RB7~RB4)在設為輸入模式時,當輸入電平由高到低或由低到高發生變化時,可以讓單片機產生中斷。這就是通常所說的引腳狀態變化中斷。

    在設計引腳中斷程序時,有三個需要特別注意的地方。一是,在清除P0RTB中斷標志位RBIF之前,必須安排一條必不可少的,以PORTB端口數據寄存器PORTB為源寄存器的讀操作指令。放置這一指令的目的有時并不只是為了讀取有用的數據,而是為了取消狀態變化的硬件信號,以便順利清除RBIF標志位,為下一次中斷做好準備。二是,由于端口PORTB是引腳電子變化中斷,即無論引腳出現上升沿還是下降沿都會產生中斷請求,所以必須處理好不需要的虛假中斷。三是,一般都利用PIC單片機的引腳功能來檢測按鍵,所以必須處理好按鍵消抖的問題。

 

    2 引腳中斷程序設計

    在主程序里先設置有關的寄存器。

    ◇設置TRISB寄存器,使RB7~RB4相關的引腳處于輸入狀態;

    ◇如果需要弱上拉,通過OPTION_REG的第7位設置;

    ◇RBIF=O;

    ◇RBIE=1;

    ◇GIF=1。

    響應狀態變化后的中斷服務程序。

    ◇檢查RBIF是否為l,為l則是引腳變化引起的中斷;

    ◇調用延時程序,延時20~30 ms,目的是為了按鍵去抖;

    ◇判斷是引腳出現上升沿還是下降沿引起的中斷;

    ◇調用按鍵處理程序;

    ◇讀PORTB口的值,取消狀態變化的硬件信號;

    ◇清除RBIF標志。

    筆者認為上面程序設計最大的問題是在中斷程序里調用延時程序。大家知道,中檔PIC單片機只有8層深度的硬件堆棧,在中斷里調用于程序出現極易堆棧溢出的情況。另外,PIC單片機中斷程序人口只有一個,在響應中斷的請求時,PIC單片機就會自動把全局中斷的使能位(INTCON的第7位GIF)清除,這樣其他中斷就暫時不能被響應(此時,如果別的中斷發出的中斷請求,標志位將一直保留著),直到這個中斷程序退出后才會得到響應。這就要求我們設計中斷程序的時候必須盡量短,避免調用子程序,更不要在中斷里進行復雜的運算。

    下面給出筆者設計程序時的思路。

    當引腳狀態變化引起中斷時,在中斷子程序里首先判斷引起中斷的原因是不是我們需要的變化引起的中斷。如果是,不要在這里延時,而是設置一個標志位,接著清除中斷標志,退出中斷。中斷程序如下:

    else if((RBIE&RBlF)==1){ //如果引腳變化引起中斷

    if(RB4==0){ //RB4上的按鈕接地

    key=1; //按鍵標志位置位

    }

    RBIF=0; //清除引腳中斷標志位

    }

    其中,if(RB4==0)語句相當于讀取了PORTB端口數據寄存器,取消了狀態變化的硬件信號。

    下面詳細介紹怎么樣進行按鍵去抖。

    首先,在定時器中斷里設置一個lms的時間基準標志位“SYSlms”,每到lms,“SYSlms”便置位。程序如下:

    unsigned char count;

    if((ToIE&TOIF)==1){ //定時器中斷

    TMRO+=0x09; //每250μs中斷一次

    if(count==4){

    count=0;

    SYSlms=l; //系統時間標志

    couot++;

    }

    T0IF=0; //清除時鐘中斷標志位

    }

    有了這個時間基準,便可以在主程序里進行按鍵去抖處理了。為了更好地利用這個時間基準,定義一個消息標志SYSTime,筆者把它稱作時間消息。為了讓這個消息有自我發布和自我消失的功能.定義了如下一個宏:

    bit SYSTime;

    #defincTimeEnahle()SYSTime=0,if(SYSlms){SYSTime=l;SYSlms=0;)

    可以把TimeEnable()放到主程序死循環的任何地方,每當程序執行這個宏,SYSTime就會清零,這就是標志位的自我消失.如果在定時器時間基準標志位SYSlms已經置位的話,SYSTime就會置1,這樣別的程序就可以利用這個時間消息了,這就是消息的自我發布。下面就是利用這個時間消息來進行按鍵延時去抖的,首先看一下按鍵掃描子程序;

    void seaakey(){

    unsigned char KeyTime,KeyTask;//定義任務時間參數、

    //任務參數

    switch(KeyTask){

    case0:if(key){

    KeyTime=30; //準備延時30 ms

    KeyTask++; //準備好下一個任務

    kcy=0;

    }

    break;

    case I:KeyTime--; //延時30 ms

    if(KeyTime==0)Key+ask++;

    break;

    case2;if(RB4==o){

    //調按鍵處理程序

    KeyTask=0;

    }

    else KeyTask=0;//退出任務

    break;

    }

    }

    在主程序的死循環中這樣用:

    while(1){

    TimeEnable();

    If(SYSTime==1){sCANkey();)

    //在此可以添加其他程序

    只有有時問消息的時候才執行按鍵掃描程序。可以看到,進入掃描程序執行第一次的時候,程序首先判斷按鍵標志位有沒有置位,置位的話(也就是有按鍵按下的話),任務時間參數(KeyTime)賦值為30,這是延時30ms,去抖,當然你也可以設置為其他的時間值;同時任務參數 (KeyTask)加1。1ms后,再進入掃描程序,這個時候掃描程序執行casel的語句,這樣30次后(延時了30ms),任務參數(KeyTask)加1,值為2。lms后,再進入掃描程序,將執行case 2的語句,首先在這里再次判斷是不是按鍵還在按下,如果是就調按鍵的處理程序,如果不是。就退出按鍵掃描程序。在這里,還可以加入按鍵是否抬起的判斷程序。

    這樣設計的引腳變化程序,CPU開銷小,效率高,不會出現堆淺溢出的問題,提高了系統的實時性。


關鍵字:PIC單片機  中斷程序 引用地址:PIC單片機引腳中斷程序設計技巧

上一篇:LED數碼顯示函數的應用
下一篇:基于PIC16F84A單片機編輯LED數碼管秒顯示器的程序

0

推薦閱讀

全球電子元器件與開發服務分銷商e 絡盟3月6日宣布與 Amphenol SV Microwave 簽署新的全球特許經營協議。這一合作將擴大e絡盟射頻連接器、適配器和電纜組件的產品范圍,新品具有高達 100 GHz 的高頻微波頻段。?Amphenol SV Microwave 50 多年來一直致力于設計、制造射頻和微波同軸連接器、電纜組件和無源元件,是射頻和微波行業的世界領先企業...
前言近幾年隨著社會、經濟水平的發展,人們對家居品質的追求越來越高,居家生活舒適化、智能化廣受推崇;促使了智能家居行業在近幾年來發展勢頭的迅猛。各品牌廠商紛紛搶占智能家居市場,布局、調整智能家居戰略體系。目前,從市場占比來看,在2017年的時候,智能電視、智能空調、智能洗衣機和智能冰箱的市場零售量滲透率分別達到88.3%、38.5%、27.3%和13%...
  鍍層測厚儀工作原理  鍍層測厚儀是將X射線照射在樣品上,通過從樣品上反射出來的第二次X射線的強度來。測量鍍層等金屬薄膜的厚度,因為沒有接觸到樣品且照射在樣品上的X射線只有45-75W左右,所以不會對樣品造成損壞。同時,測量的也可以在10秒到幾分鐘內完成?!   y量原理儀器  一. 磁吸力測量原理及測厚儀  永久磁鐵(測頭)與導磁鋼材...
根據河南周口市政府門戶網站,富士康工業互聯網股份有限公司與周口市人民政府日前舉行富士康周口科技工業園項目簽約儀式。據悉,富士康周口科技工業園項目總投資15億元人民幣,將主要生產、研發手機、平板、筆記本電腦及穿戴裝置等關鍵零組件,兩期建成后預計年產值可達31億元人民幣,用工人員可達30000人。臺媒援引產業界人士話述,工業富聯此舉主要是為...

史海拾趣

問答坊 | AI 解惑

怎么樣在wince中 用win32 API創建一個按鈕

如題 在vs2005 中開發智能設備 用WIN32 API 怎么創建一個按鈕…

查看全部問答∨

關于STM32L151的幾個問題

1. 何處可以得到 STM32L151 的片子; 2. STM32L151 的內部時鐘可以支持 USB嗎? 3. IAR5.3 +jilink 7 可以支持STM32L151? 謝謝!…

查看全部問答∨

請教:我設置了開機密碼但是無法彈出軟鍵盤

我設置了開機密碼但是無法彈出軟鍵盤,這樣沒辦法進入系統也沒辦法關機,請教如何關閉密碼或者調出軟鍵盤 是windows CE6.0的 謝謝各位大大了! [ 本帖最后由 qty0 于 2011-7-28 20:21 編輯 ]…

查看全部問答∨

一個簡單的DA應用程序

一個簡單的DAC程序,輸出正弦波?!?

查看全部問答∨

(征文)我的51之路

        我是在大三的時候正兒八經開始學51單片機。           大二,有了一年焊接各種小電路的經歷,對于阻容和二三極管等等器件有了一些粗淺的基礎認識以后,我決定邁向一個全新的領域,也是 ...…

查看全部問答∨

自制的高頻變壓器

自制的高頻變壓器,勉強做好,通電后有尖叫聲,啥原因??在高頻變壓器自制方面給點意見,感覺很難…

查看全部問答∨

cc2480中文數據應用資料,找了很久,很大家分享下

   這是CC2480芯片的 中文資料,找了很久的  自我感覺還不錯…

查看全部問答∨

12864學習筆記_5---12864液晶串行讀寫操作函數

在對12864進行控制的操作中,對液晶的讀寫操作是最基本、最底層的操作,是一切其他操作的基礎。 而12864液晶串行連接只需要兩根線就可以實現對液晶的完全控制,可以大大節省IO口。 而對液晶的讀操作,又是對液晶單個像素點進行控制的基礎,也是用 ...…

查看全部問答∨

英飛凌的OPTIGA™ Trust安全解決方案可保護小型電子器件和配件免遭盜版侵害

產品剽竊每年給企業造成了數十億美元的經濟損失。這種仿冒現象不只限于奢侈品和生活用品,它還普遍存在于小型電子器件甚至是打印機墨盒制造領域。英飛凌(FSE: IFX / OTCQX: IFNNY)近日宣布推出全新的OPTIGA™ Trust驗證芯片,它可幫助電子 ...…

查看全部問答∨
小廣播
添点儿料...
无论热点新闻、行业分析、技术干货……
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 都江堰市| 古蔺县| 讷河市| 延吉市| 清水河县| 城口县| 本溪| 宽甸| 长兴县| 寿光市| 洛川县| 诸暨市| 绍兴市| 南安市| 阳春市| 永泰县| 得荣县| 安国市| 临泽县| 衡东县| 泸水县| 香河县| 平阳县| 常德市| 马尔康县| 邻水| 桑日县| 西城区| 长春市| 句容市| 沂源县| 青海省| 南皮县| 苏尼特右旗| 民县| 潢川县| 嘉鱼县| 揭阳市| 兴文县| 华蓥市| 东台市|