① 51單片機中斷程序服務時間長好還是短好
通常情況下越短越好。因為進入中斷以後,主程序停止運行,再來中斷可能會導致堆棧溢出。
看具體應用,有的程序一生都在等待那個唯一的中斷,主程序就一句while(1){.....}
② 單片機中斷有什麼作用
51單片機中的外部中斷有什麼作用?
可以打個比方,每天上班你都隨時需要知道你同事的工作進度情況,你是希望你不停地打個電話去問「你做完了嗎」,還是希望他做完了主動打個電話給你講「我做完了,我們談談吧」。這就是中斷的意義,在不需要的時候不影響處理 器做其它的事情,提高效率,增強程序的實時性。
51單片機中什麼是中斷?其作用是什麼?怎麼用?用自己的理解回答把
中斷就是中途打斷。
通俗解釋:
你在看影碟,有人敲門(中斷源),中斷了你看影碟,觀看暫停。處理敲門的事宜(中斷目的),處理完成(中斷結束),繼續看影碟(繼續執行原來的任務)。
再比如:你在看電視,水開了(中斷源),把水灌到暖瓶里(中斷目的),再燒上一壺(繼續開中斷),回去看電視。水又開了。。。。。。。。(循環中斷)
以51單片機16位定時計數器0(T0)來講,
計數是T1是一個能盛65536(十六位時)滴水的水盆,在水龍頭下水一滴滴地滴入盆中。如果盆是空的那水在滴完65536滴水時盆子的水就滿了再滴一滴的時候就溢出了。這時就會產生中斷。
如果盆裡面已經裝入65500滴水(即初裝值),那麼只需要36滴水後就溢出了。
每一個水滴計數時即一個脈沖(高低電平變換一次)。
定時時每一個水滴即一個機器周期,水滴的速度即機器周期,等於12個振盪周期(晶振的振盪頻率除以12),直接影響到溢出的時間。
51單片機中斷系統的作用?
如果沒有中斷系統,就只能由 CPU 按照程序編寫的先後次序,對各個外設,進行巡迴檢查與處理。
這就是查詢式工作方式。
貌似公平,實際效率卻不高。
如果有了中斷系統,整個計算機系統,就具有了應付突發事件的處理能力。
這就是中斷式工作方式。
單片機的中斷標志位是有什麼作用?
四個問號分為四點一一解答:
1、一般來說單片機的中斷發生有兩個條件,一是中斷標志位置位,二是中斷允許,如果這兩個條件都滿足則進入中斷,因為正常情況下中斷一直是允許的,那麼只能通過標志位來區分是否有中斷掛起,
2、如果進入中斷不清除標志位,那麼這一中斷服務程序結束後由於標志位還是置位的並且中斷是允許的,那麼還會再次進入該中斷,就會發生一直在執行中斷程序的情況
3、周期性中斷是由定時器輔助完成的,只要定時時間到,硬體就會自動置位標志位,這時中斷發生,定時器還在運行,與中斷處理是並行的沒有沖突,因此周期性的中斷不是從中斷標志位清零開始的。
4、如果中斷程序沒有執行完並且一下個中斷又來了,那麼硬體還是會自動置位標志位的,如果在這之前已經清零標志位那麼中斷結束後會再進入一次該中斷,如果這時還沒有清除中斷標志位,則第二個1毫秒中斷無效。
單片機全局中斷有什麼用
本人覺得是因為現在有中斷正在執行,為了不讓高優先順序的中斷使現在的中斷發生中斷,而採取的保護程序
51單片機中斷有什麼作用
打個比方,你在房間看書,看書這個事是持久性的,拖延幾分鍾也沒事。突然淘寶買的衣服送到了,鏢局的人敲門,你用書簽做好標記去開門。拿回衣服,回去繼續看書。這個事的發生過程很正常。
同樣的,看書就像單片機的一般事務處理,收快遞就像中斷。主要是應對緊急的,有時效要求的事件的發生。書簽就是進出中斷相關的現場保護。
具體點,主程序中有LED不停的閃爍,由於外部按鍵的觸發,告訴你該發個位元組出去。這時,可以產生個按鍵相關的中斷(引腳電平中斷),去中斷發個位元組,然後趕緊回來繼續閃爍LED。
重要總結:就這么回事!
單片機程序什麼作用啊 尤其是X++作用 定時器中斷作用是什麼呢?
x應該是一個全局變數,每次中斷函數都會將x加1,程序的其餘函數會掃描x的值來做出相應的動作,
interrupt 1 是計時器中斷,這里應該是用一個全局變數計時,main函數或者其他中斷函數檢查x的數值做到定時的響應,如閃燈或者屏幕刷新又或者PWM輸出 ,
定時器中斷的作用是在CPU運行期間 ,定時器在不幹擾CPU正常運行的情況下不停地將自身寄存器(從你的函數初始化看是TH0和TL0並起來的一個16位值)減一,當寄存器值為0時候發起中斷(從1減去1開始到寄存器值為0之間發起的),這樣可以做到CPU不用一直等待一個時間的到來而空轉,或者運行一個程序的過程中計算運行的時間並定時插入一個額外的工作,
C51的計時器有4個工作模式(對於At89S51或者STC89C52及以上型號來說)不同的模式有不同的功能,這個網路文庫能看到的,另外TMOD寄存器和其他寄存器還設定了計時器是外部的跳變信號或者單片機內部時鍾來引起計時器的一次減1動作(計時動作)。
另外計時器可以設置為外部輸入模式,這樣就能作為計數器,比如說一個外接的按鍵,按10次後才觸發中斷,如果用外中斷處理,那麼整個主函數會被中斷九次做無效中斷才能等到第十次按鍵執行需要的中斷處理動作。
這一點在操作系統中也用到了,比如我們的PC的多任務操作系統,就是用時鍾中斷來把一個程序中斷執行另一個程序(比如操作系統和應用程序間)實現了時間片輪轉,不過PC的操作系統把所有的中斷處理函數都包含進去了,所以我們基本不用去管硬體中斷就能編程。 反觀單片機,因為資源有限,想要做到多任務(主函數與各個中斷函數及其子函數)必須用定時器(也可以通過外部信號做計數器)以及外中斷作為契機來切換多個任務。
如果需要解答整個中斷函數的功能,最好把全部的程序都帖出來,因為x這個全局變數的作用沒有在中斷函數中體現
有問題可以繼續跟我交流,我現在是大學本科生,學過C51單片機,正在學STM32
單片機中斷寄存器的作用是什麼?
中斷寄存器就是用於存貯中斷狀態的 包含是否啟用中斷 或者是 是否發生中斷
#include void InitUART(void){ TMOD = 0x20; 計時器類型 SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; 中斷寄存器的操作 ES = 1; TR1 = 1; 計時器1的中斷}void SendOneByte(unsigned char c){ SBUF = c; while(!TI); TI = 0;}void main(void){ InitUART();}void UARTInterrupt(void) interrupt 4{ if(RI) { RI = 0; add your code here! } else TI = 0;}
單片機中斷 的interrupt 0 using 1中的using有什麼作用
看到樓上二位說的有誤,特糾正。
void INT0()interrupt 0 using 1
{....
棱....
}
interrupt 0 指明是外部中斷0;
interrupt 1 指明是定時器中斷0;
interrupt 2 指明是外部中斷1;
interrupt 3 指明是定時器中斷1;
interrupt 4 指明是串列口中斷;
using 0 是第0組寄存器;
using 1 是第1組寄存器;
using 2 是第2組寄存器;
using 3 是第3組寄存器;
51單片機內的寄存器是R0--R7(不是R0-R3)
R0-R7在數據存儲器里的實際地址是由特殊功能寄存器PSW里的RS1、RS0位決定的。
using 0時設置 RS1=0,RS0 =0,用第0組寄存器,R0--R7的在數據存儲區里的實際地址是00H-07H。R0(00H)....R7(07H)
using 1時設置 RS1=0,RS0 =1,用第1組寄存器,R0--R7的在數據存儲區里的實際地址是00H-07H。R0(08H)....R7(0FH)
using 2時設置 RS1=1,RS0 =0,用第2組寄存器,R0--R7的在數據存儲區里的實際地址是08H-0FH。R0(10H)....R7(17H)
using 3時設置 RS1=1,RS0 =1,用第3組寄存器,R0--R7的在數據存儲區里的實際地址是00H-07H。R0(18H)....R7(1FH)
單片機為什麼使用中斷
中斷保護現場,是為了你中斷子程序執行完以後能夠返回到你程序中中斷點,即產生中斷的地方,使程序能夠繼續向下執行!!!!
如過你說的不用保護現場的話,那麼程序執行完以後就不能夠回到現場,那麼你的程序將不知道要跳轉到那裡去了,也就是飛鳥,呵呵……
你說的中斷嵌套,也是一樣的,兩者都要保護現場,不然你也不能夠回到現場,程序也會飛的!!!!
而我們保護現場的數據都是放在堆棧中的,因此,你的中斷次數也不能夠超過堆棧的級數,那樣數據也會丟失!!!!
說白了,中斷它不同於子程序,子程序是固定好了的,返回的位置也固定了;而中斷我們不能夠預知它在那裡發生中斷,因此要保護現場,使中斷子程序執行完後返回到中斷的地方!!!
呵呵……說的太多了!!!
我知道你說的意思了,但是你要知道,中斷現場保護是在中斷子程序中進行的,因此當你高一級的中斷發生的時候(他們不可能共用一個中斷子程序,如果是同一中斷,那也不可能,因為51中斷中你進入中斷子程序後要將禁止該中斷再次中斷,好象似的,嘿嘿……你可以試試),在高一級的中斷子程序中也有現場保護,你的問題就是沒有把現場保護放對地方!!!!!
============================================================
它們是把現場保護在同一堆棧中,我跟你打個比方吧,假如說堆棧的地址是80H,低一級的中斷要保護的是1,2,3;高一級要保護的現場是4,5,6,那麼在低一級的中斷發生的時候,現場保護1,2,3將壓如堆棧,(順序書上應該有,這里是個比喻),那我先壓入1,堆棧閥址加1,壓入2,堆棧地址再加1,如果這個時候高一級的中斷發生,那麼現在就應該跳到高一級中斷的子程序,堆棧地址就是82H了,在將4,5,6分別壓入堆棧,這樣堆棧的地址就是85H,當高一級的中斷子程序結束後,返回現場,堆棧的數據要從85H開始彈出,這樣現場返回的就是6,5,4,這個時候程序就會跳到中斷之前的地方,即底一級的中斷那裡,將要繼續將3保護到堆棧中,在執行低一級的中斷子程序.(其中,你要在中斷保護現場完了後將中斷標志清0啊,不然它始終會中斷的,不可能去執行程序去了...)
③ 51單片機各中斷源特點
51單片機有三種中斷:
1、外部中斷,共兩個,外部中斷0和外部中斷1,特點是由專門的IO口觸發(P3.2,P3.3),可以是電平,也可以是下降沿。
2、定時器中斷,共兩個,定時器0和定時器1,特點是:可以工作定時或者計數器兩種模式,每種模式有4種工作方式,定時器由內部計數,計數器有外部脈沖輸入計數(P3.4,P3.5),計滿溢出申請中斷。
3、串口中斷,當接收到一幀數據,或發送完一幀數據時,申請中斷。
④ 51單片機分別採用查詢和中斷方式處理急停按鈕信號時,它們的原理和優缺點
中斷的方式實時性比較好,當檢測到中斷發生後,程序立刻轉去執行中斷程序,這樣可以保證處理的實時性,而查詢的方式是在每個循環周期內對標志位進行查詢。
⑤ 提問+STC的51單片機到底穩定不穩定
總體來說還行,做一般的產品可以。但我認為是不夠穩定的,我做過一個產品,用STC15F2K08S2。是從上位機接收串口命令然後執行相關動作,並把設備一些狀態通過串口發給上位機。因為我比較注重效率,所以串口的發送和接收都採用中斷方式進行,這樣有串口命令時才去處理,沒有時單片機做其它任務或休眠。但客戶反映了不穩定的情況,有時從上位機發命令會導致外設死機。我當時花了很長時間找不到問題,因為我在燒錄是就已啟動了看門狗,如果死機應該會導致單片機復位才對。但沒有,設備只是靜悄悄的什麼反應也沒有,既不發數據也不接收命令。而且這種狀況是隨機的,很難重現,有時好幾天都不出現一次,很難通過重現現象來查找問題。我懷疑是程序的BUG,但反復查找推理都沒有找到哪有錯。
我一直是相信硬體的,因為我之前無數次在程序調不通時懷疑硬體,但後來都證明是自己的程序錯了。但這次實在找不到自己的問題,終於又懷疑是單片機的問題來。但懷疑就得有根據,於是我另外寫了一個測試程序。在串口助手不停向單片機發數據,並讓單片機不停地進串口中斷重發接收到的數據,通過串口助手觀察。終於串口死掉了,不接受數據也不發送數據。而程序還在控制著幾個燈在反復循環,並沒有死掉。
我後來改由程序來接收和發送數據,不進串口中斷。沒有發現任何問題,哪怕接收及發送速率都很高,程序最多循環的燈變慢或閃爍。
通過實驗我知道,STC15F2K這系列的單片機中斷系統硬體是有缺陷的。我後來修改了產品的程序,客戶沒有再反饋有什麼」死機「的問題。
⑥ 51單片機的優缺點
一、51單片機
應用最廣泛的8位單片機當然也是初學者們最容易上手學習的單片機,最早由Intel推出,由於其典型的結構和完善的匯流排專用寄存器的集中管理,眾多的邏輯位操作功能及面向控制的豐富的指令系統,堪稱為一代「經典」,為以後的其它單片機的發展奠定了基礎。
51單片機之所以成為經典,成為易上手的單片機主要有以下特點:
特性
1、從內部的硬體到軟體有一套完整的按位操作系統,稱作位處理器,處理對象不是字或位元組而是位。不但能對片內某些特殊功能寄存器的某位進行處理,如傳送、置位、清零、測試等,還能進行位的邏輯運算,其功能十分完備,使用起來得心應手。
2、同時在片內RAM區間還特別開辟了一個雙重功能的地址區間,使用極為靈活,這一功能無疑給使用者提供了極大的方便。
3、乘法和除法指令,這給編程也帶來了便利。很多的八位單片機都不具備乘**能,作乘法時還得編上一段子程序調用,十分不便。
缺點
(雖然是經典但是缺點還是很明顯的)
1、AD、EEPROM等功能需要靠擴展,增加了硬體和軟體負擔
2、雖然I/O腳使用簡單,但高電平時無輸出能力,這也是51系列單片機的最大軟肋
3、運行速度過慢,特別是雙數據指針,如能改進能給編程帶來很大的便利
4、51單片機保護能力很差,很容易燒壞晶元
應用范圍:目前在教學場合和對性能要求不高的場合大量被採用。
使用最多的器件:8051、80C51
⑦ c51單片機和c52單片機有什麼區別
C51與C52單片機同為MCS-51內核,也就是常說的51單片機。而有些人誤稱為C51單片機和C52單片機恐怕是受了ATMEL的型號為at89c51和at89c52兩款單片機的影響,這兩款已經停產。