📄 fet120_uart05_09600.c
字号:
}
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 + -