msp430f149计时器A测量到的时间间隔无法用1602显示,如何解决?

msp430f149计时器A测量到的时间间隔无法用1602显示

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7761149
  • 这篇博客你也可以参考下:【速成MSP430f149】电赛期间学习MSP430f149笔记
  • 除此之外, 这篇博客: 电赛校赛-三相逆变电源设计(单片机部分--MSP430F249仿真测频+串口发送机与串口接收机)中的 写在前面 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    觉得52单片机比较低端的,可以尝试本文的MSP430,两种测量方案均通过测试仿真,个人还是推荐C52,proteus对其他单片机仿真的速度好像提不了太快,承接上文,本次主要设计就是用的是MSP430F249的主控,文末附上下载链接

  • 以下回答来自chatgpt:

    在msp430f149开发板上使用计时器A测量时间间隔,获得时间间隔后,可以通过连接1602显示屏的方式将其展示出来。解决问题的步骤如下:

    1. 确定计时器A的输入时钟源和时钟分频值。
    TA0CTL = TASSEL_2 + ID_0; //选择SMCLK作为输入时钟源,时钟分频系数为1
    
    1. 配置计时器A的计数模式、计数上下限,并开启计时器A。
    TA0CTL |= MC_2; //设定计时器A为连续计数模式
    TA0CTL |= TACLR; //清空计数器
    TA0CCR0 = 0xFFFF; //设定计数上限为65535
    TA0CTL |= TAIE; //使能溢出中断
    TA0CTL |= TAIFG; //立即置位中断标志,等待下一次计时器溢出来触发中断
    
    1. 在计时器A溢出中断服务函数中计算两个时间点之间的时间间隔,并将时间间隔转换成需要显示的格式。
    #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显示屏的驱动方式、字符编码等,但这些问题相对来说都比较容易解决,可以在网上找到相关的资料。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^