0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于51單片機(jī)的串口中斷發(fā)送數(shù)據(jù)幀

電子工程師 ? 作者:工程師a ? 2018-06-03 09:23 ? 次閱讀

很少看到有資料寫如何以中斷的方式發(fā)送一幀數(shù)據(jù),如果以等待的發(fā)送數(shù)據(jù)幀,對(duì)高速運(yùn)行的單片機(jī)來(lái)說(shuō)是很浪費(fèi)時(shí)間的,下面就介紹一種使用中斷方式發(fā)送數(shù)據(jù)幀,操作平臺(tái)采用51 mcu

首先定義一個(gè)數(shù)據(jù)幀的結(jié)構(gòu)體,該結(jié)構(gòu)體可以做為一個(gè)全局變量,所有的發(fā)送都要經(jīng)過(guò)這個(gè)結(jié)構(gòu)體:

//結(jié)構(gòu)體

struct{

charbusy_falg;//忙標(biāo)志,若在發(fā)送數(shù)據(jù)時(shí)置位1,即在開(kāi)始發(fā)送置位1,發(fā)送結(jié)束置位0

intindex;//索引,指向需要發(fā)送數(shù)組的位置

intlength;//整個(gè)數(shù)據(jù)幀的長(zhǎng)度

char*buf;//指向需要發(fā)送的數(shù)據(jù)幀,建議為全局變量,否則一旦開(kāi)始發(fā)送,必須等到發(fā)送結(jié)束,即判斷busy_falg為0

}send_buf;

發(fā)送數(shù)據(jù)的函數(shù),這里有個(gè)缺點(diǎn),就是還是要使用while來(lái)檢測(cè)串口是否忙碌,不過(guò)這樣比占用系統(tǒng)時(shí)間來(lái)發(fā)送要好的多了:

//發(fā)送一幀

voidSendBuf(char*buf,intlength)

{

while(busy_falg);//查詢發(fā)送是否忙,否則循環(huán)等待

send_buf.length=length;

send_buf.index=0;

send_buf.buf=buf;

send_buf.busy_falg=1;

SBUF=send_buf.buf[0];//寫入SBUF,開(kāi)始發(fā)送,后面就自動(dòng)進(jìn)入中斷發(fā)送

}

串口中斷發(fā)送函數(shù),注意設(shè)置空閑標(biāo)志位,避免多任務(wù)時(shí)多個(gè)發(fā)送幀調(diào)用了同一個(gè)結(jié)構(gòu)體:

voidSerialInt()interrupt4//串口中斷

{

if(RI==1)//串口接收

{

RI=0;

}

elseif(TI==1)//串口發(fā)送

{

TI=0;

send_buf.index++;

if(send_buf.index==send_buf.length)

{

send_buf.busy_falg=0;//發(fā)送結(jié)束

return;

}

SBUF=send_buf.buf[send_buf.index];//繼續(xù)發(fā)送下一個(gè)

}

}


串口中斷發(fā)送就是這樣簡(jiǎn)單,注意busy_falg和index的使用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6037

    文章

    44558

    瀏覽量

    635284
  • 數(shù)據(jù)幀
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    6744
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    51單片機(jī)什么情況下會(huì)產(chǎn)生串口中斷

    首先,你要用軟件允許中斷,即C語(yǔ)言中EA = 1; 允許總中斷ES = 1;//允許串口中斷匯編中可用 SETB EA ;允許總中斷SETB ES ;允許
    發(fā)表于 11-01 18:09

    請(qǐng)問(wèn)51單片機(jī)串口中斷是怎么觸發(fā)的?

    51單片機(jī)中斷串口中斷怎么觸發(fā)的感覺(jué)很模糊啊,發(fā)送數(shù)據(jù)或接收到
    發(fā)表于 04-09 06:35

    51單片機(jī)串口中斷使用總結(jié)

    51單片機(jī)串口中斷使用總結(jié),有程序,可以參考。
    發(fā)表于 03-28 10:00 ?13次下載

    第6章單片機(jī)定時(shí)器串口中斷(20150709213857)

    第6章單片機(jī)定時(shí)器串口中斷(20150709213857)
    發(fā)表于 12-15 22:28 ?6次下載

    串口中斷丟失數(shù)據(jù)問(wèn)題

    關(guān)于51單片機(jī),串口中斷發(fā)送與接收出現(xiàn)數(shù)據(jù)丟失問(wèn)題串口中斷的接收器具有雙緩沖結(jié)構(gòu),即在從接收寄存
    發(fā)表于 02-17 00:13 ?3583次閱讀

    51單片機(jī)進(jìn)行串口通信的發(fā)送與接收的實(shí)例程序免費(fèi)下載

    51單片機(jī)串口,是個(gè)全雙工的串口發(fā)送數(shù)據(jù)的同時(shí),還可以接收
    發(fā)表于 08-20 17:31 ?14次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>進(jìn)行<b class='flag-5'>串口</b>通信的<b class='flag-5'>發(fā)送</b>與接收的實(shí)例程序免費(fèi)下載

    使用單片機(jī)串口發(fā)送數(shù)據(jù)的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)串口發(fā)送數(shù)據(jù)的程序免費(fèi)下載。
    發(fā)表于 08-15 17:32 ?7次下載
    使用<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>串口</b><b class='flag-5'>發(fā)送</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>幀</b>的程序免費(fèi)下載

    如何使用51單片機(jī)進(jìn)行串口通信的發(fā)送與接收

    51單片機(jī)串口,是個(gè)全雙工的串口發(fā)送數(shù)據(jù)的同時(shí),還可以接收
    發(fā)表于 07-08 17:41 ?18次下載
    如何使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>進(jìn)行<b class='flag-5'>串口</b>通信的<b class='flag-5'>發(fā)送</b>與接收

    使用51單片機(jī)中斷方式實(shí)現(xiàn)串口數(shù)據(jù)發(fā)送與接收的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)中斷方式實(shí)現(xiàn)串口數(shù)據(jù)發(fā)送與接收的程序免費(fèi)下載。
    發(fā)表于 07-04 17:41 ?5次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>中斷</b>方式實(shí)現(xiàn)<b class='flag-5'>串口</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>發(fā)送</b>與接收的程序免費(fèi)下載

    使用51單片機(jī)進(jìn)行接收和發(fā)送串口通信資料免費(fèi)下載

    原料:keil、仿真軟件、虛擬串口工具(群文件里的tools)vspdctl.dll記得覆蓋說(shuō)明:串口中斷允許位ES=1時(shí),單片機(jī)一接收到數(shù)據(jù)或者發(fā)
    發(fā)表于 07-03 17:42 ?0次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>進(jìn)行接收和<b class='flag-5'>發(fā)送</b>的<b class='flag-5'>串口</b>通信資料免費(fèi)下載

    串口中斷接收和發(fā)送的C51程序免費(fèi)下載

    這是一個(gè)單片機(jī)C51串口接收(中斷)和發(fā)送例程,可以用來(lái)測(cè)試51
    發(fā)表于 04-25 18:27 ?4次下載
    <b class='flag-5'>串口中斷</b>接收和<b class='flag-5'>發(fā)送</b>的C<b class='flag-5'>51</b>程序免費(fèi)下載

    51單片機(jī)串口中斷功能的設(shè)置

    51單片機(jī)串口功能就是和外界進(jìn)行通訊,所謂的“外界”也就是與單片機(jī)進(jìn)行交互的媒介,最常用的就是我們經(jīng)常使用的計(jì)算機(jī)、平板或者其他設(shè)備(比如另一個(gè)
    發(fā)表于 11-14 19:51 ?74次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>串口中斷</b>功能的設(shè)置

    51單片機(jī)串行口中斷的使用(指針)

    51單片機(jī)串行口中斷的使用(指針)初始化中斷服務(wù)函數(shù)主函數(shù)這個(gè)程序的功能是通過(guò)上位機(jī)發(fā)送數(shù)字12
    發(fā)表于 11-20 17:21 ?1次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>串行<b class='flag-5'>口中斷</b>的使用(指針)

    51單片機(jī)中斷問(wèn)題

    51單片機(jī)中斷使用注意事項(xiàng)1.例如:同時(shí)使用外部中斷0和串口中斷的時(shí)候,如果沒(méi)有用到串口中斷,一
    發(fā)表于 11-22 12:21 ?0次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>中斷</b>問(wèn)題

    串口傳輸(51單片機(jī)版)

    串口傳輸在51單片機(jī)里是非常重要的一點(diǎn),這常常是在中斷、計(jì)數(shù)器后面學(xué)習(xí),因?yàn)椴豢杀苊獾男枰玫?b class='flag-5'>中斷51
    發(fā)表于 11-23 16:20 ?0次下載
    <b class='flag-5'>串口</b>傳輸(<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>版)