cc2530 串口实验4--设置时间

来源:互联网 发布:直通车显示淘宝下架 编辑:程序博客网 时间:2024/05/20 23:35


/****************************** project : PC机可以向cc2530发送时间,来设置cc2530的当前时间            cc2530每秒钟向PC机发送当前时间。*    时间 :2014年1月12日*    作者 :林少游*****************************/#include <ioCC2530.h>#include <string.h>#include "Usart_Timer.h"uint Count = 0;                   //中断计数器char temp=0;                      //保存串口中接收到的数据char TimeUpdate = 0;              //更新时间char FollowSecond =1;             //发送时间的标志char SendData[] ="00:00:00\n";    //要发送的时间int Time[3] = {12,0,0};           //当前的时间char ReceiveData[9]="#00:00:00";   //保存PC发送过来的时间int DataNumber = 0;               //ReceiveData接收到的数据长度extern void Init_Clock();extern void Init_IO();extern void Init_Usart();extern void Init_Timer();extern void Usart_Send_String(char *Data,int len);/****************************** @ brief : 中断服务程序--T3定时器*****************************/#pragma vector = T3_VECTOR__interrupt void T3_ISR(void){  IRCON &= ~0X04;     //T3中断标志清零  Count++;            //中断计数器  if(Count>250)       //中断250次,约1秒  {    Count=0;    TimeUpdate = 1;   //更新时间标志  }}/****************************** @ brief : 中断服务程序--串口数据接收中断*    描述 :当cc2530接收到PC机发送过来的时间时发生中断*****************************/#pragma vector = URX0_VECTOR__interrupt void URX0_ISR(void){  //TCON &= ~0X08;      //TCON.URX0IF串口接收中断标志清零  URX0IF = 0;         //URX0IF串口接收中断标志清零  temp = U0DBUF;      //将缓冲器中的数据保存到temp中}/****************************** @ brief : 主函数*****************************/main(){  Init_Clock();       //初始化系统时钟频率  Init_Timer();       //初始化定时器  Init_Usart();       //初始化串口  Init_IO();          //初始化IO口,设置led灯  Usart_Send_String(SendData,sizeof(8)); //发送初始时间  while(1)  {    if(TimeUpdate==1)               //if    {       if(Time[2]<59)               //设置秒       {          Time[2]++;       }       else if(Time[1]<59)          //设置分       {          Time[2]=0;          Time[1]++;       }       else if(Time[0]<23)          //设置时       {          Time[2]=0;          Time[1]=0;          Time[0]++;       }       else        {          Time[2]=0;          Time[1]=0;          Time[0]=0;       }       TimeUpdate = 0;               //时间更新清零    }//end if        /************上面的if语句完成了时间的设置,精确到了秒*****************/        if(temp != 0)       {      ReceiveData[DataNumber++]=temp; //保存PC机发送过来的时间      temp = 0;    }        if(ReceiveData[0] == '#' && DataNumber == 9) //设置cc2530的新时间    {      Time[2]=(ReceiveData[7]-'0')*10+(ReceiveData[8]-'0');      if(Time[2]>59) Time[2]=0;      Time[1]=(ReceiveData[4]-'0')*10+(ReceiveData[5]-'0');      if(Time[1]>59) Time[1]=0;      Time[0]=(ReceiveData[1]-'0')*10+(ReceiveData[2]-'0');      if(Time[0]>23) Time[0]=0;            ReceiveData[0]=0;           //首位清零      DataNumber=0;               //接收到的数据长度清零    }        if(FollowSecond != Time[2])   //发送时间    {      SendData[8]='\n';      SendData[7]=Time[2]%10 + '0';      SendData[6]=Time[2]/10 + '0';      SendData[5]=':';      SendData[4]=Time[1]%10 + '0';      SendData[3]=Time[1]/10 + '0';      SendData[2]=':';      SendData[1]=Time[0]%10 + '0';      SendData[0]=Time[0]/10 + '0';      Usart_Send_String(SendData,9);      FollowSecond = Time[2];    }              }//end while}


/**************************T3用比较模式,把32M进行32分频T3CTL再进行16分频每次计数溢出为4ms**************************/#include <ioCC2530.h>#include <string.h>#define YLED P1_0#define BLED P1_1#define LIGHTOPEN 1#define LIGHTCLOSE 0#define uint unsigned int#define uchar unsigned char/************************ @brief : 系统时钟初始化函数*   描述 :该系统选择32MHz的时钟源频率**********************/void Init_Clock(){  CLKCONCMD = 0X28;           //系统时钟源选择32MHz,Time Ticks 为1MHz,Clock Speed 为32MHz  while(CLKCONSTA & 0X40);    //等待晶振稳定}/*********************** @brief : LED初始化函数**********************/void Init_IO(){  P1DIR |= 0X03;              //P1.0,P1.1 设置为输出  YLED = LIGHTOPEN;           //亮黄灯  BLED = LIGHTCLOSE;          //亮蓝灯}/*********************** @brief : 串口初始化函数**********************/void Init_Usart(){  PERCFG = 0X00;              //位置1 P0口  P0SEL |= 0X3C;              //P0口做串口   P2DIR &=~0XC0;              //P0优先作为串口    U0CSR |= 0X80;              //USART选择UART模式  U0GCR = 9;  U0BAUD = 59;                //波特率设置为19200    IEN0 = 0X84;                //总中断使能,串口接收中断使能  //IEN2 = 0X04;                //串口发送中断使能  //URX0IF = 0;                 //串口接收中断标志清零  UTX0IF = 0;                 //串口发送中断标志清零  U0CSR |= 0X40;              //串口允许接收数据}/********************** @brief : 定时器初始化函数*********************/void Init_Timer(){  T3CTL = 0X9A;               //16分频,溢出中断使能,模模式  T3CCTL0 = 0X44;             //频道0中断使能,选择比较模式  T3CC0 = 0xFA;                //定时器比较值设为250    IEN0 |= 0X80;               //总中断使能  IEN1 |= 0X08;               //T3中断使能 // TIMIF &= ~0X03;             //T3溢出中断标志清零,T3频道0中断标志清零  }/*********************** @brief : 串口发送字符串*********************/void Usart_Send_String(char *Data,int len){  uint i;  for(i=0;i<len;i++)  {    U0DBUF = *Data++;    while(UTX0IF==0);    UTX0IF = 0;  }}


0 0
原创粉丝点击