久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2712|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機串口通信筆記(中斷復(fù)習(xí))

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:424317 發(fā)表于 2020-2-22 13:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
        把單片機當(dāng)做一個APP,中斷系統(tǒng)就是其中的一項功能。這個功能強不強大,是衡量一個APP的標(biāo)準(zhǔn)。
        這項功能的作用是幫助你處理突發(fā)事件的。我們做事都有個優(yōu)先級。你放在中斷系統(tǒng)里的事情肯定是要優(yōu)先處理的事情,所以當(dāng)中斷觸發(fā)的時候,單片機要停下它當(dāng)前做的事,來處理中斷中的事。也就是說,單片機要在中斷觸發(fā)時,停止運行主函數(shù)里的代碼,轉(zhuǎn)而運行中斷里的代碼。等到中斷的代碼運行完畢之后,再繼續(xù)運行主函數(shù)的代碼。
        中斷這一項功能是要手動打開的,所以在主函數(shù)的一開始就要先打開中斷系統(tǒng)的開關(guān)。也就是EA=1,
EA=0表示關(guān)掉所有的中斷,EA=1表示打開。
        中斷可以被6種方式觸發(fā),有以下六種。
        1.外部中斷0,當(dāng)P3.2口輸入低電平時觸發(fā)
        2.外部中斷1,當(dāng)P3.3口輸入低電平時觸發(fā)
        3.串行口中斷,當(dāng)串口完成一幀數(shù)據(jù)的傳輸時
        剩下的自己看書或者數(shù)據(jù)手冊╮(╯▽╰)╭

        既然是六種觸發(fā)方式,那你就要在主函數(shù)一開始就要告訴單片機是那種。比如你想用P3.2口低電平觸發(fā),那么就要寫EX0=1,表示是外部中斷0,再寫IT0=1,表示低電平觸發(fā)。
        如果你想要用串行口中斷,你首先得把單片機串口這項功能打開。寫下:
        EA=1;//打開總中斷
        ES=1;//打開串口中斷
        REN=1;//允許串口接收
理論上就可以使用串口中斷。但是串口中斷的方式也不止一種。最常用的一種就是工作方式1。
        將串口設(shè)置成工作方式1的代碼是SM0=0; SM1=1; 這種方式下,單片機與計算機,或者單片機與單片機之間傳輸數(shù)據(jù)是一幀一幀的傳輸。一幀數(shù)據(jù)有十位,第一位和最后一位是標(biāo)志位,用來告訴單片機發(fā)送的那一幀數(shù)據(jù)的開始和結(jié)束的,單片機會自動把這兩位剔除。每一幀數(shù)據(jù)發(fā)送完畢之后,一個叫TI的參數(shù)就會被置1,這時串行口中斷就會被觸發(fā);每一幀數(shù)據(jù)接收完畢之后,也會有一個參數(shù)被置1,叫RI,也會觸發(fā)中斷。
        下面看一段代碼:
void main()
{
        TMOD=0x20;                   //用定時器設(shè)置串口波特率           9600
        REN=1;          //串口初始化
        SM0=0;
        SM1=1;
        EA=1;           //開啟總中斷
        ES=1;
        while(1)
        {
                if(num==1)    //判斷是否有串口數(shù)據(jù)的傳送
                {
                        ES=0;
                        num=0;
                        SBUF=a;                         //發(fā)送數(shù)據(jù)a到SBUF,即將單片機的數(shù)據(jù)發(fā)送到計算機
                        while(!TI);
                        TI=0;
                        ES=1;
                }
        }        
}
void ser() interrupt 4
{
        RI=0;
        P2=SBUF;                        //接收數(shù)據(jù)SBUF,即將計算機的數(shù)據(jù)接收。
        a=SBUF;
        num=1;
}

        這段程序會先進行初始化,把該打開的打開,把串口中斷的模式設(shè)置好,然后進入while循環(huán)。while循環(huán)里的第一步,是計算機向單片機發(fā)送數(shù)據(jù),此時單片機已經(jīng)接收到了數(shù)據(jù),RI被置1,程序進入中斷,RI被清零,緩存在SBUF的數(shù)據(jù)賦值給a。然后跳出中斷,執(zhí)行if語句,關(guān)閉中斷,再將a賦值給發(fā)送緩存區(qū)。當(dāng)數(shù)據(jù)從發(fā)送緩存區(qū)進入計算機時,TI會被置1,進而通過while循環(huán)。然后在清零TI,打開中斷,以便發(fā)送下一幀數(shù)據(jù)。

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 密色视频 | 中文字幕亚洲一区二区三区 | 天天成人综合网 | 中文字幕四虎 | 成人免费共享视频 | 欧美色性| 欧美色综合 | 国产精品久久久99 | 看片地址| 欧美久久久久久 | 亚洲视频 欧美视频 | 色综合久久88色综合天天 | 欧美一区免费在线观看 | 蜜桃毛片 | 黑人巨大精品欧美一区二区免费 | 日韩免费av网站 | 播放一级黄色片 | 九九精品在线 | 久久免费视频1 | 日本一区二区高清视频 | 一级毛片在线看 | 亚洲色图婷婷 | 黄色精品视频网站 | 狠狠操狠狠干 | 欧美一区二区在线视频 | 日韩一区二区三区在线观看 | 亚洲欧美中文日韩在线v日本 | 国产精品一区二区三区99 | 视频一区二区在线观看 | 国产精品久久久精品 | 亚洲午夜在线 | 91精品久久久久久综合五月天 | 日韩欧美亚洲 | 国产在线www | 国产在线视频一区二区 | 日韩在线精品 | 999热视频 | 日韩成人在线观看 | 欧美日韩综合视频 | 欧美精品99 | 午夜久久久久久久久久一区二区 |