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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7424|回復: 26
打印 上一主題 下一主題
收起左側

stc89c52rc串口hc-05向手機發送數據,手機接收到這個�

[復制鏈接]
跳轉到指定樓層
樓主
ID:208322 發表于 2017-6-16 22:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
stc89c52rc串口hc-05向手機發送數據,手機接收到這個�
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:82765 發表于 2017-6-17 07:03 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

板凳
ID:140371 發表于 2017-6-17 12:16 | 只看該作者
這表示手機收到的值用ASCII無法解得出來,,,先檢查傳輸率是否相同,或是單片機送出的值並不是ASCII code

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:208322 發表于 2017-6-17 15:35 | 只看該作者
a0931727149 發表于 2017-6-17 12:16
這表示手機收到的值用ASCII無法解得出來,,,先檢查傳輸率是否相同,或是單片機送出的值並不是ASCII code

怎么看單片機發送的是不是ASCII code?手機我用ASCII解析過還是�
回復

使用道具 舉報

5#
ID:208322 發表于 2017-6-17 15:35 | 只看該作者
a0931727149 發表于 2017-6-17 12:16
這表示手機收到的值用ASCII無法解得出來,,,先檢查傳輸率是否相同,或是單片機送出的值並不是ASCII code

怎么看單片機發送的值是不是ASCII code。手機端我用ASCII解析過,還是�

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:208322 發表于 2017-6-17 15:36 | 只看該作者
手機我用ASCII解析過,還是�。怎么知道單片機發送的值是不是ASCII code
回復

使用道具 舉報

7#
ID:208322 發表于 2017-6-17 15:39 | 只看該作者
單片機發送的值怎么看是不是ASCII code ?手機端用ASCII 解析還是 �
回復

使用道具 舉報

8#
ID:140371 發表于 2017-6-17 17:19 | 只看該作者
那這個符號�ASCII 為何???? 是善意提醒如果單片機送出是 HEX 格式 手機也要是HEX 格式 ,如果單片機輸出是字符(ASCII) 格式 手機端也要是字符(ASCII)格式

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

9#
ID:140371 發表于 2017-6-17 17:57 | 只看該作者
因ASCII 內無這個�字符.....
如果單片機的傳輸協定與手機的傳輸協定一致的話 。。。而手機收到的是�可見手機是解析字符模式.....如是解析HEX 模式應當顯示 00 - ff 的值 ....所以手機是解析字符模式......
ASCII 內並無這個符號�訝?故程ˋˋ式中無法指定傳送這個�字符 ....因此猜測單片機式傳送HEX 值

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

10#
ID:208322 發表于 2017-6-17 18:15 | 只看該作者
a0931727149 發表于 2017-6-17 17:19
那這個符號�ASCII 為何???? 是善意提醒如果單片機送出是 HEX 格式 手機也要是HEX 格式 ,如果單片機 ...

嗯,我試試
回復

使用道具 舉報

11#
ID:208322 發表于 2017-6-17 19:52 | 只看該作者
a0931727149 發表于 2017-6-17 17:57
因ASCII 內無這個�字符.....
如果單片機的傳輸協定與手機的傳輸協定一致的話 。。。而手機收到的是 ...

好詳細,謝謝,我看看
回復

使用道具 舉報

12#
ID:208322 發表于 2017-6-17 21:39 | 只看該作者
在手機端發送a,下位機接收到0xA1 0x96  0xb2
回復

使用道具 舉報

13#
ID:208322 發表于 2017-6-17 21:40 | 只看該作者
我實在是不知道哪出問題了。用hc-05藍牙模塊接收。藍牙模塊也沒有設置什么9600波特率,0效驗,8數據位,1停止位。
回復

使用道具 舉報

14#
ID:208322 發表于 2017-6-17 21:43 | 只看該作者
我用的單片機是stc89c52Rc
回復

使用道具 舉報

15#
ID:140371 發表于 2017-6-17 23:07 | 只看該作者
看樣子有像傳輸協定不一致......
可能需要分段測試....1.測試單片機有無如設計.......2.hc-05藍牙模塊接收的傳輸協定 .....
建議擬公開單片機是stc89c52Rc程式....請網友幫忙測試

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

16#
ID:208322 發表于 2017-6-18 10:39 | 只看該作者
a0931727149 發表于 2017-6-17 23:07
看樣子有像傳輸協定不一致......
可能需要分段測試....1.測試單片機有無如設計.......2.hc-05藍牙模塊接收 ...
  1. #include "reg52.h"
  2. #include "intrins.h"

  3. unsigned char SenData,Flag=0;

  4. char code str1[]="Success";
  5. char code str2[]="Error";

  6. void send_str();
  7. void InitUART(void);
  8. void send_str2();
  9. void delayms(unsigned char ms);
  10. void send_char(unsigned char txd);

  11. sbit led=P2^0;           //將單片機的P2.0端口定義為led
  12. sbit led2=P2^1;           //將單片機的P2.0端口定義為led
  13. void InitUART(void)
  14. {
  15. /*******************設定串口**********************/
  16. SCON=0x50;                        //設置為工作方式1
  17. TMOD=0x20;                        //設置計數器工作方式2
  18. PCON =0x80;                        //波特率加倍
  19. TH1=0xFA;                                //計數器初始值設置,注意波特率是9600的
  20. TL1=TH1;
  21. ES=1;                                                //打開接收中斷
  22. EA=1;                                                //打開總中斷
  23. TR1=1;                                        //打開計數器
  24. /******************設定中斷**********************/
  25. }
  26. void main()  //主函數
  27. {        
  28. InitUART();
  29. while(1){
  30. if(Flag==1)
  31. {
  32.         
  33.         ES=0;
  34.         delayms(50);
  35. //----------------------該段即對接收的數據進行處理
  36.         if(SenData==97)//97為字符a的ascii
  37.         {
  38.         led=0;        //P2.0端口設置為低電平
  39.         delayms(10);//延時去抖動
  40.         send_str();//發送數據
  41.         led=1;        //P2.0端口設置為低電平        
  42.         }
  43.         else
  44.         {
  45.                 led2 = 0;
  46.         delayms(10);
  47.         send_str2();
  48.                 led2 = 1;
  49.         }

  50.         ES=1;
  51. }
  52. }
  53. }

  54. void ser_int()interrupt 4//接收字符串
  55. {  
  56. if(RI==1)//RI接受中斷標志
  57. {
  58. SenData = SBUF ;
  59. RI=0;//清除標志.
  60. Flag =1;//標志位置1表示有新數據進來
  61. }
  62. }


  63. void send_str()//發送字串
  64. {
  65. unsigned char i=0;
  66. Flag=0;//數據處理完畢后將標志位置0,表示沒有新數據要處理
  67. while(str1[i]!='\0')
  68. {
  69. SBUF =str1[i];
  70. while(!TI);//等待數據傳送
  71. TI=0;//清除數據傳輸標志
  72. i++;//下一個字符串
  73. }
  74. }

  75. void send_str2()//發送字串
  76. {
  77. unsigned char i=0;
  78. Flag=0;//數據處理完畢后將標志位置0,表示沒有新數據要處理
  79. while(str2[i]!='\0')
  80. {
  81. SBUF =str2[i];
  82. while(!TI);//等待數據傳送
  83. TI=0;//清除數據傳輸標志
  84. i++;//下一個字符串
  85. }
  86. }



  87. void delayms( unsigned char ms)//延時子程序
  88. {
  89. unsigned char i;
  90. while(ms--)
  91. {
  92. for(i=0;i<120;i++);
  93. }
  94. }
復制代碼

就是這簡單的
這個STC89c52RC單片機的程序
回復

使用道具 舉報

17#
ID:82765 發表于 2017-6-18 12:32 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

18#
ID:143113 發表于 2017-6-18 13:24 | 只看該作者
有可能接收后的是ASCII碼
回復

使用道具 舉報

19#
ID:208322 發表于 2017-6-18 15:38 | 只看該作者
  安卓用 mmOutStream.write(buffer);發送   buffer=byte[] 》》97
接收  BufferedReader br = new BufferedReader(new InputStreamReader(mmInStream));
                    char[] by = new char[128];
                    int lenght = br.read(by);

得到的數據char[]數組里是 0='�' 65533
剩下的都是'\u0000' 0
回復

使用道具 舉報

20#
ID:208322 發表于 2017-6-18 15:44 | 只看該作者
把接收到char數組.toString()后得到的是[C@后面的7位每次都不一樣
回復

使用道具 舉報

21#
ID:208322 發表于 2017-6-19 10:48 | 只看該作者
asd9988775 發表于 2017-6-17 15:39
單片機發送的值怎么看是不是ASCII code ?手機端用ASCII 解析還是 �

ASCII轉碼試了不行
回復

使用道具 舉報

22#
ID:212699 發表于 2017-6-19 19:34 | 只看該作者
應該是文字編碼方式的問題
回復

使用道具 舉報

23#
ID:110734 發表于 2017-6-20 16:46 | 只看該作者
必須轉碼,轉為Uncode發送,沒有轉碼導致……
回復

使用道具 舉報

24#
ID:140371 發表于 2017-6-20 17:52 | 只看該作者
本帖最后由 a0931727149 于 2017-7-3 20:15 編輯

while(str1!='\0')
{
SBUF =str1;
while(!TI);//等待數據傳送
TI=0;//清除數據傳輸標志
i++;//下一個字符串
}
}

void send_str2()//發送字串
{
unsigned char i=0;
Flag=0;//數據處理完畢后將標志位置0,表示沒有新數據要處理
while(str2!='\0')
{
SBUF =str2;
while(!TI);//等待數據傳送
TI=0;//清除數據傳輸標志
i++;//下一個字符串
}


這一段有 bug
  1. 1.while(str1!='\0')
  2. 可改成 while(str1[i][i] !='\0')
  3. 2.SBUF =str1; // 這是將str1的地址傳送出
  4. 可改成 SBUF =str1[i];
  5. 對於 str2  也是相同
  6. 1.while(str2 !='\0')  
  7. 可改成 while(str2[i] !='\0' && i<5 )
  8. 2.SBUF =str2; // 這是將str1的地址傳送出
  9. 可改成 SBUF =str2[i][i];
  10. 這樣單片機是stc89c52Rc應該會正常了........

復制代碼
回復

使用道具 舉報

25#
ID:140371 發表于 2017-6-20 18:10 | 只看該作者
有BUG 的關鍵
while(str1!='\0')
SBUF =str1;
while(str2!='\0')
SBUF =str2;

改成
while(str1[i] !='\0'  &&  i<7)
SBUF =str1[i];
while(str2[i] !='\0' && i<<5 )
SBUF =str2[i] ;
89c52的程式應該就可以用了
回復

使用道具 舉報

26#
ID:208322 發表于 2017-7-3 16:07 | 只看該作者
a0931727149 發表于 2017-6-20 17:52
while(str1!='\0')
{
SBUF =str1;

我發現我的晶振是12Mhz的,我拿51波特率初始值計算工具計算設置值:定時器方式-方式2,晶振頻率-12
,波特率-9600,smod-1。計算后是F9H。
我現在的串口設置是
        SCON=0x50;                        //設置為工作方式1
TMOD=0x20;                        //設置計數器工作方式2
PCON =0x80;                        //波特率加倍
TH1=0xF9;                                //計數器初始值設置,注意波特率是9600的
TL1=TH1;
ES=1;                                                //打開接收中斷
EA=1;                                                //打開總中斷
TR1=1;
模擬和真機上都不返回數據。模擬上返回時串口error亮了。
可是我把TH1=0xF9; 改成 0xFD返回
回復

使用道具 舉報

27#
ID:140371 發表于 2017-7-3 20:34 | 只看該作者
晶振用12Mhz會約7 %的誤差......最好改用11.0592Mhz的比較好
我用11.0592用AT89s51 配串列助手在PC   下RUN 可正常工作.....
建議你先用串列助手調適單片機的程式....等到單片機的程式完成後再來調適藍芽裝置.....最後再來調適手機端程式.....手機端程式可先下載手機的串列助手來調適 .....最後再測試你發展的程式.......





回復

使用道具 舉報

28#
ID:208322 發表于 2017-7-3 21:12 | 只看該作者
現在,程序是TH1 = 0xF9,手機發送a,應該是返回給手機的數據,卻在串口調試工具中顯示了。
數據正確應該是 Error。在串口調試小助手上現實的是 舝ror Error 膨騩r 咈蝻r 舝ror E蝌矧 Error
不知道是什么情況。我用的是開發板,上面的晶振是12MHZ。波特率是9600
#include "reg52.h"


unsigned char SenData,Flag=0;

char code str1[]="Success";
char code str2[]="Error";

unsigned char i=0;

void InitUART(void);
void send_str();
void send_str2();
void send_char(unsigned char txd);
void delayms(unsigned char ms);
void delay(unsigned int i);


void InitUART(void)
{
        /*******************設定串口**********************/
SCON = 0x50; //設置為工作方式1
TMOD = 0x20; //設置計數器工作方式2
PCON = 0x80; //波特率加倍
TH1 = 0xF9; //計數器初始值設置,注意波特率是9600的
TL1 = TH1;
SM0=0;//8位UART
SM1=1;
REN=1;//開始接收
ES = 1; //打開接收中斷
EA = 1; //打開總中斷
TR1 = 1; //打開計數器
        /******************設定中斷**********************/
}
void main()  //主函數
{       
        InitUART();
        while(1){
                if(Flag==1)
                {
                        ES=0;
                        delayms(100);
                //----------------------該段即對接收的數據進行處理
                if(SenData=='a')
                        {
                                delayms(30);//延時去抖動
                                send_str();//發送數據
                        }
                        else
                        {
                                delayms(30);
                                send_str2();
                        }
                        i=0;
                        ES=1;
                        Flag=0;//數據處理完畢后將標志位置0,表示沒有新數據要處理
                }else{
                        i=0;
                }
        }
}

void ser_int()interrupt 4//接收字符串
{  
        if(RI)//RI接受中斷標志
        {
                RI=0;//清除標志.
                SenData=SBUF;
                Flag =1;//標志位置1表示有新數據進來
        }else                                    //如果是發送中斷,將TI清0
       TI = 0;
}

/*************************************
                                                成功,返回
*************************************/
void send_str()//發送字串
{
        while(str1[i]!='\0'&&i<7)
        {
                delayms(10);
                SBUF=str1[i];
                while(TI!=1);//等待數據傳送
                TI=0;//清除數據傳輸標志
                i++;//下一個字符串        led=1;
                //delay(50000); //大約延時450ms
        }
}
/*************************************
                                                失敗,返回
*************************************/
void send_str2()//發送字串
{
        while(str2[i]!='\0' && i<5 )
                {
                        delayms(10);
                        SBUF=str2[i];
                        while(TI!=1);//等待數據傳送
                        TI=0;//清除數據傳輸標志
                        i++;//下一個字符串
                }
}


/*************************************
                                                        延時
*************************************/
void delayms( unsigned char ms)//延時子程序
{
        unsigned char i;
        while(ms--)
        {
                for(i=0;i<120;i++);
        }
}
/*************************************
                                                        延時
                                        50000,大約延時450ms

void delay(unsigned int i)
{
        while(i--);       
}
*************************************/
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美精品一区二区 | 日韩av在线免费 | 综合久久av | 中文字幕在线一区 | 欧美精品在线一区二区三区 | 午夜色婷婷 | 欧美日韩国产高清 | 天堂免费看片 | 青青草视频网站 | 国产精品海角社区在线观看 | 免费a国产 | 99一级毛片| 亚洲欧美日韩激情 | 超碰在线人 | 欧美区日韩区 | 国产精品亚洲一区 | 黑人粗黑大躁护士 | 国产ts人妖系列高潮 | 亚洲福利一区二区 | 国产一区二区 | 欧美jizzhd精品欧美巨大免费 | 亚洲天堂久久新 | 亚洲一区二区在线播放 | 中文字幕在线视频一区二区三区 | 国产成人精品一区二区三区网站观看 | 亚洲国产成人精品女人久久久 | 福利视频一区二区三区 | 日韩有码在线播放 | 日本一区二区三区在线观看 | 二区欧美 | 国产中文原创 | 97久久精品午夜一区二区 | 91久久精品一区二区三区 | 亚洲人成一区二区三区性色 | 日日夜夜精品视频 | 欧美日韩精品国产 | 欧美一区二区在线免费观看 | 九九精品在线 | 日韩精品一区二区三区在线播放 | 国产成人高清视频 | 欧美日韩在线成人 |