利用MSP430G2553测量信号频率(频率计)

发布者:风轻迟最新更新时间:2022-09-23 来源: csdn关键字:MSP430G2553  测量信号频率  频率计 手机看文章 扫描二维码
随时随地手机看文章

说明

单片机产生信号在P1.6引脚


单片机输入信号在P2.5引脚


如果直接测量外部信号,直接连接P2.5,不用管P1.6


在变量窗口创建并查看freq的值即可


代码

该代码可以直接在CCS上进行编译运行

142-160行是单片机产生信号


// An highlighte`

#include  

#include "stdint.h"

#include

uint32_t timestamp = 0;//时间戳

uint16_t capvalue_1 = 0;//第一次捕捉值

uint16_t capvalue_2 = 0;//第二次捕捉值

uint32_t timestamp_1 = 0;//第一次时间戳

uint32_t timestamp_2 = 0;//第二次时间戳

uint32_t totaltime = 0;

float freq = 0;

/*

 * @fn: void InitSystemClock(void)

 * @brief: 初始化系统时钟

 * @para: none

 * @return: none

 * @comment:初始化系统时钟

 */

void InitSystemClock(void)

{

/*配置DCO为1MHz*/

    DCOCTL = CALDCO_1MHZ;

    BCSCTL1 = CALBC1_1MHZ;

    /*配置SMCLK的时钟源为DCO*/

    BCSCTL2 &= ~SELS;

    /*SMCLK的分频系数置为1*/

    BCSCTL2 &= ~(DIVS0 | DIVS1);

}

/*

 * @fn: void InitUART(void)

 * @brief: 初始化串口,包括设置波特率,数据位,校验位等

 * @para: none

 * @return: none

 * @comment:初始化串口

 */

void InitUART(void)

{

    /*复位USCI_Ax*/

    UCA0CTL1 |= UCSWRST;


    /*选择USCI_Ax为UART模式*/

    UCA0CTL0 &= ~UCSYNC;


    /*配置UART时钟源为SMCLK*/

    UCA0CTL1 |= UCSSEL1;


    /*配置波特率为9600@1MHz*/

    UCA0BR0 = 0x68;

    UCA0BR1 = 0x00;

    UCA0MCTL = 1 << 1;

    /*使能端口复用*/

    P1SEL |= BIT1 + BIT2;

    P1SEL2 |= BIT1 + BIT2;

    /*清除复位位,使能UART*/

    UCA0CTL1 &= ~UCSWRST;

}

/*

 * @fn: void UARTSendString(uint8_t *pbuff,uint8_t num)

 * @brief: 通过串口发送字符串

 * @para: pbuff:指向要发送字符串的指针

 * num:要发送的字符个数

 * @return: none

 * @comment:通过串口发送字符串

 */

void UARTSendString(uint8_t *pbuff,uint8_t num)

{

uint8_t cnt = 0;

for(cnt = 0;cnt < num;cnt ++)

{

while(UCA0STAT & UCBUSY);

UCA0TXBUF = *(pbuff + cnt);

}

}

/*

 * @fn: void UARTPrint(uint8_t *pbuff)

 * @brief: 通过串口发送字符串

 * @para: pbuff:指向要发送字符串的指针

 * @return: none

 * @comment:通过串口发送字符串,遇到''停止发送

 */

void UARTPrint(uint8_t *pbuff)

{

uint8_t cnt = 0;

while(*(pbuff + cnt) != '')

{

while(UCA0STAT & UCBUSY);

UCA0TXBUF = *(pbuff + cnt);

cnt ++;

}

}

/*

 * @fn: void PrintFreq(float freq)

 * @brief: 通过串口发送频率

 * @para: freq:频率

 * @return: none

 * @comment:通过串口发送频率

 */

void PrintFreq(float freq)

{

uint32_t temp = (uint32_t)(freq * 1000);

uint8_t charbuff[] = {0,0,0,0,0,0,0,0,0};//最大999999.999Hz

int8_t cnt = 0;

for(cnt = 8;cnt >= 0;cnt --)

{

charbuff[cnt] = (uint8_t)(temp % 10) + '0';

temp /= 10;

}

UARTSendString("频率为:",8);

UARTSendString(charbuff,6);

UARTSendString(".",1);

UARTSendString(charbuff + 6,3);

UARTSendString("Hz",2);

}

/*

 * main.c

 */


int main(void)

{

    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

    InitSystemClock();

    InitUART();


    /*设置时钟源为SMCLK*/

    TA1CTL |= TASSEL_2;

    /*设置工作模式为Up Mode*/

    TA1CTL |= MC_1;

    /*设置定时间隔*/

    TA1CCR0 = 49999;//50ms

    /*开启TAIFG中断*/

    TA1CTL |= TAIE;


    /*TA1,CCR2用于捕捉功能*/

    TA1CCTL2 |= CAP;

    /*上升沿捕捉*/

    TA1CCTL2 |= CM0;

    /*P2.5作为捕捉输入(CCI2B)*/

    TA1CCTL2 |= CCIS0;

    P2SEL |= BIT5;

    /*允许捕捉比较中断*/

    TA1CCTL2 |= CCIE;

/*利用单片机生成信号,便于验证程序正确性

 *更改TA0CCR0和TA0CCR1,可以改变信号的频率和占空比*/

    /*设置时钟源为SMCLK*/

    TA0CTL |= TASSEL1;

    /*设置工作模式为Up&Down*/

    TA0CTL |= MC0|MC1;

    /*设置TA0CCR0为0x00FF*/

    TA0CCR0 = 0x0AAA;

    /*设置TA0CCR1为0x00FF*/

    TA0CCR1 = 0x0555;//占空比(TACCR0 - TACCR1) / TACCR0,频率=SMCLK/(TACCR0)/2

    /*设置为比较模式*/

    TA0CCTL0 &= ~CAP;

    TA0CCTL1 &= ~CAP;

    /*设置比较输出模式*/

    TA0CCTL1 |= OUTMOD_6;

    /*设置IO复用*/

    P1SEL |= BIT6;

    P1DIR |= BIT6;


    /*打开全局中断*/

    __bis_SR_register(GIE);

    while(1)

    {

    __delay_cycles(500000);

    freq = (float)(1000000.0) / totaltime;

    PrintFreq(freq);

    }

return 0;

}


#pragma vector = TIMER1_A1_VECTOR

__interrupt void Time_Tick(void)

{

static uint8_t cnt = 0;

__bis_SR_register(GIE);//允许中断嵌套

switch(TA1IV)

{

case 0x02://捕捉比较中断1

break;

case 0x04://捕捉比较中断2

if(cnt == 0)

{

capvalue_1 = TA1CCR2;//保存第一次捕捉值

timestamp_1 = timestamp;//保存第一次时间戳

cnt ++;

}

else

{

capvalue_2 = TA1CCR2;//保存第二次捕捉值

timestamp_2 = timestamp;//保存第二次时间戳

cnt = 0;

totaltime = (timestamp_2 - timestamp_1) * 50000 + capvalue_2 - capvalue_1;//计算总时间

}

break;

case 0x0A://溢出中断

timestamp ++;

break;

default:

break;

}

}`d block

var foo = 'bar';


关键字:MSP430G2553  测量信号频率  频率计 引用地址:利用MSP430G2553测量信号频率(频率计)

上一篇:MSP430串口波特率寄存器的配置
下一篇:利用MSP430G2553测量信号幅度

推荐阅读最新更新时间:2024-11-11 15:11

电子小信号数字频率计的设计与制作
一、设计思路 该频率计的测频范围0Hz~999Hz,测量的电压范围为0~7mV,本电路结构简单,成本低廉,对于提高动手能力加强对理论知识的灵活运用具有很大的帮助。该电路大致可分为模拟和数字两个部分: 模拟部分包括信号放大电路、信号整形电路;数字部分包括计数电路、显示电路、时基信号发生电路与计数器与锁存器控制电路等,基本框如下图所示。 该电路的整体思路就是将交变的模拟信号转换为数字信号,然后实现频率的计算。当在该电路的输入端输入微小变化的模拟信号时。经过第一部分的放大电路放大后。再通过由比较器组成的整形电路进行整形。此时该部分输出的信号就变成了规则的数字脉冲信号,最后通过数字电路来实现计数功能。整形过后数字信号就可以通过计数器
[测试测量]
电子小信号数字<font color='red'>频率计</font>的设计与制作
51单片机+74LS160频率计,最高可测频10M
因为51单片机晶振的原因,测频的范围有限制,这时就需要外置74LS160分频器,进行分频。 本程序采用了定时器的方式2定时,8位自动重装计数器,精准定时。 单片机源程序: #include reg52.h #include intrins.h #define Duan P2 #define Wei P1 sbit mr = P3^0; unsigned char code smg_duan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code smg_wei ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0x
[单片机]
51单片机+74LS160<font color='red'>频率计</font>,最高可测频10M
以单片机设计为核心的数字频率计
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率计在教学、科研、测量仪器、工业控制等方面都有较广泛的应用。测量频率的方法有多种,其中电子计数测量频率具有精度高、使用方便、测量迅速,以及便于实现测量自动化等优点,是频率测量的重要手段之一。本设计就是用计数的方法,以单片机AT89C51为控制核心,充分利用其软硬件资源,设计并制作了频率计的计数、显示部分。 1 测频设计原理 频率计测频原理方框图如图1所示。被测输入信号通过脉冲形成电路进行放大与整形(可由放大器与门电路组成),然后送到单片机入口,单片机计数脉冲的输入个数。计数结果经LED数码管显示,从而得到被测信号频率
[单片机]
以单片机设计为核心的数字<font color='red'>频率计</font>
MSP430G2553测试程序(状态机检测按键)
//原始状态P1.6亮,P1.0暗,利用状态机进行按键检测,按下并释放的瞬间P1.0翻转,P1.6翻转 // // MSP430G2xx3 // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // P1.3|KEY P1.6|-- LED // | P1.0|-- LED // 作者 http://jiwm.blog.163.com // Built with IAR Embedded Workbench Version: 5.40 / // Timer A0 interrupt service routine #pragma vector=TIMER0_A0_
[单片机]
我的TLC2543学习笔记——基于msp430g2553单片机
Created on: 2012-9-8 Author: zhang bin 学习笔记 for msp430g2553 redesigned by zhang bin 2012-09-08 versions :12_09_01 All Rights Reserved TLC2543具有4线制串行接口,分别为片选端(CS),串行时钟输入端(I/O CLOCK),串行数据输入端(DATA IN)和串行数据输出端(DATA OUT)(转换结束脚EOC可以不接)。它可以直接与SPI器件进行连接,不需要其他外部逻辑。同时,它还在高达4MHz的串行速率下与主机进行通信。 TLC254
[单片机]
MSP430G2553测试程序(呼吸灯)
//MSP430G2553 呼吸灯演示程序 - 使用Timer_A,Up Mode, DCO SMCLK // // 介绍: 该程序利用TIMER A 的 UP模式 在P1.6脚产生PWM输出 // 将CCR0设置为1500来定义PWM的周期,利用循环不断改变CCR1的值, // 实现利用改变PWM的占空比来改变LED亮度. // ACLK = na, SMCLK = MCLK = TACLK = default DCO // // MSP430G2553 // ----------------- // /|| XIN|- // | | | // --|RST XOUT|- // | | // | P1.6/TA1|-- CCR1
[单片机]
模拟示波器怎么看频率,模拟示波器频率计
示波器是一种用途十分广泛的电子测量仪器。它能把肉眼看不见的电信号变换成看得见的图象,便于人们研究各种电现象的变化过程。模拟示波器与数字示波器是现在使用最广泛的两种示波器,今天我们便来了解模拟示波器的一些简单的用法 模拟示波器作用 1、可以测量直流信号、交流信号的电压幅度 2、可以测量交流信号的周期,并以此换算出交流信号的频率。 3、可显示交流信号的波形。 4、可以用两个通道分别进行信号测量。 5、可以在屏幕上同时显示两个信号的波形,即双踪测量功能。此功能能够测量两个信号之间的 相位差,和波形之间形状的差别。 模拟示波器怎么看频率 模拟示波器能直接读出的是幅度(峰峰值,相当于幅值的2倍)和周期,频率是根据周期的倒数计算出来的。
[测试测量]
模拟示波器怎么看频率,模拟示波器<font color='red'>频率计</font>算
使用单片机实现数字频率计数器的设计说明
1. 实验任务 利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±1HZ。 2. 电路原理图 图4.31.1 3. 系统板上硬件连线 (1). 把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 (2). 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 (3). 把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。
[单片机]
使用单片机实现数字<font color='red'>频率计</font>数器的设计说明
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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