日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]INT外部中斷是幾乎所有通用單片機,嵌入機中都會帶有的,早期的51系列和arm系列也都有,然而大多數(shù)因為設計原因,多只有帶兩個INT,最近別人提到了一個“所有端口都可以外部中斷”這樣的說法,因為表示存疑,因此找了

INT外部中斷是幾乎所有通用單片機,嵌入機中都會帶有的,早期的51系列和arm系列也都有,然而大多數(shù)因為設計原因,多只有帶兩個INT,最近別人提到了一個“所有端口都可以外部中斷”這樣的說法,因為表示存疑,因此找了些資料,也就找到了avr328p自帶的PCINT引腳功能

INT外部中斷和AVR和PCINT具體區(qū)別如下:

差別1. INT限制在了兩個端口上面,而PCINT則是所有接口都具備。

差別2. INT具有上沿,下沿,低電平,高電平觸發(fā)這幾種模式,而PCINT只有測量電平的變化這一個模式。

差別3. INT可以了解具體是哪個口觸發(fā)的,而PCINT不行。

差別4. PCINT不會直接跳轉入指定的程序,用戶需要讀取寄存器來做判斷是哪個PCINT端口產生了變化。

差別5. INT0和INT1各自可配置一個中斷程序入口,而所有的PCINT都只會觸發(fā)跳轉進入一條指定的程序。

提供一道avr環(huán)境下的PCINT相關代碼與注釋,代碼功能是初始化三個PCINT

參考地址:https://sites.google.com/site/qeewiki/books/avr-guide/external-interrupts-on-the-atmega328

#include

#include// 頭文件,內含了uint8的聲明

#include// Needed to use interrupts

volatileuint8_t portbhistory = 0xFF;// default is high because the pull-up

int main(void)

{

DDRB &= ~((1 << DDB0) | (1 << DDB1) | (1 << DDB2));//拉低PB0,1,2三個口的電平
// PB0,PB1,PB2 (PCINT0, PCINT1, PCINT2 pin)現(xiàn)在處于輸入態(tài)

PORTB |= ((1 << PORTB0) | (1 << PORTB1) | (1 << PORTB2));//開啟上拉

// PB0, PB1, PB2 現(xiàn)在處于上拉輸入狀態(tài)下


PCICR |= (1 << PCIE0);//設置 PCIE0以啟用 PCMSK0 偵測

PCMSK0 |= (1 << PCINT0);//設置 PCINT0 來測量狀態(tài)變化并產生中斷


sei();// turn on interrupts


while(1)

{


}

}

ISR (PCINT0_vect)

{

uint8_t changedbits;//設立一個無符號整數(shù)來記錄寄存器的變化



changedbits = PINB ^ portbhistory;

portbhistory = PINB;


if(changedbits & (1 << PINB0))

{


}


if(changedbits & (1 << PINB1))

{


}


if(changedbits & (1 << PINB2))

{


}


}


結論:

PCINT在當年的設計中堪稱創(chuàng)新,但和所謂的全端口外部中斷依然有一定差距,但相對于按鍵掃描等方式來說,依然有一部分中斷服務的優(yōu)勢


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉