微控制器程式設計:開關輸入採用中斷的方式還是輪詢好?
開關輸入採用中斷的方式還是輪詢好?這個問題或許已經討論了很多年了吧,正因為如此,答案就很明瞭了,既然被爭論,說明兩種方式各有各的優點和不足。下面分開談談我的一些看法。
1、對於中斷。採用中斷的方式的好處是響應及時,不會錯過每個中斷資訊,但是正因為中斷如此的敏感,導致了其的不足,我們知道,一般的開關都是有抖動的,按一次開關,其實會抖動很多次,這樣就會造成中斷很多次,而其實你所預想本應該只有一次,如果你此時的中斷過多的處理一些東西,很容易造成混亂。如果你一定要用中斷的方式來檢測開關,那麼中斷函式最好知識對一些標誌進行處理,這樣的話,多次中斷也是同樣的效果,不易造成混亂。
2、對於輪詢。輪詢的好處是自帶濾波效果(有點厲害),因為多久輪詢一次由你來決定,加之我們可以用連續兩次檢測到按鍵按下的訊號(中間加點延時)才認為按鍵事件產生,有效的避免了抖動造成的一次按鍵事件造成多次響應的事情發生。當然這種不敏感的特性也有其弊端,因為輪詢的時間點是確定的,而按鍵事件的發生是不確定的,這樣就有可能造成微控制器錯過按鍵事件(按鍵發生時,微控制器正在幹別的事),所以應該在足夠短的時間片(比如每xms檢測一次)給予按鍵檢測,如果按鍵事件是頻繁發生的還好,否則的話,如此小的時間片給按鍵事件有點小小的浪費。
所以,還是凡事得看應用場合。。。
相關推薦
微控制器程式設計:開關輸入採用中斷的方式還是輪詢好?
開關輸入採用中斷的方式還是輪詢好?這個問題或許已經討論了很多年了吧,正因為如此,答案就很明瞭了,既然被爭論,說明兩種方式各有各的優點和不足。下面分開談談我的一些看法。 1、對於中斷。採用中斷的方式的好處是響應及時,不會錯過每個中斷資訊,但是正因為中斷如此的敏感,導致了其的不足,我們知道,一般
使用51微控制器採用中斷方式進行串列埠通訊的學習記錄:
使用51微控制器進行串列埠通訊的學習記錄之中斷方式: 1.51微控制器採用中斷方式的串列埠通訊過程及程式分析: 所謂中斷方式,就是串列埠收/發標志位出發中斷後,在中斷中執行既定操作,可通過函式呼叫來實現。 接收資料時 等待中斷->然後在中斷中接收資料 傳送資料時 傳
51微控制器程式設計:做一個簡易的流水燈
#include <reg52.h> #define uchar unsigned char #define uint unsigned int uint table[] = {0xfe
讀書筆記「Python程式設計:從入門到實踐」_7.使用者輸入和while迴圈
7.1 函式input()的工作原理 函式input() 讓程式暫停執行,等待使用者輸入一些文字。獲取使用者輸入後,Python將其儲存在一個變數中,以方便你使用。 message = input("Tell me something, and I will repeat it back t
練習十五:要求:獲取輸入的內容,並利用條件運算付的巢狀方式完成該題目
題目:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示 1 inputscort = input("學生的成績:") 2 if inputscort.isdigit(): 3 inputscort = int(inputscort) 4
STM32微控制器硬體I2C驅動程式(軟體輪詢方式)---摘自:FeoTech
感謝原作者:FeoTech 原文網址:http://feotech.com/?p=69 本程式主要用於驅動STM32微控制器晶片的硬體I2C暫存器,實現通過使用晶片自帶的I2C暫存器進行資料的傳送與接收. 本例程中採用I2C暫存器查詢的方式來實現資料傳輸,當I2C對應
《C語言程式設計:現代方法(第2版)(K.N.King 著)》學習筆記九:格式化輸入/輸出(2)
3.2 scanf 函式 就如同 printf 函式用特定的格式顯示輸出一樣,scanf 函式也根據特定的格式讀取輸入。像 printf 函式的格式串一樣,scanf 函式的格式串也可以包含普通字元
17-Java併發程式設計:執行緒間協作的兩種方式:wait、notify、notifyAll和Condition
Java併發程式設計:執行緒間協作的兩種方式:wait、notify、notifyAll和Condition 在前面我們將了很多關於同步的問題,然而在現實中,需要執行緒之間的協作。比如說最經典的生產者-消費者模型:當佇列滿時,生產者需要等待佇列有空間才能繼續往裡面放
《Python程式設計:從入門到實踐》第7章 使用者輸入和while迴圈
第7章 使用者輸入和while迴圈 7-1 汽車租賃 編寫一個程式,詢問使用者要租賃什麼樣的汽車,並列印一條訊息,如“Let me see if I can find you a Subaru”。
Java併發程式設計:執行緒間協作的兩種方式:wait、notify、notifyAll和Condition
在前面我們將了很多關於同步的問題,然而在現實中,需要執行緒之間的協作。比如說最經典的生產者-消費者模型:當佇列滿時,生產者需要等待佇列有空間才能繼續往裡面放入商品,而在等待的期間內,生產者必須釋放對臨界資源(即佇列)的佔用權。因為生產者如果不釋放對臨界資源的佔用權,那麼消費者
Python之路(第三十七篇)併發程式設計:程序、multiprocess模組、建立程序方式、join()、守護程序
一、在python程式中的程序操作 之前已經瞭解了很多程序相關的理論知識,瞭解程序是什麼應該不再困難了,執行中的程式就是一個程序。所有的程序都是通過它的父程序來建立的。因此,執行起來的python程式也是一個程序,那麼也可以在程式中再建立程序。多個程序可以實現併發效果,也就是說,當程式中存在多個程序的時候
微控制器組合語言程式設計:對 A 中內容開平方
===================================================1. 程式設計對累加器A中資料進行開方運算,結果仍儲存於A中。 2013-10-18 09:432
程式設計: 輸入某年某月某日,判斷這一天是這一年的第幾天?
沒有用函式做,定義了一個數組,裝每個月的月份天數。明天把改成函式在重做一遍,可以不用陣列 import java.util.Scanner; public class Which_day {
網路程式設計:epoll、accept觸發模式及阻塞方式的選擇
select(),poll()模型都是水平觸發模式,訊號驅動IO是邊緣觸發模式,epoll()模型即支援水平觸發,也支援邊緣觸發,預設是水平觸發 從表象看epoll的效能最好,但是在連線數少,並且連線都十分活躍的情況下,select和poll的效能可能比ep
小白每日程式設計:輸入一個4位整數,將個位、十位、百位、千位的數分解出來。
例如,給寫 int n = 9527; char buf[4]; 則分解結果:buf裡的4個元素的值依次為9,5,2,7 #include <stdio.h> int main() { int n = 9527; char buf[4]; for (
80x86 組合語言程式設計:輸入數字串,排序、並求最大和最小
;從鍵盤輸入一個ENTER結束的十進位制數字串, 按ASCII碼值降序排列這個數字串,;舉報|2013-12-10 21:36鼬風行 | 分類:組合語言 | 瀏覽61次;並另起一行,顯示出ASCII碼
51微控制器組合語言程式設計:用定時器控制輸出矩形波
80C51微控制器的時鐘頻率為12MHz,利用定時器T1和P1.0輸出矩形脈衝。波形只畫出了2段:一段為100us 另一段為50us。要完全的、完整的、詳細的編寫此程式的過程!謝謝懸賞分:5 | 解決時間:2011-1-9 15:24------------------------最佳答案:用一個定時器定時
STM32CubeMX學習教程之三:GPIO輸入之利用SysTick中斷給按鍵去抖
完整原始碼下載:https://github.com/simonliu009/STM32CubeMX-GPIO-Debounce上一篇博文講述瞭如何使用GPIO的外部中斷檢測按鍵控制LED。但是實際情況是,物理按鍵通常會有抖動,導致中斷多次被觸發。較好的設計,應該是在硬體上做
python程式設計:輸入一個正整數判斷它是不是素數
輸入一個正整數判斷它是不是素數 from math import sqrt def main(): num = int(input('請輸入一個正整數: ')) end = int(sqrt(num)) is_prime = T
c程式設計:求Fibonacci數列的兩種方式。
一種是輸入一個整數n,則程式輸出在n位置上的Fibonacii數字: #include<stdio.h> int Fibo(int n) { if(n==1||n==2) return 1; return Fibo(n-1)+Fibo(n-2); }