您的位置 首页 新能源

根据MSP430的无线传输协议

该协议基于在同一块MSP430上用串口1发射,串口0接收,使用两块无线收发的NRF401模块。初始化串口0,用于接收voidinit_UART0(void){UCTL

该协议根据在同一块MSP430上用串口1发射,串口0接纳,运用两块无线收发的NRF401模块。

初始化串口0,用于接纳

void init_UART0(void)
{
UCTL0 &= ~SWRST;
UCTL0 |=CHAR;//0X10;
UBR00 = 0x03;
UBR10 = 0x00;
UMCTL0 = 0x4A;
UTCTL0 = SSEL0;//0X10;
ME1 |= UTXE0+URXE0 ; //enable the UART0
IE1 |=URXIE0;
P3SEL|=BIT4+BIT5;
P3DIR|=BIT4;
Clinet_Receive;
}

初始化串口1,用于发送

void init_UART1()
{
UCTL1 &= ~SWRST;
UCTL1 |=CHAR;//0X10;
UBR01 = 0x03;
UBR11 = 0x00;
UMCTL1 = 0x4A;
UTCTL1 = SSEL0; //
ME2 |= URXE1+UTXE1 ; //enable the UART1
IE2 |=URXIE1;
P3SEL|=BIT6+BIT7;
P3DIR|=BIT6+BIT7;
Host_Transmit;
}

初始化NRF401发射模块

void init_NRF401_TR(void)
{
Host_PowerUp; //上电到发射状况防止辐射和搅扰
NRF401_CS;
delayms(5);
Host_Transmit; //设置串口无线模块为发射形式
delayms(1); //延时4毫秒}

初始化NRF401接纳模块

void init_NRF401_RE(void)
{
Host_PowerUp; //上电到发射状况防止辐射和搅扰
NRF401_CS;
Host_Receive; //设置串口无线模块为发射形式
delayms(5); //延时4毫秒}

发射模块发送数据

__monitor void uart_H2C(unsigned char id,unsigned char cmd) //Host to Host transmit mode{

unsigned int crc=0;
unsigned char uart_Host_Tbuf[UART_BUF_SIZE]; //发送缓冲区
pro[0]=id;
pro[1]=cmd;
crc=cal_crc(pro,2); //核算校验码

uart_Host_Tbuf[0]=0x11; //先导字段,简单丢掉
uart_Host_Tbuf[1]=0x55; //抗搅扰字节
uart_Host_Tbuf[2]=0xAA; //帧开端字节
uart_Host_Tbuf[3]=id;
uart_Host_Tbuf[4]=cmd;
uart_Host_Tbuf[5]=(char)(crc/256); //循环冗余校验高8位
uart_Host_Tbuf[6]=(char)(crc%256); //循环冗余校验低8位
uart_Host_Tbuf[7]=0x77; //完毕标志
uart_Host_Tnum=8; //发送帧长度,3个先导字节+2data+2个校验字节+1个完毕字
Host_Transmit;
delayms(5);
uart_Puts(uart_Host_Tbuf,uart_Host_Tnum,1); //发送数据}

经过试验,发现在发送是延时顷刻数据接纳误码率低

__monitor void uart_Puts(unsigned char *str,unsigned char length,unsigned char uart_id)
//输出多数据函数
{
while (length!=0)
{
if(uart_id==0)
uart0_putchar(*str++ ); //经过串口发送数据
else
{
uart1_putchar(*str++ ); //经过串口发送数据
delay(255);
}
length–;

}

}

void uart1_putchar(char c) //串口1发送一个字符{
TXBUF1 = c;
while((UTCTL1&0x01)==0);
}

接纳经过中止处理:
#pragma vector = UART0RX_VECTOR //下位机先进行数据接纳__interrupt void Uart0rx_IRS(void)
{
int j=0;
_DINT();

if(flag0==0)
{
if(RXBUF0==0xFF)
{
flag0=1;
}
}
if(flag0==1)
{
if(RXBUF0==DeviceID) //设备码验证
{
flag1=1;
uart_Client_RPos=0;
}

}

if(flag0==1&&flag1==1)
{

uart_Client_Rbuf[uart_Client_RPos]=RXBUF0;
uart_Client_Rnum++; //接纳数据计数器加1
uart_Client_RPos++; //移动接纳缓冲区指针
if(uart_Client_Rbuf[uart_Client_RPos-1]==V) //帧完毕字符
{
flag0=0;
flag1=0; //帧开始标志铲除
for(;j //搬运接纳到的数据
printf(“UART0:%s”,Data);


Clinet_Transmit; //设置为发送形式
delay(3000); //延时3m秒

}//for
} //if
_EINT();

}//__interrupt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/261108.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部