找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1091|回复: 1
打印 上一主题 下一主题
收起左侧

MSP430G2553单片机自换挡测频程序

[复制链接]
跳转到指定楼层
楼主
ID:547793 发表于 2019-5-26 19:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚写好的测频程序,带自动换挡,0.1到1M
#include"MSP430G2553.h"
#include"TCA6416A.h"
#include"HT1621.h"
#include"LCD_128.h"

voidtimer0_capture();
/**
* main.c
*/
float  n1=0 ;                            //统计每秒的周期数
float  n2=0;                            //统计每个周期时钟数
float  begin_counter=0;
float   time_frequency=0;
float  k=0;                                    //状态转化
float  n_max=181;                     //分界点
float  m=0;                           //统计溢出数
float  m1=0;  
float  n=0;
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer
    //时钟配置
    BCSCTL1=CALBC1_16MHZ;
     DCOCTL=CALDCO_16MHZ;
     //BCSCTL3=LFXT1S1;
    timer0_capture();                  //捕获定时器配置
    timer1_init();                        //测周法定时器配置
    _enable_interrupts();
    while(1)
    {
        m1=16000000/n2;             //测周法频率转化

        if(time_frequency>n_max)             //阈值电压,高低频转化
        {
            n= time_frequency;
        }
        else
        {
           n=m1;
        }
        }
      return 0;
}
voidtimer0_capture(void)                              //捕获定时器
{
        P1DIR &=~BIT2;
        P1SEL |=BIT2;
        TA0CTL=TASSEL_1+MC_1+TAIE+TACLR;   //外部晶振,连续计数模式,使能计数器中断,计数器清零
        TA0CCTL1 |=CM_1+SCS+CAP+CCIS_0+CCIE;//上升沿捕获,同步捕获,CCI0A输入,使能捕获中断
        TA0CCR0=32768;                       //产生秒脉冲
        }
void timer1_init()                                                                //测周法定时器
{

    TA1CTL=TASSEL_2+MC_2+TAIE+TACLR;   //外部晶振,上升计数,使能计数器中断,计数器清零

}
#pragmavector=TIMER0_A1_VECTOR
__interrupt voidTIMER0_A1_ISR(void)
{
    switch(TA0IV)
        {
        case 2: TA0CCR1_interrupt(); break;           //捕获中段
        case 10:  TA0_interrupt(); break;                          //溢出中断
        default: break;
        }
}
voidTA0CCR1_interrupt(void)
{
    n1=n1+1;                                       //高频计数
   n2=m*65536+TA1R-begin_counter;                                   //低频时钟沿个数
        begin_counter=TA1R;
        m=0;
}
voidTA0_interrupt(void)
{
    time_frequency=n1;                                                                   //高频信号个数
    n1=0;
}
#pragmavector=TIMER1_A1_VECTOR
__interrupt void TIMER1_A1_ISR(void)                                         
{
    switch(TA1IV)
    {
            case 10:  TA1_interrupt(); break;                             //溢出中断
            default: break;
    }
}
voidTA1_interrupt()
{
    m=m+1;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-5-30 18:25 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表