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
- cc2530 串口实验4--设置时间
- CC2530 串口实验
- CC2530串口实验
- CC2530--串口实验的回显
- cc2530 串口实验--控制led灯
- cc2530 串口实验--控制led灯
- CC2530基础实验四 串口通信
- CC2530串口
- CC2530串口
- CC2530基础实验之串口控制LED灯
- CC2530 串口驱动
- CC2530串口接收总结
- CC2530串口中断
- CC2530串口通讯2
- CC2530 串口驱动
- CC2530之串口
- CC2530 串口打印log
- cc2530串口驱动程序
- WINCE6模块的安全性----签名/证书
- 黑马程序员_IO流
- WINCE6.0 180天试用结束解决办法
- Iframe的缺点
- Windows Form Tips: 无边框窗口实现用鼠标拖拽的功能
- cc2530 串口实验4--设置时间
- 针对WinCE6.0下繁多的补丁包该怎么打及WinCE6.0 R3安装步骤
- 致自己
- 最容易犯得错误
- 利用vs2005.net编写基于WinCE的DLL
- 谈互联网公司的公关技巧
- committing transaction
- WINCE下调试驱动的一般方法
- 命令模式----C++实现