msp430f149计时器A测量到的时间间隔无法用1602显示
不知道你这个问题是否已经解决, 如果还没有解决的话:觉得52单片机比较低端的,可以尝试本文的MSP430,两种测量方案均通过测试仿真,个人还是推荐C52,proteus对其他单片机仿真的速度好像提不了太快,承接上文,本次主要设计就是用的是MSP430F249的主控,文末附上下载链接
在msp430f149开发板上使用计时器A测量时间间隔,获得时间间隔后,可以通过连接1602显示屏的方式将其展示出来。解决问题的步骤如下:
TA0CTL = TASSEL_2 + ID_0; //选择SMCLK作为输入时钟源,时钟分频系数为1
TA0CTL |= MC_2; //设定计时器A为连续计数模式
TA0CTL |= TACLR; //清空计数器
TA0CCR0 = 0xFFFF; //设定计数上限为65535
TA0CTL |= TAIE; //使能溢出中断
TA0CTL |= TAIFG; //立即置位中断标志,等待下一次计时器溢出来触发中断
#pragma vector = TIMER0_A1_VECTOR
__interrupt void Timer_A (void)
{
static uint16_t time1 = 0;
static uint16_t time2 = 0;
uint16_t timeDelta = 0;
if(TA0IV == TA0IV_TAIFG) //判断是计时器A溢出中断
{
if(time1 == 0) //第一个时间点
{
time1 = TA0R; //记录第一个时间点
}
else //第二个时间点
{
time2 = TA0R; //记录第二个时间点
timeDelta = time2 - time1; //计算时间间隔
time1 = 0;
time2 = 0;
//将时间间隔转换成需要显示的格式
uint8_t min = timeDelta / (60 * 1000);
uint8_t sec = (timeDelta / 1000) % 60;
uint16_t ms = timeDelta % 1000;
//将格式化后的时间间隔显示在1602显示屏上
//具体实现方式因不同的显示屏而异,这里不再赘述
}
TA0CTL |= TAIFG; //立即置位中断标志,等待下一次计时器溢出来触发中断
}
}
这就是解决问题的主要步骤。在具体实现过程中,还需要考虑一些细节问题,比如1602显示屏的驱动方式、字符编码等,但这些问题相对来说都比较容易解决,可以在网上找到相关的资料。