Transcript 輸入控制
單元三 基本I/O控制---輸入 1 8051輸入電路之設計 若要將8051的PROT連接開關做為輸入使用, 必需要先將連接開關的接腳用程式設為Hi, 接著只要讀取到該接腳為Low時即代表開關 有動作,電路連方式如下圖所示: 此點常態為「1」,當 開關按下後因開關短路 接地而變為「0」 將此接腳以 SETB的命令 設為「1」 2 接點開關的機械彈跳 由於開關為機械彈簧結構,因此按壓後會有 短暫的彈跳特性,如下圖說明: 理想訊號輸出 維持10mS至20mS 實際輸出訊號 3 機械彈跳的影響 由實際訊號圖形可知,由於彈跳的原故,會 使得原本一應產生一個負緣(或正緣)訊號,變 成多個,進而使電路造成誤動作。 4 消除機械彈跳的方法(一) 方法一:以硬體電路作波形整形 利用電容暫態特性(即電容兩端電壓無法瞬間變 化)來吸收彈跳訊號。 以CMOS邏輯來看,輸入電壓若小於0.3Vcc則可視 為邏輯0,因此RC之計算為: VCC (1 e e t RC t RC ) 0.3VCC 0.7VCC t ln 0.7 RC RC 2.8t t 以10mS至20mS代入 5 消除機械彈跳的方法(二) 方法二:改良式硬體電路作波形整形 樞密特整形 緩衝器 6 消除機械彈跳的方法(三) 方法三:以軟體的方式來消除(以P3.3接開關) 檢查開關是否按下 NO P3.3=0 YES 開關被按下 以程式做10毫秒 至20毫秒的延遲 (等彈跳過去) 接著再繼 續程式 7 位元判斷跳躍指令-JB 指令格式: JB 要判斷的位元, 要跳躍的位址(LABEL) 說明: 當所指定要判斷的位元為「1」時會跳躍到指定 的程式位址(即LABEL),若為「0」則忽略此 一程式,直接執行下一行。 位元=1 YES 跳到指定位址 NO 8 位元判斷跳躍指令-JNB 指令格式: JNB 要判斷的位元, 要跳躍的位址(LABEL) 說明: 當所指定要判斷的位元為「0」時會跳躍到指定 的程式位址(即LABEL),若為「1」則忽略此 一程式,直接執行下一行。 位元=0 YES 跳到指定位址 NO 9 判斷單一開關動作的方法 方法一: NO P3.3=0 YES 以程式做10毫秒 至20毫秒的延遲 (等彈跳過去) 接著再繼 續程式 X: JB P3.3,X ACALL SDELAY . . 方法二: X: JNB P3.3,Y AJMP X Y: ACALL SDELAY . . 10 判斷單多個開關動作的方法(一) 功能 P3.3=0 YES 功能一 NO P3.4=0 YES 功能二 NO P3.N=0 NO YES 功能N X: JB AJMP Y: JB AJMP Z: P3.3,Y F1 P3.4,Z F2 . . AJMP X F1:ACALL SDELAY . . AJMP X F2:ACALL SDELAY . . AJMP X 11 判斷單多個開關動作的方法(二) X: JNB JNB P3.3=0 YES 功能一 NO P3.4=0 YES 功能二 NO P3.N=0 NO YES 功能N P3.3,F1 P3.4,F2 . . AJMP X F1:ACALL SDELAY . . AJMP X F2:ACALL SDELAY . . AJMP X 此種方式程式較為精簡,但因JNB 及JB等指令其跳躍能力最大為 256Bytes,若功能段程式過長可能 會造成無法跳躍的錯誤 12 範例程式動作 基本設定 YES A=0FFH P1=A ORG START: MOV DJNZ MOV 0 R0, #0H R0,$ SP,#60H P3.3=1 MOV MOV A,#0FFH P1,#0FFH NO 消除彈跳 YES P3.3=0 NO 消除彈跳 A=NOT A P1=A AGAIN: JB P3.3,$ ACALL JNB SDELAY P3.3,$ ACALL SDELAY CPL MOV A P1,A AJMP AGAIN 13 END 14