功能:集成前面两个实现的功能,同时把串口波特率改为57600.能计时。能控制灯,设置时间。
- 配置LED,定时器,UART
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 |= 10; //57600
U0BAUD = 216;
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
- 在main函数的while循环里刷新时间,设置时间
while(1)
{
/* 检查串口是否收到消息 */
if (culUartRxBufferRead(uartRxBuf, &length) == SUCCESS)
{
if (length == 9)
{
culTimeSet(uartRxBuf); //设置后即时刷新时间
}
else if(length == 1)
{
culLedControl(uartRxBuf[0]); //控制LED的字符,从串口得到
}
}
/* 检查是否需要打印串口时间 */
if (gTimeBrush == 1)
{
culTimePutOut();
gTimeBrush = 0;
/* 检查LED控制方式 */
if (gLedBlinkFollowSecend)
{
LED_R_TOG();
}
}
}