6161|8

29

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

用msp430g2553做频率测量问题 [复制链接]

写了一个用外部管脚秒闸门,但是为啥显示的频率总是实际频率的4倍,一秒钟内脉冲个数应当就是输入信号的频率呀
#include "msp430g2553.h"
#include "Clock.h"
#include "LCD1602.h"
#include "num_to_string.h"

unsigned long int Freq;                                //频率测量结果存放变量
unsigned int TA1_OverflowCnt;                //TA1的CCR0通道溢出次数存放变量,溢出十次即一秒
unsigned char num_string[] = {"          "};//用于存放频率从数字转化来的字符串
unsigned char hz[] = {"hz"};
unsigned int TA_OverflowCnt;                //主计数器溢出标志

void main(void)
{
        WDTCTL = WDTPW + WDTHOLD;                //关闭看门狗
        Configclock_1MHZ();                                //配置时钟1Mhz
        P1DIR &= ~BIT0;                                        //P1.0(TACLK)作为输入管脚
        P1SEL |= BIT0;                                        //允许其第二功能,作为TACLK输入
        TA1CTL = TASSEL_2 + MC_1 + ID_2 + TACLR;//定时器选SMCLK,2分频,增模式
        TA1CCR0 = 50000;
        TA1CCTL0 |= CCIE;                                        //通道零中断使能
        _EINT();;                                                //打开总中断
        LCD1602_init();                                        //液晶初次使用初始化
        LCD1602_init_set();                                //液晶设置初始化
        while(1)
        {
                LPM0;                                                //休眠,等待TIMERA唤醒
                //*********以下代码每一秒运行一次**********
                Freq = TA_OverflowCnt*65536 + TAR;                                                                //读取TAR中的值
                TA_OverflowCnt = 0;
                TACTL = TASSEL_0 + MC_2 + TAIE + TACLR;//TA选择外部管脚上升沿计数,连续增模式,清零重新开始计数
                num_to_string(Freq, 8, 0, num_string);        //将得到的频率转换为字符串以便在LCD显示
                LCD_write_string(0, 1, num_string);                //将该频率显示在LCD第一行
                LCD_write_string(8, 1, hz);//写入单位
        }
}

#pragma vector = TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)                //0.05秒产生一次中断
{
        TA1_OverflowCnt++;
        if(TA1_OverflowCnt == 20)                                //通过计数达到一秒定时
        {
                TA1_OverflowCnt = 0;
                LPM0_EXIT;
        }
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
        switch(TAIV)
        {
                case 2:break;
                case 4:break;
                case 10:TA_OverflowCnt++;
                                break;
        }
}

最新回复

TA1CTL = TASSEL_2 + MC_1 + ID_2 + TACLR;//定时器选SMCLK,2分频,增模式 2分频  详情 回复 发表于 2013-4-25 18:22
 
点赞 关注(1)

回复
举报

5276

帖子

5

TA的资源

裸片初长成(中级)

沙发
 
你的 Configclock_1MHZ(); 没看到,smclk到底是多少?

unsigned int TA1_OverflowCnt;                //TA1的CCR0通道溢出次数存放变量,溢出十次即一秒
__interrupt void TIMER1_A0_ISR(void)                //0.05秒产生一次中断
互相矛盾呀

另外,TAR好像不能直接读一次,看手册,不可靠,当然这个问题好像和你的现象不是一个问题
中断中使用的变量最好加上volatile

点评

CCR0通道设为50000,SMCLK是1MHZ,溢出20次不就是一秒了吗?一秒后唤醒CPU  详情 回复 发表于 2013-4-25 17:50
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

板凳
 
现在芯币好像也有点用途,你最好悬赏

点评

什么用途?  详情 回复 发表于 2013-4-25 09:43
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

4005

帖子

0

TA的资源

版主

4
 

回复 板凳 wangfuchong 的帖子

什么用途?

点评

芯币的用途: 1)使用自己的芯币,对帖子给与正面或负面的评价,从而影响发帖人在EEWORLD社区的威望;   2)使用芯币换取PCB板或EEWORLD不定期举办的竞拍活动;    3)使用芯币换取EEWORLD社区的抽  详情 回复 发表于 2013-4-25 10:57
 
 
 

回复

9166

帖子

6

TA的资源

管理员

5
 

回复 4楼 huo_hu 的帖子

芯币的用途:
        1)使用自己的芯币,对帖子给与正面或负面的评价,从而影响发帖人在EEWORLD社区的威望;
  2)使用芯币换取PCB板或EEWORLD不定期举办的竞拍活动; 
  3)使用芯币换取EEWORLD社区的抽奖机会;  
  4)当社区活动名额有限时,芯币多者、威望高者优先;  
  5)购买网友自定义的收费资料;  
  6)可用于问题悬赏,使得自己的问题可以更快得到解答;  
  7)购买社区道具:变色卡、金钱卡、IP卡、提升卡、置顶卡、悔悟卡、狗仔卡、沉默卡等。
   
     近期的EEWORLD官方竞价活动——Maxim气象站
     详情请点击 https://bbs.eeworld.com.cn/thread-370634-1-1.html
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

:)  详情 回复 发表于 2013-4-25 15:39
 
 
 

回复

4005

帖子

0

TA的资源

版主

6
 

回复 5楼 eric_wang 的帖子

 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 沙发 wangfuchong 的帖子

CCR0通道设为50000,SMCLK是1MHZ,溢出20次不就是一秒了吗?一秒后唤醒CPU

点评

TA1CTL = TASSEL_2 + MC_1 + ID_2 + TACLR;//定时器选SMCLK,2分频,增模式 2分频  详情 回复 发表于 2013-4-25 18:22
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

8
 
原帖由 lgd0722 于 2013-4-25 17:50 发表
CCR0通道设为50000,SMCLK是1MHZ,溢出20次不就是一秒了吗?一秒后唤醒CPU
TA1CTL = TASSEL_2 + MC_1 + ID_2 + TACLR;//定时器选SMCLK,2分频,增模式
2分频

点评

嗯,我也是晚上刚看到,问题就在这里  详情 回复 发表于 2013-4-25 22:09
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 8楼 wangfuchong 的帖子

嗯,我也是晚上刚看到,问题就在这里
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表