常州电工培训

常州电工证

常州变频器培训

常州触摸屏培训

江苏和讯自动化设备有限公司欢迎您!
  • 和讯PLC,电工培训中心优势,名师团队一对一教学.
热门课程
联系方式
  • 常州和讯自动化培训中心
  • 常州市新北区太湖东路府琛大厦2号楼307-1室,307-2室(常州万达广场对面)
  • 电话:0519-85602926
  • 手机:15861139266 13401342299
当前位置:网站首页 > 技术资料 技术资料
如何用C语言在Linux下给cc2530实现一个简单的上位机(中)-常州上位机学习-常州机器视觉学习
日期:2023-6-15 14:20:17人气:  标签:常州上位机学习-常州机器视觉学习

 

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);           

  }

 }

}



本文网址:

相关信息:
版权所有 CopyRight 2006-2017 江苏和讯自动化设备有限公司 电话:0519-85602926 地址:常州市新北区太湖东路府琛大厦2号楼307-1室,307-2室
苏ICP备14016686号-2 技术支持:常州鹤翔网络
本站关键词:常州电工培训 常州电工证 常州变频器培训 常州触摸屏培训 网站地图 网站标签
在线与我们取得联系