IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【库函数】MSP430F5529 测量方波的频率及占空比 -> 正文阅读

[嵌入式]【库函数】MSP430F5529 测量方波的频率及占空比

【下面的代码仅给出了实现本功能必要的部分】
其中的OLED函数部分为OLED自带的库函数
本单片机上的SMCLK 设置为了 24MHz

#define TIMER_PERIOD 2400
#define DUTY_CYCLE 1200
//while(1) 前的初始化

void Frequence_Duty_init()
{
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,GPIO_PIN2);
    //选用P1.2   使用TA0.1 Timer Capture 

    Timer_A_initContinuousModeParam Counter = {0};
    Counter.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
    Counter.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;
    Counter.startTimer = true;
    Counter.timerClear = TIMER_A_DO_CLEAR;
    Counter.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE;
    Timer_A_initContinuousMode(TIMER_A0_BASE, &Counter);
	//开启一个连续模式的计时

    Timer_A_initCaptureModeParam CaptureParam = {0};
    CaptureParam.captureRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1;
    CaptureParam.captureMode = TIMER_A_CAPTUREMODE_RISING_EDGE;
    CaptureParam.captureInputSelect = TIMER_A_CAPTURE_INPUTSELECT_CCIxA;
    CaptureParam.synchronizeCaptureSource = TIMER_A_CAPTURE_SYNCHRONOUS;
    CaptureParam.captureInterruptEnable = TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE;
    CaptureParam.captureOutputMode = TIMER_A_OUTPUTMODE_TOGGLE;
    Timer_A_initCaptureMode(TIMER_A0_BASE,&CaptureParam);
    //开启捕获模式,并开启它的中断
}
//将此函数放到 while(1) 里面
void Frequence_Duty_Display()
{
    if(FreqFlag == 0)
    {
        if(D2 > D1)
        {
         HighClockSteps=(HighOverFlow-1) * 65536 + D2 - D1;
        }else
        {
         HighClockSteps=(HighOverFlow-1) * 65536 + D2 + 65536 - D1;
        }

        if(D3 > D1)
        {
         AllClockSteps=(AllOverFlow-1)*65536 + D3 - D1;
        }else
        {
         AllClockSteps=(AllOverFlow-1)*65536 + D3 + 65536 - D1;
        }


        //占空比
        Duty = HighClockSteps*100.0/AllClockSteps;
        Point1 = Duty - (int)Duty;
        OLED_ShowNum(0,2,Duty,3,16);
        OLED_ShowString(25,2,".");
        OLED_ShowNum(30,2,Point1*100,2,16);

        //频率
        Frequency = 24000000.0/AllClockSteps;	//根据自己的单片机主频修改
        Point2 = Frequency - (int)Frequency;
        OLED_ShowNum(0,6,Frequency,5,16);
        OLED_ShowString(40,6,".");
        OLED_ShowNum(45,6,Point2*100,2,16);
    }
}
//此代码块加在 main.c 末尾
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
    Timer_A_disableCaptureCompareInterrupt (TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1);
    if(FreqFlag == 1)
    {
        static u8 index;
        if(TA0CCTL1&CM0&&(index==0))
        {
            TA0CCTL1|=CM_2;//更变为下降沿触发
            D1=TA0R;//记录初始时间
            D2=D3=0;
            HighOverFlow = AllOverFlow = 0;
            index=(index+1)%3;
        }
        else if((TA0CCTL1&CM1)&&(index==1))//下降沿
        {
            TA0CCTL1|=CM_1;//更改设置为上升沿触发
            D2 = TA0R; //记录高电平结束时间
            HighOverFlow = AllOverFlow;
            index=(index+1)%3;
        }
        else if((TA0CCTL1&CM0)&&(index==2)) //第二次上升沿
        {
            //测完一个周期,等待下一个上升沿
            D3 = TA0R;
            FreqFlag = 0;
            index=(index+1)%3;
        }
    }
    AllOverFlow++;


    Timer_A_clearCaptureCompareInterrupt(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1);
}

实测效果图
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:22:45  更:2021-08-04 11:24:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 10:21:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计