找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2847|回复: 1
收起左侧

蓝牙串口通信遇到问题

[复制链接]
ID:98462 发表于 2015-12-27 18:25 | 显示全部楼层 |阅读模式
写上程序之后  4.4 接hc05蓝牙模块的 发送端  7.3   6.7接led  没有反应

#include "msp430f5529.h"
unsigned char RXD_data;
void UART_Init()
{
   P4SEL |= BIT5+BIT4;
   P4DIR |= BIT4;          //输入


   UCA1CTL1 |= UCSWRST;
   UCA1CTL1 |= UCSSEL_1;    //时钟源是ACLK,32768,生成9600
   UCA1BR0 = 3;
   UCA1BR1 = 0;
   UCA1MCTL |= UCBRS_3 + UCBRF_0;
   UCA1CTL1 &= ~UCSWRST;

   UCA1IE |= UCRXIE ;  // 数据接收中断
}

/**************************************
void Clock_Init() //配置时钟       网上找的列程
{
     P5SEL |= BIT2+BIT3+BIT4+BIT5;                       // Port select XT1
     UCSCTL6 &= ~(XT1OFF);                               // XT1 On
     UCSCTL6 &= ~(XT2OFF);                               // XT2 On
     UCSCTL6 |= XCAP_3;                                   // Internal load cap
     do
     {
       UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                                 // Clear XT2,XT1,DCO fault flags
       SFRIFG1 &= ~OFIFG;                         // Clear fault flags
     }while (SFRIFG1&OFIFG);                      // Test oscillator fault flag

     UCSCTL3 = SELREF_0+FLLREFDIV_0;                       // Set DCO FLL reference = XT2

     __bis_SR_register(SCG0);                      // Disable the FLL control loop
     UCSCTL1 = DCORSEL_7;                          // Select DCO range 16MHz operation
     UCSCTL0 = 0x0000;                             // Set lowest possible DCOx, MODx
     UCSCTL2 |= FLLD_0+488;                           // Set DCO Multiplier for 8MHz
                                                  // (15 + 1) * FLLRef = F_dcoclkdiv
                                                  //  F_dcoclkdiv=F_dco
                                                  // (488+ 1) * 32768= 16MHz
     __bic_SR_register(SCG0);                       // Enable the FLL control loop

     __delay_cycles(250000);

     UCSCTL4 |=SELA_0+SELS_5;                  //ACLK = 32768HZ,SMCLK= 1MHZ,MCLK= 16MHZ
     UCSCTL5 |=DIVS_2;                         //4分频
}
**************************************/
void main()  // 主函数
{
  WDTCTL |= WDTPW + WDTHOLD;
// Clock_Init();
  UART_Init();
  _EINT();


      P6DIR |= BIT6;   //定义针脚  输出
      P6DIR |= BIT7;    //输出

      P7DIR|=BIT2;   //输出
      P7DIR|=BIT3;   //输出


  while(1)
  {
    switch(RXD_data)
    {
    case '1':
                           P7OUT|=BIT3;                    // 1
                               P6OUT|=BIT7;                   // 1
                               P6OUT&=~BIT6;                 // 0
                               P7OUT&=~BIT2;                //0

      break;
    case '2':
                            P6OUT&=~BIT7;         //0
                                    P6OUT|=BIT6;         //1
                                    P7OUT&=~BIT3;       //0
                                    P7OUT|=BIT2;       //1

      break;
    case '3':
                            P7OUT|=BIT3;                  // 1
                                    P6OUT&=~BIT7;                // 0
                                    P6OUT&=~BIT6;               // 0
                                    P7OUT&=~BIT2;              //0
      break;
    case '4':
                            P7OUT&=~BIT3;                   //0
                                    P6OUT|=BIT7;                   // 1
                                    P6OUT&=~BIT6;                 // 0
                                    P7OUT&=~BIT2;                //0
      break;
    case '5':
                          P6OUT&=~BIT7;                       //0
                                  P6OUT&=~BIT6;                      //0
                                  P7OUT&=~BIT2;                     //0
                                  P7OUT&=~BIT3;                    //0

      break;
    default:
      break;
    }
  }
}

#pragma vector=USCI_A1_VECTOR

__interrupt void USCI_A0_ISR(void)   //  接收中断
{
    _DINT();        //先关上中断,接收正确的数据
    switch(__even_in_range(UCA0IV,4))
    {
    case 0:break;
    case 2:
      while(!(UCA0IFG&UCRXIFG));
      RXD_data = UCA0RXBUF;    //将接收缓存器的字符产送给发送缓存器
       while(!(UCA0IFG&UCRXIFG));
      break;
    case 4:break;
    default: break;
    }
    _EINT();
}


回复

使用道具 举报

ID:100842 发表于 2015-12-28 14:00 | 显示全部楼层
共同参与
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表