亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
單片機(jī)串口通信筆記(中斷復(fù)習(xí))
[打印本頁]
作者:
鋼鐵俠mark-50
時(shí)間:
2020-2-22 13:59
標(biāo)題:
單片機(jī)串口通信筆記(中斷復(fù)習(xí))
把單片機(jī)當(dāng)做一個(gè)APP,中斷系統(tǒng)就是其中的一項(xiàng)功能。這個(gè)功能強(qiáng)不強(qiáng)大,是衡量一個(gè)APP的標(biāo)準(zhǔn)。
這項(xiàng)功能的作用是幫助你處理突發(fā)事件的。我們做事都有個(gè)優(yōu)先級(jí)。你放在中斷系統(tǒng)里的事情肯定是要優(yōu)先處理的事情,所以當(dāng)中斷觸發(fā)的時(shí)候,單片機(jī)要停下它當(dāng)前做的事,來處理中斷中的事。也就是說,單片機(jī)要在中斷觸發(fā)時(shí),停止運(yùn)行主函數(shù)里的代碼,轉(zhuǎn)而運(yùn)行中斷里的代碼。等到中斷的代碼運(yùn)行完畢之后,再繼續(xù)運(yùn)行主函數(shù)的代碼。
中斷這一項(xiàng)功能是要手動(dòng)打開的,所以在主函數(shù)的一開始就要先打開中斷系統(tǒng)的開關(guān)。也就是EA=1,
EA=0表示關(guān)掉所有的中斷,EA=1表示打開。
中斷可以被6種方式觸發(fā),有以下六種。
1.外部中斷0,當(dāng)P3.2口輸入低電平時(shí)觸發(fā)
2.外部中斷1,當(dāng)P3.3口輸入低電平時(shí)觸發(fā)
3.串行口中斷,當(dāng)串口完成一幀數(shù)據(jù)的傳輸時(shí)
剩下的自己看書或者數(shù)據(jù)手冊(cè)╮(╯▽╰)╭
既然是六種觸發(fā)方式,那你就要在主函數(shù)一開始就要告訴單片機(jī)是那種。比如你想用P3.2口低電平觸發(fā),那么就要寫EX0=1,表示是外部中斷0,再寫IT0=1,表示低電平觸發(fā)。
如果你想要用串行口中斷,你首先得把單片機(jī)串口這項(xiàng)功能打開。寫下:
EA=1;//打開總中斷
ES=1;//打開串口中斷
REN=1;//允許串口接收
理論上就可以使用串口中斷。但是串口中斷的方式也不止一種。最常用的一種就是工作方式1。
將串口設(shè)置成工作方式1的代碼是SM0=0; SM1=1; 這種方式下,單片機(jī)與計(jì)算機(jī),或者單片機(jī)與單片機(jī)之間傳輸數(shù)據(jù)是一幀一幀的傳輸。一幀數(shù)據(jù)有十位,第一位和最后一位是標(biāo)志位,用來告訴單片機(jī)發(fā)送的那一幀數(shù)據(jù)的開始和結(jié)束的,單片機(jī)會(huì)自動(dòng)把這兩位剔除。每一幀數(shù)據(jù)發(fā)送完畢之后,一個(gè)叫TI的參數(shù)就會(huì)被置1,這時(shí)串行口中斷就會(huì)被觸發(fā);每一幀數(shù)據(jù)接收完畢之后,也會(huì)有一個(gè)參數(shù)被置1,叫RI,也會(huì)觸發(fā)中斷。
下面看一段代碼:
void main()
{
TMOD=0x20; //用定時(shí)器設(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,即將單片機(jī)的數(shù)據(jù)發(fā)送到計(jì)算機(jī)
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
P2=SBUF; //接收數(shù)據(jù)SBUF,即將計(jì)算機(jī)的數(shù)據(jù)接收。
a=SBUF;
num=1;
}
這段程序會(huì)先進(jìn)行初始化,把該打開的打開,把串口中斷的模式設(shè)置好,然后進(jìn)入while循環(huán)。while循環(huán)里的第一步,是計(jì)算機(jī)向單片機(jī)發(fā)送數(shù)據(jù),此時(shí)單片機(jī)已經(jīng)接收到了數(shù)據(jù),RI被置1,程序進(jìn)入中斷,RI被清零,緩存在SBUF的數(shù)據(jù)賦值給a。然后跳出中斷,執(zhí)行if語句,關(guān)閉中斷,再將a賦值給發(fā)送緩存區(qū)。當(dāng)數(shù)據(jù)從發(fā)送緩存區(qū)進(jìn)入計(jì)算機(jī)時(shí),TI會(huì)被置1,進(jìn)而通過while循環(huán)。然后在清零TI,打開中斷,以便發(fā)送下一幀數(shù)據(jù)。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1