輸入控制

Download Report

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