cc2530串口发送数据帧怎么弄

单片机求解
配置cc2530串口发送数据帧

#include"ioCC2530.h"
#define LED3 (P1_0)
#define LED4 (P1_1)
#define LED5 (P1_3)
#define LED6 (P1_4)

unsigned char sendDat[8];

void delay(unsigned int time)
{
unsigned int i;
unsigned char j;
for(i=0;i<time;i++)
for(j=0;j<240;j++)
{
asm("NOP");
asm("NOP");
asm("NOP");
}
}
//配置串口
void UART0shushi(void)
{
PERCFG=0x00;
P0SEL =0X3C;
U0CSR |=0X80;
U0UCR |=0X80;
U0GCR =10;
U0BAUD=216;
UTX0IF=0;

}

void senddata(void)
{
sendDat[0]=0xAA;
sendDat[1]=0x01;
sendDat[2]=0xAB;
sendDat[3]=0x00;
sendDat[4]=0x00;
sendDat[5]=0x00;
sendDat[6]=0x00;
sendDat[7]=0xFF;
}

//UART0发送字节数据
void UART0SendByte(unsigned char c)
{
U0DBUF=c; //USART 0 接收/发送数据缓存
while(!UTX0IF); //等待TX中断标志,即U0DBUF就绪
UTX0IF=0; //清零TX中断标志
}

//UART0发送字符串
void UART0SendString(unsigned char *str,unsigned char zhen)
{
unsigned char i;
for(i =0;i<zhen;i++)
{
UART0SendByte(str[i]);
}
}

void paoma(void)
{
delay(1000);
LED3=0;
delay(1000);
LED4=0;
delay(1000);
LED5=0;
delay(1000);
LED6=0;
delay(1000);
LED3=1;
delay(1000);
LED4=1;
delay(1000);
LED5=1;
delay(1000);
LED6=1;
}

void main(void)
{
P1SEL &=~0X1B;
P1DIR |=0X1B;
LED3=1;
LED4=1;
LED5=1;
LED6=1;
paoma();
senddata();
UART0SendString(sendDat,8);
}

程序运行正确,但串口没有发送数据帧

求大师解答

UART模式,每次中断就发送一个字符,所以我们应该定义一个结束的特殊字符来结束我们接收状态,当我们URX0IF 写0时就会清空接收U0DBUF的数据。
发送的时候我们可以判断字符串的结束符‘\0’,这个也是 一个一个发送的 ,UTX0IF = 0时也会清空发送U0DBUF的数据

UART模式提供全双工传送,接收器中的位同步不影响发送功能。传送一个UART字节包含1个起始位、8个数据位、1个作为可选项的第9位数据或者奇偶校验位再加上1个或2个停止位。实际发送的帧包含8位或者9位,但是数据传送只涉及一个字节。

#include <ioCC2530.h>
#include <string.h>
#define LED1 P1_1
typedef unsigned char uchr;
typedef unsigned int uint;

//需要发送的字符串
uchr Tx_send[30],Sand_flag = 0;
uchr return_success_tip[10] = "success";
uchr return_fail_tip[10] = "fail";
uint string_length = 0;

void display(uint ms){
  for(uint i=0;i<ms;i++)
    for(uint j=0;j<535;j++);
}

void init(){
  //led初始化
  P1SEL &= ~0x02;
  P1DIR |= 0x02;
  LED1 = 1;
  
  //设置晶振
  CLKCONCMD &= ~0x47;
  while(CLKCONCMD & 0x40);
   
  //串口初始化 选用USART0   UART  进行通信
  PERCFG = 0x00;  //选择串口备用位置1 
  P0SEL |= 0x0c;   //选择P0_2,P0_3作为串口 ,设置为外设功能 
  P2DIR &= ~0xc0;   //设置优先级 USART 0 > USART 1   > 定时器1
  
  U0GCR |= 8;
  U0BAUD |= 59;
  
  U0UCR |= 0x80;     //清空USART0单元
  UTX0IF = 0;        //清空USART0写标志
  URX0IF = 0;        //清空USART0读标志
  
  
  IEN0 |= 0x84;      //开启总中断与RX中断使能
  U0CSR |= 0xc0;     //设置USART0为UART模式、开启UART接收器使能
   
}
/********************************************
    发送数组字符
********************************************/
void TXS(char *Data){
  LED1 = 0;
  while(*Data != '\0')
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
  }
}
void main(){
  init();
  while(1){
    //当接收到数据后发送回去
    if(Sand_flag == 1){
      TXS(Tx_send);
      LED1 = 1;
      // strcpy(Tx_send,"");
      Sand_flag = 0;
    }
  }
}
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(){
  URX0IF = 0;
  uchr temp = U0DBUF;
  if(temp != '#'){
    Tx_send[string_length++] = temp;
  }else{
    //改变状态转为发送
    Sand_flag = 1;
    string_length = 0;
  }
}


可能问题出在串口初始化吧。确认波特率之类的串口参数正确吗?