找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4645|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)藍(lán)牙通信問題,換上STC15W408AS后串口就不能通信了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:143767 發(fā)表于 2021-4-11 19:14 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
藍(lán)牙遙控繼電器,使用STC89C52RC一切正常,但換上STC15W408AS后串口就不能通信了,網(wǎng)上查說STC15W408AS沒有定時(shí)器1,我把程序改到定時(shí)器2了,可依然無法通信,大家?guī)兔纯闯绦蚰睦镉袉栴},謝謝!

/****藍(lán)牙模塊的TX和RX要交換對接才可以互相通信*****/
//主控:STC89C52RC
#include<reg52.h>
#include<string.h>

#define uchar unsigned char
#define uint unsigned int

sbit power1=P1^2;//繼電器端口依次類推
sbit power2=P1^3;
sbit power3=P1^4;
sbit power4=P1^5;
uchar temp;
void UART_Send_Byte(uchar mydata)//發(fā)送一個(gè)字節(jié)
{
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:143767 發(fā)表于 2021-4-11 19:59 | 只看該作者
完整程序/****藍(lán)牙模塊的TX和RX要交換對接才可以互相通信*****/
//主控:STC89C52RC
#include<reg52.h>
#include<string.h>

#define uchar unsigned char
#define uint unsigned int

sbit power1=P1^2;//繼電器端口依次類推
sbit power2=P1^3;
sbit power3=P1^4;
sbit power4=P1^5;
sbit power5=P2^4;
uchar temp;


void UART_Send_Byte(uchar mydata)//發(fā)送一個(gè)字節(jié)
{
        SBUF=mydata;
        while(!TI);
        TI=0;
}
void UART_Send_Str(char *s)//發(fā)送字符串
{
        while (*s)
        {
                UART_Send_Byte(*s);       
                s++;
        }
}
void main(void)
{
        SCON = 0X50;
        TMOD = 0X20;
        TH2 = 0xFD; //波特率9600
        TL2 = 0xFD;
        ES = 1;
        EA = 1;
        TR1 = 1;

        UART_Send_Str("AT+VERSION");//發(fā)送AT指令,測試模塊是否正常
        while(1);
}
void serial_IT(void) interrupt 4
{
        if(RI==1)
        {
                RI=0;       
                temp = SBUF;//串口接收到的數(shù)據(jù)給temp
                UART_Send_Byte(temp);//單片機(jī)接收到數(shù)據(jù)后發(fā)給電腦串口助手
                if(temp==0x02) power1=0; //如果接收到的數(shù)據(jù)是0x02小燈亮
                else if(temp==0x01) power1=1;//否則如果接收到是0x01,則熄滅
                if(temp==0x08) power2=0; //
                else if(temp==0x04) power2=1;//
                if(temp==0x07) power3=0; //
                else if(temp==0x09) power3=1;//
                if(temp==0x10) power4=0; //
                else if(temp==0x20) power4=1;//
                if(temp==0x40) power5=0; //
                else if(temp==0x50) power5=1;//
        }

}

回復(fù)

使用道具 舉報(bào)

板凳
ID:220661 發(fā)表于 2021-4-11 20:07 | 只看該作者
至少TR1=1是錯誤的。
回復(fù)

使用道具 舉報(bào)

地板
ID:220661 發(fā)表于 2021-4-11 20:10 | 只看該作者
    SCON = 0x50;                //8位可變波特率
    T2L = (65536 - (FOSC/4/BAUD));   //設(shè)置波特率重裝值
    T2H = (65536 - (FOSC/4/BAUD))>>8;
    AUXR = 0x14;                //T2為1T模式, 并啟動定時(shí)器2
    AUXR |= 0x01;               //選擇定時(shí)器2為串口1的波特率發(fā)生器
    ES = 1;                     //使能串口1中斷
    EA = 1;
回復(fù)

使用道具 舉報(bào)

5#
ID:65956 發(fā)表于 2021-4-12 08:34 | 只看該作者
STC15W408AS是沒有定時(shí)器1的,看來是手冊沒有看清哦
回復(fù)

使用道具 舉報(bào)

6#
ID:390416 發(fā)表于 2021-4-12 10:47 | 只看該作者
你可以參考我這兩個(gè)串口程序 兼容性很好的
串口1打印程序 可以打印3個(gè)十六位的變量 波特率9600 http://www.torrancerestoration.com/bbs/dpj-201660-1.html

串口發(fā)送 不需要while死等 串口接收執(zhí)行軟件復(fù)位 http://www.torrancerestoration.com/bbs/dpj-200927-1.html
回復(fù)

使用道具 舉報(bào)

7#
ID:143767 發(fā)表于 2021-4-13 11:12 | 只看該作者
gongnn 發(fā)表于 2021-4-11 20:10
SCON = 0x50;                //8位可變波特率
    T2L = (65536 - (FOSC/4/BAUD));   //設(shè)置波特率重 ...

根據(jù)你的提示修改了程序,但編譯時(shí)報(bào)錯如下:
Build target 'Target 1'
compiling BLUETOOTH.C...
BLUETOOTH.C(46): error C202: 'T2L': undefined identifier
BLUETOOTH.C(47): error C202: 'T2H': undefined identifier
BLUETOOTH.C(48): error C202: 'AUXR': undefined identifier
BLUETOOTH.C(49): error C202: 'AUXR': undefined identifier
Target not created
回復(fù)

使用道具 舉報(bào)

8#
ID:143767 發(fā)表于 2021-4-13 15:38 | 只看該作者
經(jīng)過修改程序可以通過了,但運(yùn)行時(shí)只有P1.2口的繼電器動作,其它的都不動作,不知是何原因
回復(fù)

使用道具 舉報(bào)

9#
ID:143767 發(fā)表于 2021-4-13 19:53 | 只看該作者
有知道的嗎,麻煩給指導(dǎo)一下
回復(fù)

使用道具 舉報(bào)

10#
ID:143767 發(fā)表于 2021-4-14 12:03 | 只看該作者
這貼眼看沉了,可問題還是沒解決
回復(fù)

使用道具 舉報(bào)

11#
ID:213173 發(fā)表于 2021-4-14 13:36 | 只看該作者
dj3365191 發(fā)表于 2021-4-14 12:03
這貼眼看沉了,可問題還是沒解決

字符和數(shù)字最好不要混用,容易出錯。改這樣試試。
  1. #include<reg52.h>
  2. #include<string.h>
  3. sfr AUXR = 0x8E;
  4. sfr T2H  = 0xD6;
  5. sfr T2L  = 0xD7;
  6. #define uchar unsigned char
  7. #define uint unsigned int

  8. sbit power1=P1^2;//繼電器端口依次類推
  9. sbit power2=P1^3;
  10. sbit power3=P1^4;
  11. sbit power4=P1^5;
  12. sbit power5=P2^4;
  13. uchar temp;
  14. bit flag;

  15. void UART_Send_Byte(uchar mydata)//發(fā)送一個(gè)字節(jié)
  16. {
  17.         SBUF=mydata;
  18.         while(!TI);
  19.         TI=0;
  20. }

  21. void UART_Send_Str(uchar *s)//發(fā)送字符串
  22. {
  23.         while (*s)
  24.         {
  25.                 UART_Send_Byte(*s++);
  26.         }
  27. }

  28. void UartInit(void)                //9600bps@11.0592MHz
  29. {
  30.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  31.         AUXR |= 0x01;                //串口1選擇定時(shí)器2為波特率發(fā)生器
  32.         AUXR |= 0x04;                //定時(shí)器2時(shí)鐘為Fosc,即1T
  33.         T2L = 0xE0;                //設(shè)定定時(shí)初值
  34.         T2H = 0xFE;                //設(shè)定定時(shí)初值
  35.         AUXR |= 0x10;                //啟動定時(shí)器2
  36.         EA = 1;
  37.         ES = 1;
  38. }
  39. void main(void)
  40. {
  41.         UartInit();
  42.         UART_Send_Str("AT+VERSION");//發(fā)送AT指令,測試模塊是否正常
  43.         while(1)
  44.         {
  45.                 if(flag)
  46.                 {
  47.                         flag=0;
  48.                         if(temp=='2') power1=0; //如果接收到的數(shù)據(jù)是0x02小燈亮
  49.                         else if(temp=='1') power1=1;//否則如果接收到是0x01,則熄滅

  50.                         if(temp=='8') power2=0; //
  51.                         else if(temp=='4') power2=1;//

  52.                         if(temp=='7') power3=0; //
  53.                         else if(temp=='9') power3=1;//

  54.                         if(temp=='b') power4=0; //
  55.                         else if(temp=='a') power4=1;//

  56.                         if(temp=='d') power5=0; //
  57.                         else if(temp=='c') power5=1;//
  58.                 }
  59.         }
  60. }

  61. void serial_IT(void) interrupt 4
  62. {
  63.         RI=0;        
  64.         temp = SBUF;//串口接收到的數(shù)據(jù)給temp
  65.         UART_Send_Byte(temp);//單片機(jī)接收到數(shù)據(jù)后發(fā)給電腦串口助手
  66.         flag=1;
  67. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

12#
ID:143767 發(fā)表于 2021-4-14 20:34 | 只看該作者
wulin 發(fā)表于 2021-4-14 13:36
字符和數(shù)字最好不要混用,容易出錯。改這樣試試。

謝謝您,一次性成功,不僅得到啟發(fā)而且也學(xué)到東西,再次感謝!
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表