在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51內(nèi)核單片機(jī)中斷優(yōu)先級(jí)的理解

            51內(nèi)核單片機(jī)中斷優(yōu)先級(jí)的理解

            作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
            由于項(xiàng)目的需要,這兩天正好在研究應(yīng)用層協(xié)議的格式與規(guī)范,參考了吳老師給的ZLG的RS-485_Guide。
            RS-485標(biāo)準(zhǔn)是基于PC的UART芯片上的處理方式(8-N-1格式),只涉及到電氣特性規(guī)定,而沒(méi)有對(duì)上層協(xié)議作出規(guī)定,因此,需要用戶(hù)自己設(shè)計(jì)網(wǎng)絡(luò)應(yīng)用層協(xié)議。大部分用戶(hù)都自行定義自己的應(yīng)用層協(xié)議,或者直接取自部分ModBus協(xié)議。國(guó)內(nèi)根據(jù)不同的設(shè)備類(lèi)型也頒布了各類(lèi)通訊協(xié)議,如CDT、SC-1801、u4F、DNP3.0 規(guī)約和1995年的IEC60870-5-101 傳輸規(guī)約、1997 年的國(guó)際101 規(guī)約的國(guó)內(nèi)版本DL/T634-1997規(guī)約;在電表應(yīng)用中,國(guó)內(nèi)大多數(shù)地區(qū)的廠商采用多功能電能表通訊規(guī)約(DL/T645-1997)。
            主要研究多功能電能表通訊規(guī)約(DL/T645-1997),這是江浙滬地區(qū)電表廠商的行業(yè)標(biāo)準(zhǔn),利用飛利浦公司的P89LPC931單片機(jī)對(duì)RS-485的應(yīng)用層協(xié)議進(jìn)行實(shí)現(xiàn)。LPC900 系列單片機(jī)是一個(gè)基于 80C51內(nèi)核的增強(qiáng)型單片機(jī)。手冊(cè)里給出了整個(gè)通訊程序的實(shí)現(xiàn),程序主要分為三個(gè)部分:數(shù)據(jù)接收部分、命令執(zhí)行部分、數(shù)據(jù)發(fā)送部分。
            通常在串口通信的程序?qū)崿F(xiàn)中,發(fā)送數(shù)據(jù)一般采用查詢(xún)模式,接收數(shù)據(jù)一般采用中斷方式。關(guān)于接收數(shù)據(jù)的程序大部分實(shí)現(xiàn)是這樣的:每次接收中斷中只是將接收緩沖區(qū)的數(shù)據(jù)讀出,而數(shù)據(jù)幀協(xié)議則交由前臺(tái)大循環(huán)做。但是在ZLG的手冊(cè)中給出了接收中斷程序直接處理數(shù)據(jù)幀的方式。

            圖1接收程序流程圖(ZLG RS-485_Guide)
            接收一個(gè)字節(jié)通訊函數(shù)
            原型:uchar Receive_Data();
            功能:接收一個(gè)字節(jié)通訊
            入口參數(shù):無(wú)
            出口參數(shù):返回接收值
            ********************************************************************/
            uchar Receive_Data()
            {
            RI=0;
            while(!RI);
            RI=0;
            ACC=SBUF;
            if(P!=RB8)
            {
            SP--;SP--;CY=0;return CY;
            }
            return (ACC);
            }


            bit Receive_One(uchar *s)
            {
            uchar CS=0x00,Serial_data;
            char i,j;
            RI=0;
            Serial_data=SBUF;
            while(Serial_data!=0xfe)
            return 0;
            do
            Serial_data=Receive_Data();
            while(Serial_data==0xfe);
            if(Serial_data!=0x68)
            return 0;
            CS+=0x68;
            for(i=0;i<=5;i++)
            {
            *(s+i)=Receive_Data();
            CS+=*(s+i);
            }
            if(Receive_Data()!=0x68)
            return 0;
            CS+=0x68;
            CS+=(*(s+6)=Receive_Data());
            j=*(s+7)=Receive_Data();
            CS+=j;
            for(i=0;i<=(j-1);i++)
            {
            CS+=(*(s+i+8)=Receive_Data());
            *(s+i+8)-=0x33;
            }
            if(CS!=Receive_Data())
            return 0;
            if(Receive_Data()!=0x16)
            return 0;
            ESR=0;
            return 1;
            }

            串口接收中斷服務(wù)程序
            功能:接收數(shù)據(jù)
            ********************************************************************/
            void RXD_Int(void) interrupt 4
            {
            CY=Receive_One(Serial_buf);
            if(CY)
            Command_status1|=0x04;
            }
            /********************************************************************

            圖1是中斷處理函數(shù)中的接收流程,中斷程序如上述。程序在判斷出第一個(gè)字節(jié)是前導(dǎo)字節(jié)以后,需要繼續(xù)判斷前導(dǎo)字節(jié),當(dāng)連續(xù)2-4次判斷出是前導(dǎo)字節(jié)后才會(huì)繼續(xù)往下執(zhí)行。但是在作第二次前導(dǎo)字節(jié)的判斷時(shí),Receive_Data()事實(shí)上是在當(dāng)前中斷程序中等待下一個(gè)接收到的數(shù)據(jù),而當(dāng)接收到下一個(gè)數(shù)據(jù)時(shí),是否會(huì)再次發(fā)生中斷呢?這個(gè)問(wèn)題困惑了我一晚上。按照程序邏輯推理,即假設(shè)本程序是無(wú)誤的基礎(chǔ)上(事后證明應(yīng)該是正確的),第二次中斷是不應(yīng)該發(fā)生的,否則將程序無(wú)限中斷嵌套下去,也得不到幀數(shù)據(jù)的處理結(jié)果。但是在Receive_Data()中的 while(!RI),需要等待的是接收中斷標(biāo)志位置位,也就是說(shuō),第二次接收數(shù)據(jù)完以后串口接收中斷標(biāo)志將被置位,但是中斷不嵌套。
            以下是我從百度文庫(kù)里找到的一片關(guān)于51系列單片機(jī)中斷嵌套的文章,給出了比較詳細(xì)的解釋?zhuān)F(xiàn)將主要的內(nèi)容摘錄如下:
            “老的51單片機(jī)(80C51系列)有5個(gè)中斷源,2個(gè)優(yōu)先級(jí),可以實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套?,F(xiàn)在很多擴(kuò)展的51單片機(jī)已經(jīng)有4個(gè)優(yōu)先級(jí)(或更多)和更多的中斷源了。老的51單片機(jī)(80C51系列)有5個(gè)中斷源,2個(gè)優(yōu)先級(jí),可以實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套?,F(xiàn)在很多擴(kuò)展的51單片機(jī)已經(jīng)有4個(gè)優(yōu)先級(jí)(或更多)和更多的中斷源了。”
            “中斷的優(yōu)先級(jí)有兩個(gè):查詢(xún)優(yōu)先級(jí)和執(zhí)行優(yōu)先級(jí)。”
            我們通常所說(shuō)的中斷優(yōu)先級(jí)一般指的是執(zhí)行優(yōu)先級(jí),但同一執(zhí)行優(yōu)先級(jí)的中斷也有比較,那就是查詢(xún)優(yōu)先級(jí)。所謂查詢(xún)優(yōu)先級(jí)是指在兩個(gè)同一優(yōu)先級(jí)的中斷同時(shí)發(fā)生時(shí)(嚴(yán)格來(lái)說(shuō)應(yīng)該是在單片機(jī)能分辨的同一微小時(shí)段內(nèi)),處理器會(huì)按照默認(rèn)的次序進(jìn)行中斷查詢(xún),查詢(xún)優(yōu)先級(jí)高的中斷先運(yùn)行中斷處理程序,而查詢(xún)優(yōu)先級(jí)低的則中斷標(biāo)志置位,如果高查詢(xún)優(yōu)先級(jí)的中斷運(yùn)行過(guò)程中沒(méi)有對(duì)該標(biāo)志位作恢復(fù)處理,那么在運(yùn)行完該高查詢(xún)優(yōu)先級(jí)中斷任務(wù)后,仍然會(huì)執(zhí)行低的優(yōu)先級(jí)任務(wù);但是,如果在運(yùn)行過(guò)程中低查詢(xún)優(yōu)先級(jí)的中斷標(biāo)志被恢復(fù),那么對(duì)應(yīng)的中斷程序應(yīng)該不會(huì)被處理。同理,對(duì)于同一中斷,比如串口中斷,在運(yùn)行當(dāng)前串口接收中斷程序的時(shí)候又有數(shù)據(jù)被接收,則對(duì)應(yīng)的中斷標(biāo)志會(huì)被置位,但是不會(huì)產(chǎn)生嵌套中斷,而只有等待當(dāng)前中斷結(jié)束后才繼續(xù)執(zhí)行對(duì)應(yīng)的中斷程序。在上述程序當(dāng)中,可以看到,在第二次發(fā)生中斷后,對(duì)應(yīng)的中斷標(biāo)志已被清除,所以不會(huì)執(zhí)行第二次中斷程序,第二次中斷的主要作用是滿(mǎn)足函數(shù)Receive_Data()中的 while(!RI),即提供了中斷標(biāo)志位,這樣,就既能接收到第二個(gè)字節(jié)的數(shù)據(jù),又能不產(chǎn)生中斷,也就是該手冊(cè)中實(shí)現(xiàn)中斷程序一次接收多個(gè)字節(jié)數(shù)據(jù)(幀)的方法!
            與查詢(xún)優(yōu)先級(jí)對(duì)應(yīng)的還有就是執(zhí)行優(yōu)先級(jí),這個(gè)是需要用戶(hù)對(duì)單片機(jī)做設(shè)定的,在這種情況下,中斷才會(huì)發(fā)生嵌套,細(xì)節(jié)不敘。當(dāng)然不同單片機(jī)或處理器關(guān)于中斷的定義有一定的出入,具體的應(yīng)用仍然要參照對(duì)應(yīng)的數(shù)據(jù)手冊(cè)。
            (轉(zhuǎn)載請(qǐng)注明出處,謝謝!http://blog.sina.com.cn/s/blog_49d4de8a0100w0f4.html)
            參考文獻(xiàn):
            1. ZLG公司.《RS-485_Guide》,2004
            2. 《DL/T645-1997通訊規(guī)約通信規(guī)約》
            3. 《關(guān)于51系列單片機(jī)中斷嵌套》


            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉