|
本文主要介紹在使用匯承4.0藍(lán)牙BLE串口助手HC-COM,通過手機向藍(lán)牙模塊發(fā)送數(shù)據(jù)、或者通過手機向與藍(lán)牙模塊連接的單片機發(fā)送指令時,串口中斷函數(shù)的編寫方法及出錯的原因和改正方法
我們怎么把指令發(fā)送出去,以及單片機是如何實現(xiàn)接收的呢?,這就要通過串口中斷來實現(xiàn)了,大多數(shù)單片機的串口例程或者匯承給的資料包里的例程都會給出類似下面給的一個串口中斷的參考代碼,但是它是有問題的,對于HC-COM來說,是不能正常工作
void Com_Int(void) interrupt 4
{
uchar receive_data;
EA = 0;
if(RI == 1) //當(dāng)硬件接收到一個數(shù)據(jù)時,RI會置位
{
RI = 0;
receive_data = SBUF;//接收到的數(shù)據(jù)
if(receive_data == '1')
{
LED =0;//接收到1亮燈
}
else
{
LED =1; //其他情況燈滅
}
}
SBUF=receive_data;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
EA = 1;
}
按照上面的代碼,當(dāng)我們利用手機上的app HC-COM向單片機發(fā)送1的的時候,接收的數(shù)據(jù)receive_data=1,此時呢LED應(yīng)該等于0,也就是LED會被點亮,但是實際上它只會閃一下,這就說明,我們通過HC-COM發(fā)送1的時候,單片機先接收到我們發(fā)的1,之后又接收到其他的信息,在上面的程序中,我們讓單片機把接收到的信息又通過藍(lán)牙模塊發(fā)送給手機,利用HC-COM進行顯示
乍一看,我們發(fā)送1的時候,只返回了一個1 ,發(fā)送0的時候,只返回了一個0,那單片機接收的其他信息是從何而來的呢?,為啥手機沒有顯示返回的其他信息呢?對此我進行了大量的實驗,最終發(fā)現(xiàn)這個app,它一次發(fā)送實際上是發(fā)送20位,什么意思呢? 當(dāng)我們輸入一個1點擊發(fā)送的時候,它實際上發(fā)送的是1000 0000 0000 0000 0000,也就是說當(dāng)我們輸入的數(shù)據(jù)的位數(shù)不足20位時它會自動補零,這就解釋了為什么LED燈不會常亮,只會閃一下,因為在接收完我們發(fā)送的1后,它又接收了19個0,把這20個數(shù)據(jù)返回我們手機上的時候,它這個app把它補得這19個0又以空格的格式進行顯示,而不是顯示0(有點坑)。
為了讓LED常亮,我們需要輸入20個1,如上圖所示,也就是不給它補零的機會。這種方法呢用起來十分的不方便,可能個別有耐心的朋友也能接受,但是如果我們要通過HC-COM發(fā)送指令,實現(xiàn)對小車的遙控,也就說需要我們快速的輸入指令,這種方法是不行的,怎么辦呢?,對大部分人了說不具備修改這個app的能力,那么只能修改單片機的接收和發(fā)送函數(shù)了,因此我把上面的串口中斷函數(shù)進行了簡單的修改,如下
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI == 1) //當(dāng)硬件接收到一個數(shù)據(jù)時,RI會置位
{
LED=0;
RI = 0;
receive_data = SBUF;//接收到的數(shù)據(jù)
if(receive_data!=0)
receive_real_data=receive_data;
SBUF=receive_real_data;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
}
EA = 1;
}
只有接收到的數(shù)據(jù)不為0時,才賦值給新的變量receive_real_data,我們通過判斷receive_real_data的值,來控制LED或者小車,而不是直接用接收到的值receive _data,同樣我們返回到手機的數(shù)據(jù),也改為receive_real_data。這樣我們只需要發(fā)送一位的 1、2、3、4、5、6、7、8、等就可以了,用起來很方便
全部資料51hei下載地址:
HC-08藍(lán)牙4.0BLE串口模塊使用資料包.7z
(7.73 MB, 下載次數(shù): 68)
2020-7-8 17:28 上傳
點擊文件名下載附件
資料包
|
評分
-
查看全部評分
|