⑴ 如何設置51單片機管腳為上升沿觸發中斷
不能設置上升沿觸發中斷,要使上升沿觸發中斷,只能將該信號加一個非門再接入到外部中斷口。
⑵ MSP430單片機I\O埠的上升沿中斷和下降沿中斷有什麼區別
上升沿中斷就是檢測到外部IO電平由低到高則產生中斷,下降沿則是由高到低則產生中斷。實際應用時結合具體電路來使用。比如外部器件某埠正常時是高電平,出問題了變為低電平,msp430要檢測到這樣的信號,就要設置成下降沿中斷。
⑶ 怎麼樣利用51單片機實現上升沿中斷
TCON的值沒有設定
TCON默認0x00,所以IT0的值為低,表示中斷0為低電平有效
當IT0為高,表示下降沿有效
如果想要實現上升沿有效可以加反向器
⑷ 單片機如何做上升沿
單片機上升沿:
順時針旋轉A超前B相信號90°:
A: _|--|__|--|_
B: __|--|__|--|
逆時針旋轉B相信號超前A相信號90°:
A:__|--|__|--|_
B:_|--|__|--|__
下面是AT89C2051檢測並進行二倍頻程序:
;採用外部中斷方式
ORG 00H
LJMP MAIN
ORG 03H
LJMP INT0
ORG 13H
LJMP INT1
ORG 50H
MAIN: MOV SP,#40H
MOV P3,#0FFH
MOV IE,#10000101B ;設定外部中斷
MOV TCON,#00000101B
SETB EA
MA1: MOV P1,#0FFH
MOV P3,#0FFH
SJMP MA1
;*******************
INT0: PUSH PSW
CLR EA
I0: JNB P1.0,FAN
CLR P3.4
SJMP INT0END
FAN: CLR P3.5
INT0END:
POP PSW
SETB EA
MOV P3,#0FFH
RETI
INT1: PUSH PSW
CLR EA
JNB P1.0,ZHENG
CLR P3.5
SJMP INT1END
ZHENG: CLR P3.4
INT1END:
POP PSW
SETB EA
MOV P3,#0FFH
RETI
⑸ 51單片機外部中斷的觸發方式
51單片機的外部中斷有兩種觸發方式可選:電平觸發和邊沿觸發。選擇電平觸發時,單片機在每個機器周期檢查中斷源口線,檢測到低電平,即置位中斷請求標志,向CPU請求中斷。選擇邊沿觸發方式時,單片機在上一個機器周期檢測到中斷源口線為高電平,下一個機器周期檢測到低電平,即置位中斷標志,請求中斷。
這個原理很好理解。但應用時需要特別注意的幾點:
1) 電平觸發方式時,中斷標志寄存器不鎖存中斷請求信號。也就是說,單片機把每個機器周期的S5P2采樣到的外部中斷源口線的電平邏輯直接賦值到中斷標志寄存器。標志寄存器對於請求信號來說是透明的。這樣當中斷請求被阻塞而沒有得到及時響應時,將被丟失。換句話說,要使電平觸發的中斷被CPU響應並執行,必須保證外部中斷源口線的低電平維持到中斷被執行為止。因此當CPU正在執行同級中斷或更高級中斷期間,產生的外部中斷源(產生低電平)如果在該中斷執行完畢之前撤銷(變為高電平)了,那麼將得不到響應,就如同沒發生一樣。同樣,當CPU在執行不可被中斷的指令(如RETI)時,產生的電平觸發中斷如果時間太短,也得不到執行。
2) 邊沿觸發方式時,中斷標志寄存器鎖存了中斷請求。中斷口線上一個從高到低的跳變將記錄在標志寄存器中,直到CPU響應並轉向該中斷服務程序時,由硬體自動清除。因此當CPU正在執行同級中斷(甚至是外部中斷本身)或高級中斷時,產生的外部中斷(負跳變)同樣將被記錄在中斷標志寄存器中。在該中斷退出後,將被響應執行。如果你不希望這樣,必須在中斷退出之前,手工清除外部中斷標志。
3) 中斷標志可以手工清除。一個中斷如果在沒有得到響應之前就已經被手工清除,則該中斷將被CPU忽略。就如同沒有發生一樣。
4) 選擇電平觸發還是邊沿觸發方式,TCON 控制寄存器
設置。應從系統使用外部中斷的目的上去考慮,而不是如許多資料上說的根據中斷源信號的特性來取捨。比如,有的書上說(《Keil C51使用技巧及實戰》),就有類似的觀點。
⑹ 用51單片機匯編語言檢測上升沿和下降沿
這里只講原理,不關注速度。實際設計工作中,已經有很多單片機能夠識別io埠上升沿和下降沿中斷,且方式不止一種。
sbit
io_inp=p2^1;輸入端
bit
old_bit;輸入端電平記憶
unsigned
char
low_high;上升下降沿標志,0=無變化,1=上升沿,2、下降沿
void
io_rest(void)
{
if(old_bit=!io_inp)
{
old_bit=io_inp;
if(io_inp=1)
low_high=1;
else
low_high=2;
}
}
void
main(void)
{
old_bit=io_inp=p2^1;
while(1)
{
low_high=0;
io_rest(void);
//在此應用
}
}
(6)單片機上升沿中斷擴展閱讀:
直接使用匯編指令編寫單片機程序,對硬體的控制更加直接,可以直接操作物理地址,寄存器,埠等;其它更高級的語言(如:C語言)對硬體的控制是依賴於類庫來實現的。並且,對於一些對程序大小和運行速度有非常嚴苛要求的項目而言,都必須使用匯編指令。
C語言只是為了方便編寫,與機器打交道的其實都是2進製得代碼,匯編語言就是這些代碼好記憶的名稱和規則,只是比C語言難理解些。