版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21352095/article/details/83046422
TI CC2530 学习笔记-11-NewBit-CC2530-UART0-定时发送
功能:用定时器3制作一个时钟,每当秒更新时将时间打印后从串口送出。使用指令可以设置时间,设置格式为"#hh:mm:nn"。
- 配置定时器,UART,LED
halMcuWaitUs(10000); //等待时间稳定,约10ms
CLKCONCMD &= ~0x47; //选择外部32MHZ时钟, 不分频
//TICKSPD不改变,保持为0x01,即定时器标记频率为16MHz
while( (CLKCONSTA & 0x47) != 0x00 ); //切换时钟源后再次等待稳定
P0DIR |= 0x40; //配置IO为输出
/* 初始化串口 */
P0SEL |= 0x0C; //将P02,P03设为外设功能
PERCFG &= ~0x01; //串口0占用P02 P03
U0CSR = 0X80; //USART模式设为UART模式
U0UCR = 0x00; //禁用流控,禁用奇偶检验,1位停止位
U0CSR |= 0x40; //允许接收
U0GCR |= 8; //9600
U0BAUD = 59;
IEN0 |= 0x04; //开串口0接收中断
/* 初始化定时器4*/
T4CTL = 0xE2; //128分频(0.125Mhz),模模式
T4CCTL0 = 0x04; //比较模式
T4CC0 = 125; //溢出值
T4CTL |= 0x08;
T4CCTL0 |= 0x40;//开T4通道0中断
T4IE = 1; //开T4中断
/* 初始化定时器3 */
T3CTL = 0xE2; //128分频(0.125Mhz),模模式
T3CCTL0 = 0x04; //比较模式
T3CC0 = 125; //溢出值
T3CTL |= 0x08; //打开溢出中断
T3CCTL0 |= 0x40;//开T3通道0中断
T3IE = 1; //定时器3中断使能
T3CTL |= 0x10; //启动定时器
IEN0 |= 0X80; //开总中断
LED_R_IO = LED_R_ACTIVE;//点亮LED
2.在main函数的while循环输出时间和检测是否有设置时间
while(1)
{
if (culUartRxBufferRead(uartRxBuf, &length) == SUCCESS)//UART收到数据
{
if (length == 9)//判断数据长度
{
culTimeSet(uartRxBuf); //设置时间
}
}
if (gTimeBrush == 1)//判断刷新时间标志位
{
culTimePutOut();//打印时间
gTimeBrush = 0; //清除标志位
}
}
}
- 定时器3中断函数,用于计算时分秒
#pragma vector = T3_VECTOR
__interrupt void T3_ISR( void )
{
T3IF = 0; //可不清中断标志,硬件自动完成
gMsCountForTime ++;
if (gMsCountForTime >= 1000)//1000ms
{
gMsCountForTime = 0;
gTimeBrush = 1;
if (gTime[2] < 59)
{
gTime[2] ++; //秒加1
}
else
{
gTime[2] = 0;
if (gTime[1] < 59)
{
gTime[1] ++; //分钟加1
}
else
{
gTime[1] = 0;
if (gTime[0] < 23)
{
gTime[0] ++; //小时加1
}
else
{
gTime[0] = 0; //24:00 -> 0:00
}
}
}
}
}