上節(jié)課我們學習了串口的理論部分,這節(jié)課我們要來學習實操部分。
要想實現(xiàn)單片機通過串口向電腦端發(fā)送數(shù)據(jù),我們首先要來配置寄存器。
1.配置SCON
SCON寄存器中的SM0配置為0,SM1配置為1決定了串口工作在模式一,也就是8位UART, 波特率可變的工作模式。REN置1表示能接收到電腦端的數(shù)據(jù)(本節(jié)實驗可置1也可以置0,因為暫時不用接收電腦端發(fā)送過來的數(shù)據(jù)),所以SCON=0x50或者0x40。這樣SCON寄存器就配置完成了。
2.配置PCON
PCON中只需要把最高位SMOD0配置為1,使波特率加倍即可。所以PCON=0x80;。這樣PCON就配置好了。
SBUF不需要配置,只需要賦值或者被賦值即可。
本實驗串口需要配置的內(nèi)容就這么多。
3.配置TH1定時器
本實驗需要用到定時器1,通過定時器1的溢出來約定波特率,通過分頻來控制收發(fā)器的采樣時間,由于本實驗不需要中斷,所以定時器1中斷無需打開
TMOD &= 0x0F;?? ??? ?//設(shè)置定時器模式,定時器1
?? ?TMOD |= 0x20;?? ??? ?//設(shè)置定時器模式,定時器1
?? ?TL1 = 0xF3;?? ??? ??? ?//設(shè)置定時初始值,系統(tǒng)生成
?? ?TH1 = 0xF3;?? ??? ??? ?//設(shè)置定時重載值,系統(tǒng)生成
?? ?ET1 = 0;?? ??? ??? ?//禁止定時器中斷,本程序只需要定時器溢出即可,不需要產(chǎn)生中斷
?? ?TR1 = 1;?? ??? ??? ?//定時器1開始計時?
本實驗的定時器采用8為重裝,不需要在中斷內(nèi)部重新賦初值。
目前為止,本節(jié)課所需配置的所有東西都已配置完成。
接下來我們看原理圖:
?第一個SBUF是寫入數(shù)據(jù),當8位數(shù)據(jù)全部寫好后,通過TI發(fā)送出去,發(fā)送完成后TI置1,需要軟件復(fù)位。
第二個SBUF是接收數(shù)據(jù),當接受控制器接收好數(shù)據(jù)后,移入SBUF,接收完成后RI置1,需要軟件復(fù)位。
定時器T1通過溢出率來約定波特率,控制收發(fā)器采樣時間。
接下來我們看寫完的代碼:
?
首先,我們要寫一個UART_SendByte(unsigned char Byte)函數(shù)來發(fā)送SBUF里面的數(shù)據(jù),這時SBUF在左邊,是被賦值的對象,當主函數(shù)調(diào)用這個函數(shù)時,參數(shù)為sec,每次調(diào)用后sec++,在函數(shù)內(nèi)部,通過while循環(huán)判斷TI是否為1,如果不為1則死循環(huán),直到TI為1為止,數(shù)據(jù)才算發(fā)出去。數(shù)據(jù)發(fā)送完成后,軟件復(fù)位TI=0;通過單片機的快速掃描,這個函數(shù)就實現(xiàn)了每隔一段時間,單片機串口向電腦端發(fā)送遞增的數(shù)據(jù)。?主函數(shù)內(nèi)部的 Delay(1)是為了消除晶振帶來的誤差。
所以本實驗的第一個代碼就完成了。
接下來我們看本實驗的第二個代碼:電腦端發(fā)送數(shù)據(jù)控制led
這個代碼相比于上一個代碼,我們需要用到UART的中斷,所以我們在配置寄存器的時候,還需要將UART的中斷打開,即ES=1,EA=1,當TI和RI其中一個中斷信號經(jīng)過時,都會產(chǎn)生中斷。
我們來看代碼實現(xiàn):
?在中斷內(nèi)部,我們首先要判斷產(chǎn)生的中斷信號是TI還是RI,只有RI中斷信號可進入中斷要操作的程序,此時的SBUF在等號右邊,是賦值給P2口,由電腦端直接寫入,此時電腦就可以直接通過寫入的數(shù)據(jù)控制led亮滅,寫入成功后,在利用上個代碼中的發(fā)送SBUF,將數(shù)據(jù)原封不動的返回電腦,最后再將RI置0,為下一次帶電腦控制led做準備。
QS:為什么SBUF作為發(fā)送數(shù)據(jù)的時候,不需要用到中斷,而作為接收端的時候則需要呢?
答:當SBUF作為發(fā)送端時,只需要發(fā)送數(shù)據(jù)到電腦端上,并不需要單片機產(chǎn)生任何操作,所以不需要打斷單片機的主程序,進入中斷執(zhí)行另一個程序。文章來源:http://www.zghlxwxcb.cn/news/detail-419872.html
當SBUF作為接收端時,電腦通過發(fā)送數(shù)據(jù)控制led,單片機需要做出相應(yīng)操作,所以需要中斷。文章來源地址http://www.zghlxwxcb.cn/news/detail-419872.html
到了這里,關(guān)于單片機通過串口向電腦端發(fā)送數(shù)據(jù)&&電腦端發(fā)送數(shù)據(jù)控制led的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!