打印

高手进!USB的蓝牙适配器与8051F单片机连接应用问题

[复制链接]
2973|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RUnewhand|  楼主 | 2010-3-10 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 RUnewhand 于 2010-3-10 16:40 编辑

单片机实验板和蓝牙适配器(清华紫光25元一个)连接,用的是两头都是母口接口。如图:
基于HCI层协议,通过UART0向蓝牙发送reset指令:即 01 03 0C 00 按道理来说应该返回:040E0401030C00(指令完成)。但蓝牙模块没有任何反应。部分程序如下(串口初始化已经完成):我设置的串口通讯速率为9600bps,8位数据位,1位停止。

  void main (void) {
  PCA0MD &= ~0x40;                    // Disable Watchdog timer
   SYSTEMCLOCK_Init ();                // initialize oscillator
   PORT_Init ();                       // initialize crossbar and GPIO
  TH1 = -(SYSCLK/BAUDRATE0/2/12);
  CKCON &= ~0x0B;   
  SCON= 0x30;
   TL1 = TH1;                          // init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;                       
   TR1 = 1;                            // START Timer1
   IP |= 0x10;                         // Make UART high priority
   TI0 = 0;
   ES0 = 1;                            // Enable UART0 interrupts
   SBUF0 = 0x01;
   while(!TI0);
   TI0 = 0;
   SBUF0 = 0x03;
   while(!TI0);
   TI0 = 0;
   SBUF0 = 0x0c;
   while(!TI0);
   TI0 = 0;
   SBUF0 = 0x00;
   while(!TI0);
   TI0 = 0;
   EA = 1;
   ES0 = 1;
   while (1);//等待返回命令
}
void SYSTEMCLOCK_Init (void)
{
   OSCICN |= 0x03;                     // Configure internal oscillator for
                                       // its maximum frequency and enable
                                       // missing clock detector
   CLKMUL  = 0x00;                     // Select internal oscillator as
                                       // input to clock multiplier
   CLKMUL |= 0x80;                     // Enable clock multiplier
   Delay();                            // Delay for clock multiplier to begin
   CLKMUL |= 0xC0;                     // Initialize the clock multiplier
   Delay();                            // Delay for clock multiplier to begin
   while(!(CLKMUL & 0x20));            // Wait for multiplier to lock
   CLKSEL  = 0x03;                     // Select system clock
}

void PORT_Init (void)
{  
   XBR0 = 0x01;                        // route UART 0 to crossbar
   XBR2 = 0x01;                        // route UART 1 to crossbar
   XBR1 = 0x40;                        // enable crossbar
   P0MDOUT |= 0x11;                    // set P0.4 to push-pull output
   P0MDOUT |= 0x0f;
   P2MDOUT |= 0x04;                    // set LED to push-pull
   P2MDIN |= 0x0F;                     // Lower four pins on P2 are digital
   P2MDOUT = 0x0C;                     // enable LEDs as push-pull outputs
                                       // enable Switches as open-drain
   P2     |= 0x03;                     // Set port latches for P2.0
                                       // and P2.1 to '1'
}

请问是哪里出了问题?

相关帖子

沙发
bluecup| | 2010-3-15 13:19 | 只看该作者
都是DEVICE怎么通讯啊?

使用特权

评论回复
板凳
RUnewhand|  楼主 | 2010-3-17 16:34 | 只看该作者
2# bluecup
哦,明白了。现在问题又来了,如果我要用pc跟它连接,并产生一个虚拟的串口,应该如何调试?能不能直接发HCI层的指令,比如:复位“01 03 0C 00” 然后得到一个事件回复,这样。

使用特权

评论回复
地板
showday| | 2010-3-21 00:08 | 只看该作者
你先用驱动创建一个蓝牙串口,然后就可以用串口助手一样操作串口了。  但是前提是你的单片机连接的蓝牙模块是从模式  SPP串口协议的。  具体的你可以看看BF10蓝牙模块,或者加我的QQ:19511806   交流

使用特权

评论回复
5
RUnewhand|  楼主 | 2010-3-25 11:13 | 只看该作者
4# showday
这样哦。我用一款叫BLUESOLEI的软件,搜到其他蓝牙设备后,创建了一个串口通讯,这样就可以直接像用串口线一样地用这个蓝牙适配器收发数据了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

54

帖子

1

粉丝