網站首頁 學習教育 IT科技 金融知識 旅遊規劃 生活小知識 家鄉美食 養生小知識 健身運動 美容百科 遊戲知識 綜合知識
當前位置:趣知科普吧 > 綜合知識 > 

使用stc12c5a60s2雙串口單片機時串口2的中斷服務子程序怎麼寫呢|中斷服務子程序怎麼寫

欄目: 綜合知識 / 發佈於: / 人氣:1.06W
1.使用stc12c5a60s2雙串口單片機時 串口2的中斷服務子程序怎麼寫呢

摘錄一段我寫的程序供參考:;------------------相關寄存器定義------------------------AUXR EQU 8EH ;輔助寄存器AUXR1 EQU 0A2H ;輔助寄存器1CLK_DIV EQU 97H ;時鐘分頻器S2CON EQU 9AH ;串口2控制寄存器S2BUF EQU 9BH ;串口2數據緩衝區BRT EQU 9CH ;波特率寄存器IE2 EQU 0AFH ;中斷控制寄存器2;-----------------串行初始化程序-------------------------UART_INIT: ORL PCON,#80H ;使能波特率倍速位SMOD MOV SCON,#50H ;8位數據,可變波特率 MOV S2CON,#50H ;8位數據,可變波特率 MOV BRT,#0FAH ;[email protected] ORL AUXR,#14H ;獨立波特率發生器時鐘爲Fosc,即1T ORL IE2,#01H ;允許串口2中斷 ANL AUXR,#03FH ;定時器12時鐘爲Fosc,即12T ANL AUXR,#0FEH ;串口1選擇定時器1爲波特率發生器 MOV TMOD,#21H ;設定定時器1爲8位自動重裝方式,0爲16位定時器 MOV TL1,#0FFH ;[email protected] MOV TH1,#0FFH ;設定定時器重裝值 MOV SERGET,#0 ;接收RS232 Pointer is 0 MOV SERPUT,#0 ;取值RS232 Pointer is 0 MOV RXGET,#0 ;接收RS485 Pointer is 0 MOV RXPUT,#0 ;取值RS485 Pointer is 0 CLR P4.4 ;485處於接收狀態 ORL IPH,#10H ; SETB PS ;串口1中斷優先級11爲最高 CLR ET1 ;禁止定時器1中斷 SETB TR1 ;啓動定時器1 CLR BUSY RET;-----------------串行通訊2中斷服務程序-------------------------SER2INT: PUSH ACC PUSH PSW MOV A,S2CON JNB ACC.0,SER2INT1 ;S2RI ANL S2CON,#NOT S2RI MOV A,S2BUF MOV B,A MOV R0,#RXRAM MOV A,RXPUT ANL A,#0FH ORL A,R0 MOV R0,A MOV A,B MOV @R0,A LCALL SENDRXDAT INC RXPUT SJMP SERINT2 SER2INT1: MOV A,S2CON JNB ACC.1,SERINT2 ;S2TI ANL S2CON,#NOT S2TI CLR BUSYSERINT2: POP PSW POP ACC RETI;-----------------串行通訊1中斷服務程序-------------------------SER1INT: PUSH ACC PUSH PSW PUSH DPL PUSH DPH SETB RS0 CLR RS1 JBC RI,SERTIRI1 ;是接收中斷,清除此標誌,轉接收 CLR TI ;是發送中斷,清除此標誌,中斷返回 SJMP SERENDSERTIRI1: MOV A,SBUF ;接收(讀入)數據 MOV B,ASERTIRI2: MOV R0,#SERRAM MOV A,SERPUT ANL A,#1FH ORL A,R0 MOV R0,A MOV A,B MOV @R0,A INC SERPUT MOV DLY03,A SETB SERBITSEREND: POP DPH POP DPL POP PSW POP ACC RETI。

中斷服務子程序怎麼寫 使用stc12c5a60s2雙串口單片機時串口2的中斷服務子程序怎麼寫呢
2.中斷服務子程序應至少包括哪些內容

1、中斷請求:中斷事件一旦發生或者中斷條件一旦構成,中斷源提交“申請報告”,與請求CPU暫時放下目前的工作而轉爲中斷源作爲專項服務

2、中斷屏蔽:雖然中斷源提交了“申請報告”,但是,是否得到CPU的響應,還要取決於“申請報告”是否能夠透過2道或者3道“關卡”(中斷屏蔽)送達CPU(相應的中斷屏蔽位等於1,爲關卡放行;反之相應的中斷屏蔽位等於0,爲關卡禁止通行);

3、中斷響應:如果一路放行,則CPU響應中斷後,將被打斷的工作斷點記錄下來(把斷點地址保護到堆棧),掛起“不再受理其他申請報告牌”(清除全局中斷標誌位GIE=0),跳轉到中斷服務子程序

4、保護現場:在處理新任務時可能破壞原有的工作現場,所以需要對工作現場和工作環境進行適當保護;

5、調查中斷源:檢查“申請報告”是由哪個中斷源提交的,以便作出有針對性的服務;

6、中斷處理:開始對查明的中斷源進行有針對性的中斷服務;

7、清除標誌:在處理完畢相應的任務之後,需要進行撤消登記(清除中斷標誌),以避免造成重複響應;

8、恢復現場:恢復前面曾經被保護起來的工作現場,以便繼續執行被中斷的工作;

9、中斷返回:將被打斷的工作斷點找回來(從堆棧中恢復斷點地址),並摘下“不再受理其他申請報告牌”(GIE=1),繼續執行原先被打斷的工作。

3.中斷服務子程序和普通子程序有什麼區別

區別:

1、程序是否提前安排好:中斷服務程序是隨機的,而普通子程序是預先安排好的。

2、結束程序不同:中斷服務子程序以RETI結束,而一般子程序以RET結束。

3、結束動作不同:中斷服務子程序RETI除將斷點彈回PC動作外,還要清除對應的中斷優先標誌位,以便新的中斷請求能被響應。一般子程序則無此項操作。

擴展資料:

當中央處理器正在處理內部數據時,外界發生了緊急情況,要求CPU暫停當前的工作轉去處理這個緊急事件。處理完畢後,再回到原來被中斷的地址,繼續原來的工作,這樣的過程稱爲中斷。

實現這一功能的部件稱爲中斷系統,申請CPU中斷的請求源稱爲中斷源,單片機的中斷系統一般允許多箇中斷源,當多箇中斷源同時向CPU請求中斷時,就存在一箇中斷優先權的問題。通常根據中斷源的優先級別,優先處理最緊急事件的中斷請求源,即最先響應級別最高的中斷請求。

中斷處理過程:

(1)保護被中斷進程現場。爲了在中斷處理結束後能夠使進程準確地返回到中斷點,系統必須儲存當前處理機程序狀態字PSW和程序計數器PC等的值。

(2)分析中斷原因,轉去執行相應的中斷處理程序。在多箇中斷請求同時發生時,處理優先級最高的中斷源發出的中斷請求。

(3)恢復被中斷進程的現場,CPU繼續執行原來被中斷的進程。

參考資料來源:百度百科-中斷服務程序

4.中斷服務子程序與普通子程序有哪些異同之處

一、主體不同

1、中斷服務子程序:是一種服務,是透過執行事先編好的某個特定的程序來完成的。

2、普通子程序:是一個大型程序中的某部份代碼,由一個或多個語句塊組成。

二、功能不同

1、中斷服務子程序:外界發生了緊急情況,要求CPU暫停當前的工作轉去處理這個緊急事件。處理完畢後,再回到原來被中斷的地址,繼續原來的工作。

2、普通子程序:負責完成某項特定任務,而且相較於其他代碼,具備相對的獨立性。

三、特點不同

1、中斷服務子程序:爲了在中斷處理結束後能夠使進程準確地返回到中斷點,系統必須儲存當前處理機程序狀態字PSW和程序計數器PC等的值。

2、普通子程序:常被使用在彙編語言層級上。子程序的主體是一個代碼區塊,當被調用時就會進入執行。

參考資料來源:百度百科-子程序

參考資料來源:百度百科-中斷服務程序

5.c語言中中斷服務子程序與其他子程序的區別

中斷是單片機的一個重要功能,中斷子程序專爲執行中斷功能,它是在發生中斷後,自動執行的,不需要主程序調用;普通子函數要主程序調用才能執行。

彙編裏的區別:

普通子函數用RET返回;中斷子程序用RETI返回,RETI返回時要清除中斷標誌的;

普通子函數調用時直接進入函數入口地址,中斷函數在中斷髮生時先進中斷入口

03H、08H、13H、18H、23H後隨即寫一個跳轉指令,再跳轉到相應語句。

C語言區別:

普通子函數用的是C語言裏的主函數調用子函數的方法,子函數可以有參數,有返回值;中斷函數沒有參數,沒有返回值;

中斷函數的寫法也不一樣,以80c51爲例:

void INT0() interrupt 0 using 1

{

}

interrupt 0不是是外部中斷0引發的中斷,必須寫; using 1

表示在中斷函數裏用第一組寄存器R0-R7.這個可以省略。

6.調用中斷服務程序和調用子程序有何分別

1. 子程序調用一定是程序員在編寫程序時事先安排好的,是可知的,而中斷是由中斷源根據自身的需要產生的,是不可預見的(用指令INT引起的中斷除外)。

2. 子程序調用是用CALL指令來實現的,但沒有調用中斷的指令,只有發出中斷請求的事件(指令INT是發出內部中斷信號,而不要理解爲調用中斷服務程序);

3. 子程序的返回指令是RET,而中斷服務程序的返回指令是IRET/IRETD。

4. 在通常情況下,子程序是由應用程序開發者編寫的,而中斷服務程序是由系統軟件設計者編寫的。

7.怎樣寫中斷服務程序

方法1. 用關鍵詞interrupt和中斷矢量編號定義中斷函數

這種方式最簡單也最直觀。缺點是程序的可移植性稍差。範例如下:

void interrupt 17 sci1_Recv_ISR(void){

。.}關鍵詞interrupt告訴編譯器此函數爲中斷服務函數,數字17告訴連接器該中斷矢量的偏移位置(以復位矢量偏移爲0計)。某一箇中斷響應對應的矢量入口編號可以在該芯片的DataSheet中查到。

方法2. 用關鍵詞interrupt定義中斷函數,中斷矢量入口由prm檔案指定,仍以上面的中斷服務函數爲例,這時函數的定義方式爲

void interrupt sci1_Recv_ISR(void){

。..}然後在項目對應的prm檔案中添加一行矢量位置定義:

VECTOR 17 sci1_Recv_ISR //指定的中斷服務矢量入口

方法3. 用#pragma TRAP_PROC定義中斷函數,中斷矢量入口由prm檔案指定。此類型的函數編譯器在將C代碼編譯成彙編指令時會在代碼前後增加必要的現場保護和恢復彙編代碼,同時函數的最後返回用匯編指令RTI而不是針對普通函數的RTS。例如