全国服务热线:

15861139266

如何用C语言在Linux下给cc2530实现一个简单的上位机(中)_苏州机器视觉培训_苏州上位机培训_苏州工业机器人培训
发布时间:2023-05-19 13:58:09 点击次数:2993

如何用C语言在Linux下给cc2530实现一个简单的上位机(中)

4. 串口中断处理函数

/**********************************************************************

* 名    称: UART0_ISR(void) 串口中断处理函数 

* 描    述: 当串口0产生接收中断,将收到的数据保存在RxBuf中

**********************************************************************/

#pragma vector = URX0_VECTOR 

__interrupt void UART0_ISR(void) 

    URX0IF = 0;       // 清中断标志 

    RxBuf = U0DBUF;                           

}


5. 烟雾传感器数据读取

/****************************************************************

* 名    称: myApp_ReadGasLevel()

* 功    能: 烟雾传感器数据读取

* 入口参数: 无

* 出口参数: 无

*****************************************************************/

uint16 myApp_ReadGasLevel( void )

{

  uint16 reading = 0;

  

  /* Enable channel */

  ADCCFG |= 0x80;

  

  /* writing to this register starts the extra conversion */

  ADCCON3 = 0x87;

  

  /* Wait for the conversion to be done */

  while (!(ADCCON1 & 0x80));

  

  /* Disable channel after done conversion */

  ADCCFG &= (0x80 ^ 0xFF);

  

  /* Read the result */

  reading = ADCH;

  reading |= (int16) (ADCH << 8); 

  reading >>= 8;

  

  return (reading);

}

6. LED灯控制函数

/****************************************************************

* 名    称: led_opt()

* 功    能: LED灯控制函数

* 入口参数:  RxData:接收到的指令  flage:led的操作,点亮或者关闭

* 出口参数: 无

*****************************************************************/

void led_opt(char RxData[],unsigned char flage)

{

 switch(RxData[1])

 {

  case 1:

                  LED1 = (flage==DEV_ID_LED_ON)?ON:OFF;

   break;

  /* TBD for led2 led3*/


  

  default:

   break;

 }

 return;

}

7. 主程序

/****************************************************************************

* 主程序入口函数

****************************************************************************/

void main(void)

 CLKCONCMD &= ~0x40;           //设置系统时钟源为32MHZ晶振

 while(CLKCONSTA & 0x40);      //等待晶振稳定为32M

 CLKCONCMD &= ~0x47;           //设置系统主时钟频率为32MHZ   


 InitLed();                    //设置LED灯相应的IO口

 InitUart();                   //串口初始化函数   

 UartState = UART0_RX;         //串口0默认处于接收模式

 memset(RxData, 0, SIZE);

大林上位机机器视觉,_苏州电工培训_苏州PLC培训_苏州机器视觉培训_苏州上位机培训_苏州工业机器人培训,最适合电工及plc编程人员学习的上位机机器视觉课程 大林老师:15861139266(微信同号)

 while(1)

 {

      //接收状态 

  if(UartState == UART0_RX)             

  { //读取数据,遇到字符'#'或者缓冲区字符数量超过4就设置UartState为CONTROL_DEV状态

   if(RxBuf != 0) 

   { 

    //以'#'为结束符,一次最多接收4个字符       

    if((RxBuf != '#')&&(count < 4))     

    { 

     RxData[count++] = RxBuf; 

    }

    else

    {

      //判断数据合法性,防止溢出

     if(count >= 4)            

     { 

      //计数清0

      count = 0;             

      //清空接收缓冲区

      memset(RxData, 0, SIZE);

     }

     else{

      //进入发送状态 

      UartState = CONTROL_DEV;

     }

    }

    RxBuf  = 0;

   }

  }

         //控制控制外设状态 

         if(UartState == CONTROL_DEV)            

         {

             //判断接收的数据合法性

   //RxData[]:  | device | data |crc | # |

   //check_crc:   crc = device ^ data

   //if(RxData[2] == (RxData[0]^RxData[1]))

   {

    switch(RxData[0])

    {

     case DEV_ID_LED_ON :

      led_opt(RxData,DEV_ID_LED_ON);

      break;

     case DEV_ID_LED_OFF:

      led_opt(RxData,DEV_ID_LED_OFF);

      break;

     case DEV_ID_DELAY:

      break;

     case DEV_ID_GAS:

      send_gas();

      break;   

     default:

      break;

    }        

   }

             UartState = UART0_RX;

             count = 0;     

   //清空接收缓冲区

             memset(RxData, 0, SIZE);           

  }

 }

}





立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607802@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:大林机器视觉培训苏州办事处所有 备案号:苏ICP备14016686号-6

技术支持: 新易维软件