⑴ PIC18單片機 外部中斷INT0,中斷觸發只能是上升或者下降嗎
PIC18單片機
外部中斷
INT0,中斷觸發只能是選擇上升或者下降,當然在編程時是可以變通的,
比如在
下降沿觸發中斷後,中斷處理時馬上設置成上升沿觸發中斷,
上升沿觸發中斷後,中斷處理時又馬上設置成下降沿觸發中斷,
⑵ pic外部中斷編程(rb0)怎樣初始化
你到底是要給RD口做中斷還是做數據口?
做普通輸入輸出的IO口的話,要修改TRISD寄存器,比如設置D口的高4位做輸入,低4位做輸出。那麼就是把0賦給要做輸出的位,把1賦值給做輸入的位:
BANKSEL TRISD ;換bank
MOVLW 0XF0 ;先把數據送到W臨時寄存器
MOVWF TRISD,F ; TRISD = 0XF0
⑶ pic16f877a的b埠可以用作哪些中斷
這種單片機的RB埠有以下兩種中斷功能,分為
1.RB0/INT:
外部中斷
INT
2.
RB4
~7埠電平變化中斷
⑷ pic單片機中的外設中斷和外部引腳中斷有什麼區別
你應該說的是PIC16系列單片機吧?
在PIC16系列單片機中,除TMR0,INT和RB電平變化中斷外的其他中斷,均稱為外設中斷,如AD轉換結束中斷,TMR1中斷等,都屬於外設中斷。
你說的外部引腳中斷,可能是INT中斷?它是特定的RB0/INT引腳上的上升沿或下降沿中斷,可以由OPTION寄存器設定。
⑸ 急!!PIC單片機中斷問題
請問你的中斷信號的頻率有多快?
⑹ 用PIC單片機外部中斷源TMR1IE寫時鍾程序,能否用非中斷的埠將其暫停(如RC0的引腳電平)
中斷產生之後,總中斷是會關閉的,你可以在中斷子程序裡面設定暫停,一直不中斷返回就可以了,或者是中斷返回的條件是rc0的邏輯值就可以了
⑺ 跪求pic 單片機 外部中斷函數解析
你這個是PIC那個晶元啊,各個PIC晶元型號不同,寄存器也不同。
猜想一下,RB0為中斷引腳,那可能是PIC16f88x系列的單片機。
那要好好看看這晶元的數據手冊了,這個個PORTB0口還對應了一個AD輸入端,如果不對ANSELH(模擬選擇器高位元組寄存器)這個寄存器進行操作,默認是AD輸入。所以你讀到的數值就不對了。所以,前頭配置時候需要ANSELH = 0; (如果不是F88x系列,那看一下對應的單片機的數據手冊)
況且,並不需要那樣寫中斷程序,也不能這樣寫。 因為PIC單片機沒有中斷向量入口地址選擇。所以它一遇到中斷信號便進入中斷子函數,如果你的程序還有其他中斷的話,就可能出錯(或者單片機因干擾,產生內部某個外設模塊的中斷,也會調用你寫的外部中斷程序)
所以,首先中斷子函數開始就需要判斷外部中斷標志位INTF是否被置位:
if(INTF)
{
//這個大括弧內寫你的中斷操作
}
根據我做的經驗,PIC單片機的中斷內部最好不要寫延時函數,甚至不要調用其他函數,因為在調用中斷子函數時候,需要中斷的現場保護。在中斷里調用其他函數,會影響現場保護時候的堆棧操作,而引起出錯甚至程序跑飛。
所以當中斷產生的時候,直接給a++即可,既:
void interrupt INT()
{ GIE = 0;
if(INTF)
{
INTF = 0;
a++;
}
GIE = 1;
}
如果是像按鍵判斷的話,可以改一下硬體電路,在RB0輸入前串上一個施密特觸發器74HC14,這樣可以在硬體上進行消抖。如果非要軟體消抖,可以把延時放在主程序里,即進入中斷後把一個變數置位,然後退出中斷程序,在主程序里延時並判斷是否還為1.
⑻ 為什麼PIC單片機中將TMR0設置為外部脈沖計數中斷時,對TMR0寫操作使其變為外部上升沿中斷
定時器好像只能做外部脈沖寬度測量和脈沖技術吧,外部中斷用int0、1之類io口啊!我對匯編不熟,你看看是不是從中斷返回立刻把PORTD,1的清零了