導航:首頁 > 操作系統 > 單片機的串列中斷

單片機的串列中斷

發布時間:2022-10-09 15:34:18

單片機里串列中斷服務函數作用是什麼呢

樓主的問題我覺得應該出在這里:該中斷函數是將接收的數據加一然後回顯,方法簡單明了,不錯。但是進入了死循環。void serial(void) interrupt 4 using 3{uchar i;if(RI){i=SBUF;SBUF=i+1;}//中斷內再出中斷,打亂了中斷服務程序的返回。if(TI){TI=0;}}修改的如下,希望樓主看完後明白這個是同步互斥的問題。void serial(void) interrupt 4 using 3{uchar i;if(RI){i=SBUF;ES=0;//關串列中斷SBUF=i+1;}//中斷內再出中斷,打亂了中斷服務程序的返回。ES=1;//開穿行中斷if(TI){TI=0;}}完整而完善的串口服務函數可以給樓主參考:#includeunsigned char UART_RX; //定義串口接收數據變數unsigned char RX_flag; //定義穿行接收標記/*********************************************************************************************函數名:UART串口初始化函數調 用:UART_init();參 數:無返回值:無結 果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產生波特率(佔用)備 註:振盪晶體為11.0592MHz,PC串口端設置 [ 2400,8,無,1,無 ]/**********************************************************************************************/void UART_init (void){EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)ES = 1; //允許UART串口的中斷TMOD = 0x20; //定時器T/C1工作方式2SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)TH1 = 0xE8; //定時器初值高8位設置TL1 = 0xE8; //定時器初值低8位設置PCON = 0x80; //波特率倍頻(屏蔽本句波特率為1200)TR1 = 1; //定時器啟動}/**********************************************************************************************//*********************************************************************************************函數名:UART串口接收中斷處理函數調 用:[SBUF收到數據後中斷處理]參 數:無返回值:無結 果:UART串口接收到數據時產生中斷,用戶對數據進行處理(並發送回去)備 註:過長的處理程序會影響後面數據的接收/**********************************************************************************************/void UART_R (void) interrupt 4 using 1{ //切換寄存器組到1RI = 0; //令接收中斷標志位為0(軟體清零)UART_RX = SBUF; //將接收到的數據送入變數 UART_dataRX_flag=1; //標記接收//用戶函數內容(用戶可使用UART_data做數據處理)//SBUF = UART_data; //將接收的數據發送回去(刪除//即生效)//while(TI == 0); //檢查發送中斷標志位//TI = 0; //令發送中斷標志位為0(軟體清零)}/**********************************************************************************************//*********************************************************************************************函數名:UART串口發送函數調 用:UART_T (?);參 數:需要UART串口發送的數據(8位/1位元組)返回值:無結 果:將參數中的數據發送給UART串口,確認發送完成後退出,採用非中斷方式備 註:/**********************************************************************************************/void UART_T (unsigned char UART_data){ //定義串口發送數據變數ES=0; //禁止穿行中斷SBUF = UART_data; //將接收的數據發送回去while(TI == 0); //檢查發送中斷標志位TI = 0; //令發送中斷標志位為0(軟體清零)ES=1; //打開穿行中斷}/*********************************************************************************************函數名:UART串口發送字元串函數調 用:UART_S (?);參 數:需要UART串口發送的數據(8位/1位元組)返回值:無結 果:將參數中的數據發送給UART串口,確認發送完成後退出,採用非中斷方式備 註:/**********************************************************************************************/void UART_S(unsigned char *str){while(1){if(*str=='\0') break;UART_T(*str++);}}/*********************************************************************************************函數名:主函數調 用:main();參 數:返回值:無結 果:備 註:/**********************************************************************************************/void main(){unsigned char Buf_data[]={" welcome to MCU world. \n\r"};UART_init();UART_S(Buf_data);while(1){if(RX_flag==1){UART_T(UART_RX);RX_flag=0;}}}

Ⅱ 單片機串口中斷執行流程

流程是:(主程序中)發送數據―等待中斷―發送成功產生中斷―進入中斷清除TL,再次發送―中斷返回―等待中斷―發送成功產生中斷―進入中斷清除TL,再次發送。。。。循環而已。

Ⅲ 8051單片機的串列口控制寄存器中有2個中斷標志位 它們是什麼和什麼

8051單片機的串列口控制寄存器中有2個中斷標志位 它們是RI和TI。TI是發送中斷標志,RI是接收中斷標志。標准51有5個中斷向量(不算復位),分別是外部中斷0,定時器0,外部中斷1,定時器1,串列口;總共有6個中斷標志,串列口的發送和接收共享一個中斷向量。

(3)單片機的串列中斷擴展閱讀:

作用:SCON寄存器用來控制串列口的工作方式和狀態,可以位定址在復位時所有位被清零,位元組地址98HPCON主要是為CHMOS型單片機的電源控制設置的專用寄存器,單位地址87H,不能位定址,最高位SMOD,為波特率選擇位。

8051單片機是PC 機的CPU 是基於馮諾伊曼的體系結構。單片機的存儲器配置:

1、 一個8 位的微處理器(CPU)。

2、 片內數據存儲器RAM(128B/256B),用以存放可以讀/寫的數據,如運算的中間結果、最終結果以及欲顯示的數據等,SST89 系列單片機最多提供1K 的RAM。

3、 四個8 位並行I/O 介面P0~P3,每個口既可以用作輸入,也可以用作輸出。

4、 五個中斷源的中斷控制系統。新推出的單片機都不只5 個中斷源,例如SST89E58RD 就有9 個中斷源。

5、 一個全雙工UART(通用非同步接收發送器)的串列I/O 口,用於實現單片機之間或單機與微機之間的串列通信。

6、 片內振盪器和時鍾產生電路,但石英晶體和微調電容需要外接。最高允許振盪頻率為12MHz。SST89V58RD 最高允許振盪頻率達40MHz,因而大大的提高了指令的執行速度。

參考資料來源:網路_8051單片機

Ⅳ 51單片機在什麼情況下會產生串口中斷

首先,你要用軟體允許中斷,即
C語言中
EA = 1; //允許總中斷
ES = 1; //允許串口中斷
匯編中可用
SETB EA ;允許總中斷
SETB ES ;允許串口中斷

當單片機接收到一幀數據後,RI會置1,向CPU申請中斷,若之前有中斷允許,則產生了中斷,進入中斷服務程序。當然,單片機發送完一幀數據,TI也會置1,同樣會產生中斷!

一般我們在發送數據時要關中斷,因為一般你不用在發送時不用處理數據;接收數據時要開中斷,以便你在中斷服務程序中將接收到的數據進行存儲並處理。

補充:其實,不管你有沒有允許中斷,上位機(此時即給單片機發送信息的機器)只要給單片機發送數據,單片機就會自動接收數據,並把它放在數據緩沖器SBUF中,如果你之前有允許串列口中斷,RI就會置1,向單片機CPU申請中斷,並進入中斷服務程序,即你問題中的serial()函數,做完這個函數後就會自動返回斷點。如果你沒有允許中斷,便不會產生串列中斷。

其實,你的問題有個錯誤:別的中斷都是某個I/O口電平變化產生。這只是外部中斷產生條件,不過,你之前也需要用軟體允許外部中斷。另外,常見的51系列單片機有5個中斷源三種中斷5:1、外部中斷0和1;2、定時器/計數器溢出中斷0和1;3、串列口中斷。另外,STC51系列還有定時器/計數器T2中斷,A/D轉換中斷,PWM中斷,串列中斷2等等。你還有什麼不懂的可以自己多翻一翻書,學到後面去了你就明白了。

你的問題中那個serial()函數中 P1=SBUF; 是把接收的數據送到並行P1口,然後那條 RI=0;是不可少的,這是用軟體清零RI,准備再次接受一幀數據產生中斷,如果你沒有這條語句,就會進入死循環,出不來了。

有什麼問題還可以Q我(1445090023),希望能給我評個最佳答案。

Ⅳ 什麼是單片機的中斷

不同的計算機其硬體結構和軟體指令是不完全相同的,因此,中斷系統也是不相同的。

計算機的中斷系統能夠加強CPU對多任務事件的處理能力。中斷機制是現代計算機系統中的基礎設施之一,它在系統中起著通信網路作用,以協調系統對各種外部事件的響應和處理。中斷是實現多道程序設計的必要條件。 中斷是CPU對系統發生的某個事件作出的一種反應。

引起中斷的事件稱為中斷源。中斷源向CPU提出處理的請求稱為中斷請求。發生中斷時被打斷程序的暫停點稱為斷點。

CPU暫停現行程序而轉為響應中斷請求的過程稱為中斷響應。處理中斷源的程序稱為中斷處理程序。

CPU執行有關的中斷處理程序稱為中斷處理。而返回斷點的過程稱為中斷返回。中斷的實現實行軟體和硬體綜合完成,硬體部分叫做硬體裝置,軟體部分稱為軟體處理程序。

響應處理

大多數中斷系統都具有如下幾方面的操作,這些操作是按照中斷的執行先後次序排列的。

1、 接收中斷請求。

2、 查看本級中斷屏蔽位,若該位為1則本級中斷源參加優先權排隊。

3、 中斷優先權選擇。

4、 處理機執行完一條指令後或者這條指令已無法執行完,則立即中止現行程序。接著,中斷部件根據中斷級去指定相應的主存單元,並把被中斷的指令地址和處理機當前的主要狀態信息存放在此單元中。

5、 中斷部件根據中斷級又指定另外的主存單元,從這些單元中取出處理機新的狀態信息和該級中斷控製程序的起始地址。

6、 執行中斷控製程序和相應的中斷服務程序。

7、 執行完中斷服務程序後,利用專用指令使處理機返回被中斷的程序或轉向其他程序。

沖突

在一些罕見的情況下,兩個ISA設備可以共享相同的 IRQ,只要它們不同時使用即可。為了解決這個問題,後來的PCI 匯流排允許 IRQ 共享。PCI Express沒有物理中斷線,並使用消息信號中斷(MSI) 到操作系統(如果可用)。

在早期的 IBM 兼容個人計算機中,中斷曾經是一種常見的硬體錯誤,當兩個設備嘗試使用相同的中斷請求(或 中斷)向可編程中斷控制器(PIC)發出中斷信號時會收到該錯誤。

PIC 期望每條線路僅來自一個設備的中斷請求,因此沿同一條線路發送中斷信號的多個設備通常會導致 中斷 沖突,從而導致計算機死機。

例如,如果在系統中添加數據機擴展卡並分配給中斷4,傳統上分配給串列埠1,則可能會導致中斷沖突。最初,中斷 7 是使用音效卡的常見選擇,但後來發現 中斷 7 會干擾列印機埠(LPT1)時使用了中斷5。該串列埠經常禁用可以用於其他設備的中斷線。

中斷 2/9 是 MPU-401 MIDI 埠的傳統中斷線,但這與ACPI系統控制中斷(SCI 在 Intel 晶元組上硬連線到 中斷9)沖突;

這意味著 ISAMPU-401帶有硬連線中斷2/9 的卡和帶有硬編碼 中斷 2/9 的 MPU-401 設備驅動程序不能在啟用 ACPI 的系統上以中斷驅動模式使用。

以上內容參考網路-中斷

Ⅵ 單片機串列通信中的中斷

置位就是表示要CPU去干什麼,只要CPU去幹了這個置位就沒用了,因為已經在幹了。中斷只是優先順序比較高的程序,程序不是沒有寫,而是已經包含進去了,只是你自己不用寫而已

Ⅶ 單片機串列口中斷程序

程序是沒有問題的,串口不一定非要使用中斷的,程序裡面只發送,不接收,中斷更沒有意義了。值得說明的是 ,一般如果允許接收的話,一般是要開啟中斷的,這樣可以盡可能的保證不丟失數據。

Ⅷ 單片機里串列中斷服務函數作用是什麼呢

通過串口的中斷函數可以實現在串口通信的一幀數據傳送完成後實現你想要的功能。比方說你想看看一幀的數據是否完成的傳送,可以利用串口通信的中斷函數去驗證。

Ⅸ 大家說說單片機串口中斷是怎麼回事

你這說的過於籠統了,得看你想知道的具體串口中斷問題。單片機串口主要是用於接收或者發送的。想明白這個,先說一下中斷這個概念,舉個例子,比如你今天工作需要一直編寫程序,可是到中午的時候你肚子餓了,就需要吃飯,這就好比是中斷請求,雖然你此時正在編寫程序進行工作,但是飢餓需要及時解決,於是你就先去吃飯了,吃飯回來之後你需要繼續編程工作,於是又回到正常工作中,這大概就說明了中斷的所有概念。單片機串口中斷,例如用串口接收GPS模塊的數據(這一般都是串口相連的),單片機可能需要一直的工作,不管是干什麼,但是你最需要的是接收GPS數據並進行處理,於是當接收到GPS信號時,就會產生串口中斷,然後進入中斷接收GPS數據,存儲在串口寄存器當中,當接收完之後關掉中斷,單片機繼續其他工作,當又有GPS數據需要接收時,便又產生串口中斷進行接收處理。這個大概就是單片機串口中斷的過程,不知有所了解沒

Ⅹ 8051單片機串口中斷怎麼進入

方法如下:
(1)使用串口直通線。設計電路時,單片機的RXD連接電路板DB9的TXD,單片機的TXD連接電路板DB9的RXD,具體實現可在232電平轉換晶元處反接。
(2)使用串口|交叉線。設計電路時,因為串口線已做交叉,單片機的RXD連接電路板DB9的RXD,單片機的TXD連接電路板DB9的TXD,均直連即可。 單片機與串口設備(如GPRS模塊、載波晶元等)通信時,一律將RXD與TXD反接,即單片機的RXD接設備的TXD,單片機的TXD接設備的RXD。(特殊標注其RXD與單片機RXD直連的除外,如華為的EM310)。
首先我們需要明白兩個概念,就是DTE和DCE。DTE是指數據終端設備,典型的DTE就是計算機和單片機。DCE是指數據通信設備,典型的DCE就是 MODEM。
RS232串口標准中的RXD和TXD都是站在DTE立場上的,而不是DCE。明白了這一點,再講下面的接線方法,就很好理解了。 單片機與計算機進行串口通信時,單片機的RXD接計算機的TXD,單片機的TXD接計算機的RXD。

閱讀全文

與單片機的串列中斷相關的資料

熱點內容
網盤忘記解壓碼怎麼辦 瀏覽:852
文件加密看不到裡面的內容 瀏覽:651
程序員腦子里都想什麼 瀏覽:430
oppp手機信任app在哪裡設置 瀏覽:185
java地址重定向 瀏覽:268
一年級下冊摘蘋果的演算法是怎樣的 瀏覽:448
程序員出軌電視劇 瀏覽:88
伺服器系統地址怎麼查 瀏覽:54
解壓游戲發行官 瀏覽:601
國外小伙解壓實驗 瀏覽:336
頂級大學開設加密貨幣 瀏覽:437
java重載與多態 瀏覽:528
騰訊應屆程序員 瀏覽:942
一鍵編譯程序 瀏覽:129
語音加密包哪個好 瀏覽:340
有什麼學習高中語文的app 瀏覽:282
安卓手機的表格里怎麼打勾 瀏覽:411
阿里雲伺服器有網路安全服務嗎 瀏覽:970
超解壓兔子視頻 瀏覽:24
單片機怎麼測負脈沖 瀏覽:175