10151|2

2

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

cc2530中串口接收中断标志URX0IF不置1 [复制链接]

cc2530中串口接收中断URX0IF不置1是怎么回事?那位遇到过类似的问题呢 

此帖出自无线连接论坛

最新回复

我通过初始化把P1口设置成UART,然后我会在uint16 he()中先通过串口发送ConfigMSG[]={0x7E,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E};当我通过串口RX收到7E 03 00 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7E时,进行判断(if(Uart0_R_buff[1]==PACKET_CONFIGURATION)),如果正确再次进行判断if(Uart0_R_buff[3]==OPT_CO),如果正确,再发送RequestMSG[]={0x7E,0x02,0x00, 0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E}; 如果收到7E 02 00 21 00 00 00 dd dd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7E 把数据dddd取走,并且存到一个16位的变量中,main中会调用  详情 回复 发表于 2012-5-7 13:45
点赞 关注
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

帮忙看看,谢谢

你的2530串口可以正常通信了吧?请看看我的程序,有什么错吗?////初始化程序
////---------------------------------------------------------
void InitUart()
{
   PERCFG=0x00;       //选择位置1
   P0SEL=0x0C;       //P0用作串口
   U0CSR|=0x80;      //UART方式
   U0GCR |= 0x0A;
   U0BAUD = 0xD8;    //设置波特率为57600
   
   U0CSR|=0x04;
   //URX0IF=0;     //接收中断标志
   //UTX0IF=0;     //发送中断标志
   URX0IE=1;       //接收中断使能
   IEN2|=0x04;      //发送中断使能
  // UTX0IE=1;       //发送中断使能
   //EA=1;
   IEN0|=0x80;     //开总中断
   }

void delayhe(void)
{
  unsigned int i;
  unsigned char j;

  for(i=0;i<500;i++)
  {
    for(j=0;j<200;j++)
    {
      asm("NOP");
      asm("NOP");
      asm("NOP");
    }
  }
}


void UartSendMSG(uint8 *Data,int len)
{
  int i;
  for(i=0;i   {
    U0DBUF=*(Data++);     
    while(!UTX0IF);     //等待数据发送
    UTX0IF=0;            //清楚数据传送标志
  }
}

void SendConfigureMSG()  //发送配置命令
{
        
        UartSendMSG(ConfigMSG, ConfigMSG_Size);
}

void SendRequestMSG()
{      
        UartSendMSG(RequestMSG, RequestMSG_Size);
}
///*-------------------------------------------------------------*/
//     //查询法接收
///*-------------------------------------------------------------*/
char receive (void)
{
   char dat;

   while (!URX0IF );
   dat = U0DBUF;
   URX0IF = 0;

   return dat;
}


uint16 he()
{
   //setSysClk();
   InitUart();
   SendConfigureMSG();
   delayhe();
   delayhe();
   uint16 value=0;
   uint8 Uart0_R_buff[24];
   uint8 count=0;
    while(count<24)
    {
     //if(URX0IE==1)
       //{
        // temp=U0DBUF;
         Uart0_R_buff[count] =receive();
        count++;
        //URX0IE=0;
       }
   // }
    count=0;
  // CLKCONCMD
   if(Uart0_R_buff[1]==PACKET_CONFIGURATION)
   {
      if(Uart0_R_buff[3]==OPT_CO)
      {
      SendRequestMSG();
      }
      else
       {SendConfigureMSG();
        delayhe();
        delayhe();
       }
   }
   if(Uart0_R_buff[1]==PACKET_SENSOR_DATA)
   {
      int TL=Uart0_R_buff[7];
      int TH=Uart0_R_buff[8];
      value=TL|((uint16)TH<<8);
      SendRequestMSG();
   }
   return  value;
}
我会在main中调用uint16 he()。
此帖出自无线连接论坛
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

我的程序流程说明

我通过初始化把P1口设置成UART,然后我会在uint16 he()中先通过串口发送ConfigMSG[]={0x7E,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E};当我通过串口RX收到7E 03 00 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7E时,进行判断(if(Uart0_R_buff[1]==PACKET_CONFIGURATION)),如果正确再次进行判断if(Uart0_R_buff[3]==OPT_CO),如果正确,再发送RequestMSG[]={0x7E,0x02,0x00, 0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E}; 如果收到7E 02 00 21 00 00 00 dd dd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7E 把数据dddd取走,并且存到一个16位的变量中,main中会调用
此帖出自无线连接论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表