⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fet120_uart05_09600.c

📁 msp430f12x2+nrf905
💻 C
📖 第 1 页 / 共 2 页
字号:
                    }
	for (i=0;i<32;i++)
	{
		SpiWrite(TxBuf[i]);		// Write 32 bytes Tx data
	}
        SetTxMode();        // Set Tx Mode
	IO_Set_CSN();                           // Spi disable						
	Delay(1);
	IO_Clear_CSN();                         // Spi enable for write a spi command	
	SpiWrite(WTA);				// Write address command
	for (i=0;i<4;i++)			// Write 4 bytes address
	{
		SpiWrite(RxTxConf.buf[i+5]);
	}	
	IO_Set_CSN();				// Spi disable
	IO_Set_TRX_CE();			// Set TRX_CE high,start Tx data transmission
	//Delay(1);				// while (DR!=1);
        if(((P2IN&DR)!=DR)||((P2IN&AM)!=AM))
	IO_Clear_TRX_CE();			// Set TRX_CE low
        _NOP();
}
/*******************************************************************************************/
//function RxPacket();
/*******************************************************************************************/
void RxPacket(void)
{
	
        unsigned char  i;	
        IO_Input_CD();//           P3DIR &= ~CD
        IO_Input_AM();//           P2DIR &= ~AM
        IO_Input_DR();//           P2DIR &= ~DRMISO
        IO_Output_TRX_CE();
        IO_Output_CSN();

	IO_Clear_TRX_CE();//TRX_CE=0;					// Set nRF905 in standby mode	
	IO_Clear_CSN(); //CSN=0;						// Spi enable for write a spi command
	SpiWrite(RRP);				// Read payload command	
        	
	for (i=0;i<32;i++)
	{
		RxBuf[i]=SpiRead();		// Read data and save to buffer		
                _NOP();
	}
	IO_Set_CSN();						// Disable spi
	
       while(((P2IN&DR)==DR));
        {
        Uart_Str(RxBuf[0],RxBuf+1);
        _NOP();
        for(i=0;i<32;i++)
             {
              TxBuf[i]=0;
              RxBuf[i]=0;
             }

         IO_Set_TRX_CE();//TRX_CE=1;
         led_shanhuo;
	

        }
}
/*******************************************************************************************/
//function SetTxMode();
/*******************************************************************************************/

/*******************************************************************************************/
//function SetTxMode();
/*******************************************************************************************/
void SetTxMode(void)				
{	
	IO_Output_TX_EN();
        IO_Output_TRX_CE();
        IO_Set_TX_EN();
        IO_Clear_TRX_CE();
        Delay(10);
}				
/*******************************************************************************************/
//function SetRxMode();
/*******************************************************************************************/
void SetRxMode(void)
{
	IO_Output_TX_EN();
        IO_Output_TRX_CE();
        IO_Clear_TX_EN();
        IO_Set_TRX_CE();
        Delay(10);
        		
}
void PutChar(unsigned char ch)
{
  while (!(IFG2 & UTXIFG0));
  TXBUF0 = ch;
  while ((UTCTL0 & TXEPT) == 0);
}
void main(void)
{
  unsigned char state;
  unsigned char i;
  SendFlag=0;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  InitIO();

  UartInit();
  CCTL0 = CCIE;
  CCR0 = 33;
  TACTL = TASSEL_1 + MC_1;           // ACLK, contmode,
  P1DIR &= 0X0F;
#if(MODULE_MODE == SINGLE_TX_MODE)
  P1DIR &= 0xFE;
  P1IE  = 0X01;
  P1IES = 0X01;
#endif
#if(MODULE_MODE == SINGLE_RX_MODE)
  P2DIR &= 0XFE;
#endif
  state = (P1IN >> 4) & 0X0F;
#if(MODULE_MODE == SINGLE_RX_MODE)
  state = 0;
#endif
  RxTxConf.buf[0] = 5 * state + 0x01;
  Config905();				// Config nRF905 module
  SetRxMode();				// Set nRF905 in Rx mode

 _EINT();
  for(;;)
  {



#if(MODULE_MODE == SINGLE_RX_MODE)
            if((P2IN & SET_F) == 0)
            {
              if(SendFlag == 1)
              {
                  if((RxBuf[0] == 0x55) && (RxBuf[2] == 0xCC))
                  {
                    if(RxBuf[1] < 0x10)
                    {
                      state = RxBuf[1];
                    }
                    PutChar(0x55);
                    PutChar(state);
                    PutChar(0xCC);
                    RxTxConf.buf[0] = 5 * state + 0x01;
                    Config905();            // Config nRF905 module
                  }
                  SendFlag = 0;
                  for(i=0;i<32;i++)
                  {
                      TxBuf[i]=0;
                      RxBuf[i]=0;
                  }
                  IE2 |= URXIE0;
                  _NOP();
                  led_shanhuo;
              }
            }
            if  ((P2IN&DR)==DR)		// If recive data ready...
	        RxPacket();		// ... recive data
#endif

#if(MODULE_MODE == SINGLE_TX_MODE)

        if((P1IN & LOW_POWER) == 1)
        {
          IO_Clear_PWR_UP();
          LPM3;
          IO_Set_PWR_UP();
          state = (P1IN >> 4) & 0X0F;
          RxTxConf.buf[0] = 5 * state + 0x01;
          Config905();            // Config nRF905 module
        }
        if(SendFlag==1)
        {
                    led_shanhuo;		    
		    TxPacket();	        // Transmit Tx buffer data
		    SetRxMode();	// Set nRF905 in Rx mode
                    SendFlag=0;
                    for(i=0;i<32;i++)
                    {
                    TxBuf[i]=0;
                    RxBuf[i]=0;
                    }
                    IE2 |= URXIE0;
                    _NOP();
        }
#endif

#if (MODULE_MODE == RX_TX_MODE)

        if(((P1IN >> 4) & 0X0F) != state)
        {
            state = (P1IN >> 4) & 0X0F;
            RxTxConf.buf[0] = 5 * state + 0x01;
            Config905();            // Config nRF905 module
        }


        if(SendFlag==1)
        {
          led_shanhuo;
		   // SetTxMode();        // Set Tx Mode
		    TxPacket();	        // Transmit Tx buffer data
		    SetRxMode();	// Set nRF905 in Rx mode
                    SendFlag=0;
                    for(i=0;i<32;i++)
                    {
                    TxBuf[i]=0;
                    RxBuf[i]=0;
                    }
                    IE2 |= URXIE0;
                    _NOP();
        }


	   if  ((P2IN&DR)==DR)		// If recive data ready...
	         RxPacket();		// ... recive data
#endif
  }

}
void UartInit(void)
{
#if(MODULE_MODE == RX_TX_MODE)
                                            //9600波特率
  P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD
  ME2 |= UTXE0 + URXE0;                     // Enable USART0 TXD/RXD
  UCTL0 |= CHAR;                            // 8-bit character
  UTCTL0 |= SSEL0;                          // UCLK = ACLK
  UBR00 = 0x03;                             // 32k/9600 - 3.41
  UBR10 = 0x00;                             //
  UMCTL0 = 0x4A;                            // Modulation
  UCTL0 &= ~SWRST;                          // Initialize USART state machine
  IE2 |= URXIE0;                            // Enable USART0 RX interrupt
#else
                                            // 2400波特率
  P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD
  ME2 |= UTXE0 + URXE0;                     // Enable USART0 TXD/RXD
  UCTL0 |= CHAR;                            // 8-bit character
  UTCTL0 |= SSEL0;                          // UCLK = ACLK
  UBR00 = 0x0D;                             // 32k/2400 - 13.65
  UBR10 = 0x00;
  UMCTL0 = 0x6B;
  UCTL0 &= ~SWRST;                          // Initialize USART state machine
  IE2 |= URXIE0;                            // Enable USART0 RX interrupt
#endif
}
void UartStr(unsigned char *p)
{
  unsigned char i;
  for (i=0;*p!=0;i++)//准备要发送的数据
     {
       while (!(IFG2 & UTXIFG0));// USART0 TX buffer ready?
       TXBUF0 =*p++; // RXBUF0 to TXBUF0
       while ((UTCTL0 & TXEPT) == 0);
     }
  _NOP();
}
void Uart_Str(unsigned char number,unsigned char *p)
{
  unsigned char i;
  for (i=0;i<number;i++)//准备要发送的数据
     {
       while (!(IFG2 & UTXIFG0));// USART0 TX buffer ready?
       TXBUF0 =*p++; // RXBUF0 to TXBUF0
       while ((UTCTL0 & TXEPT) == 0);
     }
  _NOP();
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0(void)
{

          if(UARTFlag==1)///缓冲区正在接收数据
             UARTTime++;//通讯超时计数器
          if(UARTTime >100)//如果超时
              {
              UARTFlag = 2;//接收标志置2
              if(SendFlagValue==0)
              {
                  IE2&=~URXIE0;//关闭中断 关闭串口接收
                  SendFlag=1;
                  SendFlagValue=1;
                  length=RecNum;
                  RecNum=0;
              }
              }
}
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{

  SendFlagValue=0;
  RxBuf[RecNum] = RXBUF0;

 if(RecNum == 0)       /*如果接收到的是第一个字符,将UARTFlag置1表示正在接收一条命令      */
    {
        UARTFlag = 1;
    }

    UARTTime = 0;         /*清超时时间                                                      */
    RecNum++;             /*统计一条命令接收的字符数                                        */
    if(RecNum == 32)      /*缓冲区已满                                                      */
    {
        IE2&=~URXIE0;     /*禁止接收中断                                                    */
        UARTFlag = 2;     /*强制命令结束,防止缓冲区溢出                                    */
        SendFlag=1;
        length=32;
        RecNum=0;
    }

}
#if(MODULE_MODE == SINGLE_TX_MODE)
#pragma vector=PORT1_VECTOR
__interrupt void PowerLower(void)
{
  if(P1IFG & 0X01)
  {
    P1IFG &= 0XFE;
    LPM3_EXIT;
  }
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -