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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3591|回復: 6
收起左側

單片機如何實現12MHZ的藍牙串口通信?

[復制鏈接]
回帖獎勵 50 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
ID:424317 發表于 2020-2-26 10:17 | 顯示全部樓層 |閱讀模式
目前手里只有12MHZ晶振的51單片機,想做藍牙串口通信該怎么做?
這里有個程序可以在單片機上運行正常,是用電腦通過串口通信控制流水燈:
#include <reg52.h>                   //包含單片機寄存器的頭文件
#define uchar unsigned char
#define uint unsigned int
#define LED P1
uchar dat,num;
void main()
{        
        TMOD=0x20;                   //用定時器設置串口波特率
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;          //串口初始化
        SM0=0;
        SM1=1;
        EA=1;           //開啟總中斷
        ES=1;                        //開啟串口中斷
        while(1)
        {        
                if(num==1)
                {
                        switch(dat)    //判斷串口接收的數據
                        {
                                case 1:LED=0xfe;break; //點亮第1個燈
                                case 2:LED=0xfd;break;  //點亮第2個燈
                                case 3:LED=0xfb;break;  //點亮第3個燈
                                case 4:LED=0xf7;break;  //點亮第4個燈
                                case 5:LED=0xef;break;  //點亮第5個燈
                                case 6:LED=0xdf;break;  //點亮第6個燈
                                case 7:LED=0xbf;break;  //點亮第7個燈
                                case 8:LED=0x7f;break;  //點亮第8個燈
                                case 0:LED=0xff;break;  //清空所有的燈
                        //        default :break;
                        }
                        ES=1;                 //打開串口中斷        
                        num=0;
                }
               
        }        
}
void ser() interrupt 4
{
        RI=0;
        dat=SBUF;                                //接收數據SBUF,即將計算機的數據接收。
        ES=0;                                    //關閉串口中斷
        num=1;
}


但是這個程序一旦換成是通過藍牙傳輸數據就沒辦法正常運行了。
另外,計算機與單片機傳輸數據時,在串口調試助手上顯示的數據就很不正常。例如以下代碼的功能是計算機給單片機發什么字符,單片機就會返回什么字符給計算機,進而在計算機上顯示出來,但是這個代碼在這個12MHZ晶振的單片機上完全不能運行,返回來的數據都是亂碼,改成藍牙連接也是。
#include <reg52.h>                   //包含單片機寄存器的頭文件
#define uchar unsigned char
#define uint unsigned int
uchar num,a;

/*
********************************************************************************
** 函數名稱 : main(void)
** 函數功能 : 主函數
********************************************************************************
*/
void main()
{
        TMOD=0x20;                   //用定時器設置串口波特率           9600
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;          //串口初始化
        SM0=0;
        SM1=1;
        EA=1;           //開啟總中斷
        ES=1;
        while(1)
        {
                if(num==1)    //判斷是否有串口數據的傳送
                {
                        ES=0;
                        num=0;
                        SBUF=a;                         //發送數據a到SBUF,即將單片機的數據發送到計算機
                        while(!TI);
                        TI=0;
                        ES=1;
                }
        }        
}
void ser() interrupt 4
{
        RI=0;
        P2=SBUF;                        //接收數據SBUF,即將計算機的數據接收。
        a=SBUF;
        num=1;
}


后來想到12MHZ的晶振的單片機的通信的波特率就不是9600,可以通過修改定時器1的初值來適應9600的波特率。但是這種方法也失敗了。郭天祥的書上有12MHZ晶振的初值表,根據初值表,選擇誤差最小的初值和模式,用波特率4800的波特率來通信,但是計算機還是沒辦法給單片機傳輸 數據。

后來看到一個帖子,說是可以用定時器2來設置串口通信,這樣就可以零誤差的設置為9600波特率的通信,但是這個帖子只給了設置波特率的代碼,串口通信的代碼卻沒給。

現在請教各位大神,采用何種方法才能讓實現藍牙的串口通信,最好是手機能通過藍牙與單片機通信52.h>
回復

使用道具 舉報

ID:514901 發表于 2020-2-26 20:18 | 顯示全部樓層
單片機與電腦串口能調通,說明串口是沒問題的,串口沒問題,那么藍牙通訊也沒問題,不過要檢查一下單片機TX要連藍牙RX,單片機RX連藍牙TX,還要共同接一條地線。還有檢查一下藍牙波特率設置和主從模式有沒有問題。
回復

使用道具 舉報

ID:398075 發表于 2020-2-28 09:57 | 顯示全部樓層
如樓上所說,單片機串口沒有問題,可以使用TTL下載器連接藍牙模塊,使用串口助手直接與電腦進行通信(一般默認波特率為9600或者115200),然后使用藍牙模塊相關的AT指令查看藍牙主從模式和修改藍牙通信波特率
回復

使用道具 舉報

ID:695961 發表于 2020-2-28 10:55 | 顯示全部樓層
12M的晶振使用串口通訊有誤差。建議使用11.0592或22.1184
回復

使用道具 舉報

ID:407089 發表于 2020-2-28 14:04 | 顯示全部樓層
給你看幾張圖就知道為什么12M晶振不適合串口通訊了。
0xfd對應的波特率(0xfd是你程序的設置)

2020-02-28_135056.png



0xfe對應的波特率
2020-02-28_135616.png

以上兩張圖可以看出,12M晶振沒法把波特率調到9600。

用11.0592剛好
2020-02-28_135239.png

回復

使用道具 舉報

ID:607110 發表于 2020-2-28 19:25 | 顯示全部樓層
12M晶振使用串口通訊有誤差,不同步交換數據。建議使用11.0592M
回復

使用道具 舉報

ID:213173 發表于 2020-2-29 04:52 | 顯示全部樓層
降低波特率到4800并設置加倍,減少誤差。
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xF3;
    TL1 =  0xF3;
    PCON = 0x80;//比特率加倍
    EA = 1;
    ES = 1;
    TR1 = 1;
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 少妇午夜一级艳片欧美精品 | 国产美女精品视频 | 久久久久久久久国产 | www.国产一区 | 成人精品视频 | 亚洲综合在线一区二区 | 精品乱码一区二区三四区视频 | 欧美日韩大陆 | 日本不卡免费新一二三区 | 人人人人人爽 | 久久777 | 精品国产一区二区国模嫣然 | 欧美色综合一区二区三区 | 国产精品久久久精品 | 日本成人久久 | 91嫩草精品| 精品国产青草久久久久福利 | 91看片| 武道仙尊动漫在线观看 | 男女视频在线观看 | 在线视频 亚洲 | 亚洲国产黄色av | 日本精品视频在线 | 二区高清 | 成人网av | 日韩精品视频在线观看一区二区三区 | 国产高清在线精品一区二区三区 | 免费在线一区二区 | 888久久久| av男人的天堂在线 | 成av人电影在线 | 亚洲综合五月天婷婷 | 国产999精品久久久 午夜天堂精品久久久久 | 91婷婷韩国欧美一区二区 | www.成人免费视频 | 亚洲一二视频 | 欧美激情啪啪 | 精品伦精品一区二区三区视频 | 亚洲1区 | 久久99精品久久久久久国产越南 | 99久久婷婷国产综合精品首页 |