關於PIC中斷

2021-07-04 20:15:50 字數 1364 閱讀 2263

pic微控制器有多個中斷源,16系列只有乙個中斷入口,18系列有兩個中斷入口,不同編譯器下書寫格式又不大一樣。網上資源千篇一律,也不夠系統,只是簡單的羅列程式,**生存的環境不一樣也少有說明。在此做個簡單的總結,因為又走了彎路...

1.先說18系列(mcc18編譯器下):

mplab c18不自動把中斷服務程式放在中端向量處。通常將goto指令放在中斷向量處,從而把控制權轉交給相應中斷服務程式。

void low_isr(void);

void high_isr(void); 

*****************************低階中斷入口及服務子程式************************************/

#pragma code low_vector=0x18//低優先順序中斷入口

void interrupt_at_low_vector(void)

#pragma interrupt low_isr

#pragma code

void low_isr(void)

*****************************高階中斷入口及服務子程式************************************/

#pragma code high_vecotr=0x08//高優先順序中斷入口

void interrupt_at_high_vector(void)

#pragma code

#pragma interrupt high_isr

void high_isr(void)

2.再說18系列(picc18編譯器下):

//void pic18f_high_isr(void);

//void pic18f_low_isr(void);

*****************************低階中斷服務子程式************************************/

#pragma interrupt  lowlow_priority 

pic18f_low_isr

void pic18f_low_isr (void)

*****************************高階中斷服務子程式************************************/

#pragma interrupt  pic18f_high_isr

void pic18f_high_isr (void)

3.三說16系列(picc編譯器下)(只有乙個中斷入口,無所謂高了就):

void interrupt isr (void)

void init_interrupt()

就寫到這裡吧,留著自己看,不再這再走彎路

PIC微控制器之中斷

1 微控制器在任何情況下的復位,均會導致總遮蔽位和其他的中斷遮蔽位清0,即在預設狀態下,禁止cpu響應所有的中斷。2.中斷標誌位的狀態與該所有的終端遮蔽位無關,即不管是否允許cpu響應中斷源的中斷請求,只要滿足了中斷條件,中斷標誌位就會被置1 3.當系統開放某一中斷源時候,中斷源就通過過中斷標誌位向...

PIC 外部中斷INT0

外部中斷int0就是在外部條件滿足的情況下,簡單的講,就是對微控制器內部的乙個暫存器int0if會制1的操作 include config 1,xt 晶振為外部4m config 2,wdtdis 看門狗關閉 config 4,lvpdis 禁止低電壓程式設計 define uchar unsign...

PIC微控制器中斷服務程式

void interrupt isr void 中斷服務程式 if tmr1ie tmr1if 判tmr1 中斷 t 中斷結束並返回 picc 會自動加入 實現中斷現場的保護,並在中斷結束時自動恢復現場,所以程式設計員無需像編寫匯程式設計序那樣加入中斷現場保護和恢復的額外指令語句。但如果在中斷服務程...