⑴ 什麼是單片機的中斷序號中斷序號1表示什麼 中斷序號3表示什麼
單片機的中斷序號決定該中斷的中斷向量的位置(即中斷服務程序的入口地址)
即 中斷序號就是中斷源在單片機的中斷向量表中的位置序號。
具體關系: 中斷向量=0003H+中斷序號×8
例如:
中斷0(即中斷序號為0 ) 其中斷向量=中斷服務程序的入口地址=0003H
中斷1(即中斷序號為1 ) 其中斷向量=中斷服務程序的入口地址=000BH
對於51單片機:
中斷序號0 表示的是外部中斷0的中斷序號
中斷序號1 表示的是定時計數器0的中斷序號
中斷序號2 表示的是外部中斷1的中斷序號
中斷序號3 表示的是定時計數器1的中斷序號
中斷序號4 表示的是串列口的中斷序號
中斷序號5 表示的是定時計數器2的中斷序號
呵呵 滿意就選滿意回答吧
⑵ PIC單片機有哪些中斷標志位
PIC16F87X的中斷標志位
INTF 外部觸發中斷標志位
T0IF TMR0溢出中斷標志位
RBIF RB埠電平變化中斷標志位
TMR1IF TMR1溢出中斷標志位
TMR2IF TMR2溢出中斷標志位
CCP1IF CCP1中斷標志位
CCP2IF CCP2中斷標志位
TXIF SCI同步發送中斷標志位
RCIF SCI同步接收中斷標志位
SSPIF SSP中斷標志位
BCLIF SSP IIC匯流排沖突中斷標志位
PSPIF 並行埠中斷標志位
ADIF A/D轉換中斷標志位
EEIF EEPROM中斷標志位
PIC874/877 中斷源數量 14種
PIC873/876 中斷源數量 13種
PIC870 中斷源數量 10種
PIC871 中斷源數量 11種
PIC872 中斷源數量 10種
⑶ c語言 PIC單片機
你這是PIC16位機的中斷編程規定的格式,包括_T1Interrupt都是規定的,連大小寫都得一模一樣。這個是定時器1的中斷函數申明。你可以在C30手冊中看到它們,
如可以看到其他中斷入口的名稱:
0 _INT0Interrupt
1 _IC1Interrupt
2 _OC1Interrupt
3 _T1Interrupt
4 _IC2Interrupt
5 _OC2Interrupt
6 _T2Interrupt
7 _T3Interrupt
8 _SPI1Interrupt
9 _U1RXInterrupt
10 _U1TXInterrupt
11 _ADCInterrupt
12 _NVMInterrupt
13 _SI2CInterrupt
14 _MI2CInterrupt
15 _CNInterrupt
16 _INT1Interrupt
17 _IC7Interrupt
18 _IC8Interrupt
19 _OC3Interrupt
20 _OC4Interrupt
。。。。。。
你要學C30,這個手冊是必看的,這個手冊目前最新版本號是K,文檔編號為DS51284K,共有200多頁英文版。可以在公司網站中下載:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010065
在這個頁面你可以下載到更多的資料和軟體。
⑷ 求 PIC 8位單片機 匯編指令比較全的,詳細點的
PIC單片機的數據手冊文檔里就有匯編指令的介紹。Microchip公司官網上有下載的。
如果要帶例子的那就找張明峰的書。他出書的時候是Microchip公司中國地區的應用工程師,很多PIC的中文版數據手冊就是他和他同事翻譯的。
⑸ 跪求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.