MSP430F5529测周法测量信号频率

合集下载

MSP430F5529实验指导书V1.0

MSP430F5529实验指导书V1.0

MSP430F5529 实验指导书(V1.0)2014年10月27日东北林业大学机电工程学院“3+1”实验室实验一基础GPIO实验实验二键盘与液晶显示实验实验三时钟系统配置实验实验四看门狗与定时器实验实验五 AD/DA实验实验六比较器实验实验七 Flash实验实验八串行通信实验实验一基础GPIO实验【实验目的】1、熟悉CCS的基本使用方法;2、掌握MSP430系列单片机程序开发的基本步骤;3、掌握MSP430 IO口的基本功能。

【实验仪器】1、SEED-EXP430F5529v1.0开发板一套;2、PC机操作系统Windows XP或Windows 7,CCSv5.1集成开发环境。

【实验原理】CCS(Code Composer Studio)是 TI 公司研发的一款具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境,能够帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。

CCSv5.1 为 CCS 软件的最新版本,功能更强大、性能更稳定、可用性更高,是 MSP430 软件开发的理想工具。

SEED-EXP430F5529v1.0开发板上的有8个可操作的LED灯,与MCU的IO口对应关系如图1-1所示:图1-1 LED与MCU的IO对应关系电路我们可以通过控制单片机IO口的输出电平状态来控制各个LED灯的亮灭。

开发板上还有2个可操作的按键S1,S2。

如图1-2所示。

图1-2 按键电路我们可以通过读取与按键相连的IO口的输入电平状态来执行相应的操作。

此外,S1,S2还可以作为外部中断源,触发中断。

【实验内容】1、用调用头文件的方法,使能MSP430F5529开发板上的8个LED灯依次按顺序循环点亮;2、用按键S1控制开发板上LED1的亮灭状态(查询法);3、用按键S2控制开发板上跑马灯的循环速度(中断方式)。

【实验步骤】内容1:使能开发板上的8个LED灯依次按顺序循环点亮1、打开CCSv5并确定工作区间,然后选择File-->New-->CCS Project 弹出图1-3对话框。

MSP430F5529测频法测量信号频率

MSP430F5529测频法测量信号频率

MSP430F5529测量频率-----测频法信号变换电路过零比较器,lm393输出上拉电阻,两电阻分压程序#include <>#include ""//测频法,上限1Mhz//看门狗定时1s,开门狗中断处理程序开启捕获器,捕获1s中所有的上升脉冲,脉冲个数即为频率/*优化的反向可以将开门够定时1S使用定时器去定时1s**/long fre=0;char buf[60]="\0";void SetVcoreUp (unsigned int level){// Open PMM registers for writePMMCTL0_H = PMMPW_H;// Set SVS/SVM high side new levelSVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;// Set SVM low side to new levelSVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;// Wait till SVM is settledwhile ((PMMIFG & SVSMLDLYIFG) == 0);// Clear already set flagsPMMIFG &= ~(SVMLVLRIFG + SVMLIFG);// Set VCore to new levelPMMCTL0_L = PMMCOREV0 * level;// Wait till new level reachedif ((PMMIFG & SVMLIFG))while ((PMMIFG & SVMLVLRIFG) == 0);// Set SVS/SVM low side to new levelSVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;// Lock PMM registers for write accessPMMCTL0_H = 0x00;}void init_clock(){SetVcoreUp (0x01);SetVcoreUp (0x02);SetVcoreUp (0x03);UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFOUCSCTL4 |= SELA_2; // Set ACLK = REFO__bis_SR_register(SCG0); // Disable the FLL control loopUCSCTL0 = 0x0000; // Set lowest possible DCOx, MODxUCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operationUCSCTL2 = FLLD_0 + 609; // Set DCO Multiplier for 25MHz// (N + 1) * FLLRef = Fdco// (762 + 1) * 32768 = 25MHz// Set FLL Div = fDCOCLK/2__bic_SR_register(SCG0); // Enable the FLL control loop__delay_cycles(782000);do{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flag}void send_char(char sc){UCA0TXBUF=sc;while(!(UCA0IFG&UCTXIFG));}void send_string(char *s){while(*s!='\0'){send_char(*s++);}}init_uart(){P3SEL |= BIT3+BIT4; // ,4 = USCI_A0 TXD/RXDUCA0CTL1 |= UCSWRST; // **Put state machine in reset**UCA0CTL1 |= UCSSEL__SMCLK; // SMCLKUCA0BR0 = 173; // 1MHz 115200 (see User's Guide)UCA0BR1 = 0; // 1MHz 115200 UCA0MCTL |= UCBRS_5 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**// UCA0IE |= UCRXIE; // Enable USCI_A0 RX interruptsend_string("CLS(0);\r\n");}int main(void) {WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timerinit_clock();//初始化系统时钟为20 MHzinit_uart();//串口波特率为115200bpsWDTCTL=WDT_ADLY_1000 ;//开门狗定时1sP1DIR &= ~BIT2; // inP1SEL |= BIT2; //捕获输入SFRIE1|=WDTIE; //开看门狗定时器中断__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts__no_operation(); // For debugger return 0;}void measure_fre(){if(fre>=500)sprintf(buf,"DS16(0,60,'频率:% ',4);\r\n",fre*;if(fre<=52)sprintf(buf,"DS16(0,60,'频率:% ',4);\r\n",(fre)*;else if(fre<=208)sprintf(buf,"DS16(0,60,'频率:% ',4);\r\n",(fre+1)*;else if(fre<=496)sprintf(buf,"DS16(0,60,'频率:% ',4);\r\n",(fre+3)*;send_string( buf);fre=0;TA0CTL = TASSEL_2 + MC_2 + TACLR+TAIE; // SMCLK, 连续mode, clear TAR 8分频下限可以测到8Hz。

基于MSP430的低频频率测量计

基于MSP430的低频频率测量计

0 . 1 8 0 . 0 0 4 6 l 9 0 . 1 9 0 . 0 0 4 7 7 7 0 . 2 0 0 . 0 0 4 8 8 6 O 1 9 0 . 0 0 4 6 1 9 O . 1 9 0 . 0 0 4 4 6
4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4
工 l 堡 功 能・ 要 I 上升沿捕获 J

3实验结果及结论 ‘ 、 ‘ 。
实验采用信号发生器输 出 相应频率到I / 0 口 P 1 . 2 , 高 … … … … ’
电平为+ 3 v , 低 电平为0 V 。
———T——一
疆 百雨丽
从实 验 结果可 以看 出,
3 7. 82
0 . 1 7 0 . 0 0 4 7 3 7 O . 1 8 0 . 0 0 4 8 9 6
0.1 8 0. 00 4 69 8
3 9 4 0
£ 篓当寓 盅葛 霜寄是 MS P 4 3 0 F 1 4 9
2 5 . 7 6 2 5 . 1 2 2 4 . 5 1 2 3 . 9 2 2 3 . 3 6 2 2 . 8 4 2 2 . 3 3 2 1 . 8 4 2 1 . 3 8 2 O . 9 4 2 O . 5 1 2 0 . 0 9 l 9 . 6 9 1 9 . 3 2 1 8 . 9 7 l 8 . 6 1
是否再 次有上 升沿?~ 二= = = — 率 , 则应选用其它方法。
— —
— —\

工 一

一 l 的测量。 若要测量更高的频
否 r …一 … …一 ~ …… ’
[ 参考文献] [ 1 ] 沈建华, 杨艳琴・ M s P 4 3 0 系列

MPF测周法测量信频率完整版

MPF测周法测量信频率完整版

M P F测周法测量信频率HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】M S P430F5529测量频率-----测周法信号变换电路过零比较器,lm393输出上拉电阻,两电阻分压程序#include <>#include ""#include ""//测周法,在捕获过程中,定时溢出不能被检测出,选择时钟频率为低频时能测出低频,频率高能测出频率高的部分/***/long long start=0;//long long int stop=0;double fre=;unsigned char i=0;unsigned char over=0;void SetVcoreUp (unsigned int level){// Open PMM registers for writePMMCTL0_H = PMMPW_H;// Set SVS/SVM high side new levelSVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;// Set SVM low side to new levelSVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;// Wait till SVM is settledwhile ((PMMIFG & SVSMLDLYIFG) == 0);// Clear already set flagsPMMIFG &= ~(SVMLVLRIFG + SVMLIFG);// Set VCore to new levelPMMCTL0_L = PMMCOREV0 * level;// Wait till new level reachedif ((PMMIFG & SVMLIFG))while ((PMMIFG & SVMLVLRIFG) == 0);// Set SVS/SVM low side to new levelSVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;// Lock PMM registers for write accessPMMCTL0_H = 0x00;}void init_clock(){SetVcoreUp (0x01);SetVcoreUp (0x02);SetVcoreUp (0x03);UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFOUCSCTL4 |= SELA_2; // Set ACLK = REFO__bis_SR_register(SCG0); // Disable the FLL control loopUCSCTL0 = 0x0000; // Set lowest possible DCOx, MODxUCSCTL1 = DCORSEL_7; // Select DCO range50MHz operationUCSCTL2 = FLLD_0 + 609; // Set DCO Multiplierfor 25MHz// (N + 1) * FLLRef = Fdco// (762 + 1) * 32768 = 25MHz// Set FLL Div = fDCOCLK/2__bic_SR_register(SCG0); // Enable the FLLcontrol loop__delay_cycles(782000);do{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flag}void send_char(char sc){UCA0TXBUF=sc;while(!(UCA0IFG&UCTXIFG));}void send_string(char *s){while(*s!='\0'){send_char(*s++);}}init_uart(){P3SEL |= BIT3+BIT4; // ,4 = USCI_A0 TXD/RXDUCA0CTL1 |= UCSWRST; // **Put state machine in reset**UCA0CTL1 |= UCSSEL__SMCLK; // SMCLKUCA0BR0 = 173; // 1MHz 115200 (seeUser's Guide)UCA0BR1 = 0; // 1MHz 115200UCA0MCTL |= UCBRS_5 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**UCA0IE |= UCRXIE; // Enable USCI_A0 RX interruptsend_string("CLS(0);\r\n");}int main(void) {char buf[60]="\0";WDTCTL = WDTPW + WDTHOLD; // Stop WDTinit_clock();init_uart();P1DIR &= ~BIT2; // inP1SEL |= BIT2; //捕获输入TA0CTL = TASSEL_2 +ID__8 + MC_2 + TACLR+TAIE; // SMCLK, 连续mode, clear TAR 8分频下限可以测到8Hz。

标准实验二MSP430F5529_25Hz方波发生及测量实验

标准实验二MSP430F5529_25Hz方波发生及测量实验

电子科技大学实验报告学生姓名:学号:指导教师:邮箱:一、实验室名称:MSP430单片机实验室二、实验项目名称:25Hz方波发生及峰值幅度测量三、实验原理:(1)通用功能I/O参见实验一中相关原理介绍。

(2)定时器(Timer)定时功能模块是MSP430应用系统中经常用到的重要部分,可用来实现定时控制、延迟、频率测量、脉宽测量和信号产生、信号检测等等。

一般来说,MSP430所需的定时信号可以用软件和硬件两种方法来获得。

MSP430系列有丰富定时器资源:看门狗定时器(WDT),定时器A(Timer_A),定时器B(Timer_B)和定时器D(Timer_D)等。

MSP430系列定时器部件功能,如表2-1所示:表2-1 MSP430中定时器的功能(a)看门狗定时器,主要作用在于当“程序跑飞”时,会产生溢出,从而产生系统复位,CPU需要重新运行用户程序,这样程序就可以又回到正常运行状态。

MSP430 看门狗模块具有以下特性:●8 种软件可选的定时时间●看门狗工作模式●定时器工作模式●带密码保护的WDT 控制寄存器●时钟源可选择●为降低功耗,可停止●时钟失效保护(b)定时器A由一个16位定时器和多路捕获/比较通道组成。

MSP430X5XX / 6XX系列单片机的Timer _A有以下特性:●带有4 种操作模式的异步16 位定时/计数器●输入时钟可以有多种选择,可以是慢时钟,快时钟以及外部时钟●可配置捕获/比较寄存器数多达7 个●可配置的PWM(脉宽调制)输出●异步输入和同步锁存。

不仅能捕获外部事件发生的时间还可锁定其发生时的高低电平●完善的中断服务功能。

快速响应Timer_A中断的中断向量寄存器●8种输出方式选择●可实现串行通讯Timer_A由以下4部分组成:定时计数器:16 位定时/计数寄存器——TAxR时钟源的选择和分频:定时器时钟TACLK 可以选择ACLK,SMCLK 或者来自外部的TAxCLK。

430实现频率的检测

430实现频率的检测

1 引言由于频率信号具有抗干扰性强、易于传输、测量准确度较高等优点,因此许多非频率量的传感信号都转换为频率量来进行测量和处理。

因此频率测量方法愈来愈引起关注和研究。

频率测量是测量和控制系统领域的最基本测量之一。

当今用的最多的测量信号频率的仪器是频率计,由于频率计在测量过程中需要一个时基信号作为测量信号频率的时基。

时基信号一般是由本机振荡电路发生的,尽管现在多用石英晶体振荡器,但是仍然不能保证时基信号的精度,因此频率计的测量精度也就成了问题。

传统的频率测量方法有两种[1]:一种是测频法,在一定时间间隔T内测出待测信号重复变化次数N,频率即为;另一种方法是测周法,在被测信号的一个周期内测出标准高频信号f的个数N,则被测频率。

本文介绍了一种测宽法[2],借助光电耦合原理,将交流信号转变成周期脉冲信号,通过捕获脉冲信号的下降沿,由定时器计数,通过二次计数的差值便能得到脉冲信号的周期,进而可以计算出所测交流信号的频率。

2 硬件电路设计硬件电路完成的任务是:(1)模拟电路部分的设计,其功能是进行信号的转化。

交流信号通过整流桥、光电耦合器等模拟器件便能得到周期脉冲信号。

(2)数字电路部分的设计,其功能是进行信号的检测。

MSP430单片机内部的16位定时器A具有脉冲捕获功能,能将脉冲信号的占空比检测出来。

图1为它的基本结构图。

图1 系统的基本结构2.1 模拟电路部分的设计图2为模拟部分原理。

下面主要阐述该电路的工作原理:图2模拟部分原理图考虑到交流信号中可能含有一定的直流信号,而直流信号会引起交流波形的上移或下移,这可能会导致原有交流信号没有零点,这就谈不上过零检测、周期脉冲了,因此要根据交流信号的实际情况,在交流信号的出口处用设个适当的电容,起到隔直的作用。

R1和R2是限流电阻,保护后面的稳压管、二极管、光电耦合器在额定功耗范围内。

由于这里的交流信号源选取的是220V市电正弦信号,所以R1和R2的阻值要比较大而且功率要比较大,该系统使用的是、1W的电阻。

MSP430频率计程序

MSP430频率计程序

这两天在搞频率计的问题,开始的时候思路很清晰,但是实现起来比较麻烦。

想测量一个方波的频率,有两种方法,一个是测频率,就是定时1S然后计数方波的高电平个数。

另一个是测周期法,就是测量方波的一个周期的时长,从而得到频率。

第一种方法很简单,下面讲讲我用的第二种方法。

思路是这样的,利用定时器的捕获功能,捕获方波的上升沿,将两次比较的值相减,就能得出两个上升沿之间定时器的计数值,然后处理一下计数值,就能得到正确的频率。

设置两个变量,一个是new_cap,一个是old_cap。

捕获得到新的TAR数值赋给new_cap,再将上一次捕获的数值赋给old_cap,然后两值相减就能得到一个周期的计数值。

(程序中将体现)最开始写的时候,显示的频率不对,今天改动了一下。

用定时器A1,然后比较TAIV的值再进行频率数值计算。

再将显示函数放在主函数里面循环就对了。

(昨天把显示函数放在中断里面了,不知道有啥关系不,知道的提示下,谢谢了)程序贴出来供大家参考//*****************************************************////*****P1.2为定时器A1的CCI1A输入端,信号从P1.2输入********////*****定时器时钟为SMCLK(DCO=1Mhz),不用分频*********////************ ————————————————*************////*****P1.0 ->|(比较器输入) |************////*****P1.1 ->|(LCDRS) P2.0|->D0*******////*****P1.2 ->|(定时器输入)<--- ~ | ~********////*****P1.3 ->|(LCDEN) | P2.7|->D7*****////*****P1.7 ->|(比较器输出)---- |*********////***********| msp30g2553 |********////***********| 制作人:wusong |*******////*********************************************//#include<msp430g2553.h>#include<1602.h>#define uchar unsigned char#define uint unsigned intuchar table[]={"frequency:"};uchar table_num[]={"0123456789"};uint new_cap,old_cap,cap_diff,fre;void LCD_display(){write_com(0x80);fre = 10000000/cap_diff;/////////////这个是将计数值转换为频率。

Msp430f5529开发板测周期和AD

Msp430f5529开发板测周期和AD

Msp430f5529开发板测频率和ADC采样电压必备资料:f5529的中文指导和数据手册(遗憾是汇编语言不是C)中文指导:网上有大侠把英文版的用户指导翻译成中文了数据手册:还没有出现中文版这种神器,不过多看几遍就OK一.定时器A一些基本资料至于寄存器里面含义自己应该可以看懂!这句话我认为有一个极容易产生一个误区,就是TA有7个比较捕获寄存器,当你查看msp430f5529.h的时候,我就发现只有TAxCCTL0,TAxCCR0TAxCCTL1,TAxCCR1TAxCCTL2,TAxCCR2它们都是共用一个TACTL。

压根就是没有3~6例如没有TAxCCTL3,TAxCCR3,我认为单片机上肯定是有7个比较捕获寄存器,就是msp430f5529没有对剩余的四个进行宏定义。

个人想法。

这个最高级,好像大部分的430单片机写的程序都是优先写它。

特点:增计数模式连续计数模式增减计数模式!!!!!!!这几种模式都能用例如增计数模式:TA0CCTL0 = CCIE; // CCR0 interrupt enabledTA0CCR0 = 50000;TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR __bis_SR_register(GIE); // Enter LPM0, enable interrupts 就凭它的权力最多,就应该单独想用一个中断函数与CCTL1,CCTL2区分开来!// Timer0 A0 interrupt service routine#pragma vector=TIMER0_A0_VECTOR__interrupt void TIMER0_A0_ISR(void){}其中的R0代表你用的TA定时器的第几个TA0-----R0TA1-----R1TA2-----R2CCTL0---A0 一个中断对应一个中断源例如我写的是TA2CCTL0和TA2CCR0,则对应的中断就是#pragma vector=TIMER2_A0_VECTOR应该明白了吧!TAxCCTL2,TAxCCR2特点:连续计数模式经我调试TA0CCTL1 = CCIE; // CCR0 interrupt enabledTA0CCR1 = 50000;TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR是进不了中断的,这是血的教训,(如果你采用的是比较模式,千万别想着,TMD 理论上就是这样,为什么进不了中断)应该把 MC_1改为MC_2就OK了.官方这样说这样可以从侧面提问,上文中为什么不是TAxCCRx,而只是TAxCCR0!应该明白了,这里有一点千万要区分开来,这是晕死的教训!TA0R,与TA0CCR1的区别,我也不知道是看了那本破书,或者就是那些5系列一下的430单片机程序可以,我只能感叹F5529真是神器!在中断函数里把cap=TA0CCR1,或者是TA1CCR1,还说TA0R,TA0CCRx其实是一样的,就是计数的储存。

MSP430F5529测频法测量信号频率

MSP430F5529测频法测量信号频率
UCA0CTL1|=UCSSEL__SMCLK;//SMCLK
UCA0BR0=173;//1MHz115200(seeUser'sGuide)
UCA0BR1=0;//1MHz115200
UCA0MCTL|=UCBRS_5+UCBRF_0;//ModulationUCBRSx=1,UCBRFx=0
UCA0CTL1&=~UCSWRST;//**InitializeUSCIstatemachine**
__no_operation();//Fordebugger
return0;
}
voidmeasure_fre()
{
if(fre>=500)
sprintf(buf,"DS16(0,60,'频率:%1.1f',4);\r\n",fre*1.008);
if(fre<=52)
sprintf(buf,"DS16(0,60,'频率:%1.1f',4);\r\n",(fre)*1.0);
//(762+1)*32768=25MHz
//SetFLLDiv=fDCOCLK/2
__bic_SR_register(SCG0);//EnabletheFLLcontrolloop
__delay_cycles(782000);
do
{
UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);
default:break;
}
}
SVSMHCTL=SVSHE+SVSHRVL0*level+SVMHE+SVSMHRRL0*level;

标准实验三MSP430F5529_传感器实验

标准实验三MSP430F5529_传感器实验

电子科技大学实验报告学生姓名:学号:指导教师:邮箱:一、实验室名称:MSP430单片机实验室二、实验项目名称:基于I2C接口的数据采集三、实验原理:(1)I2C接口简介IIC(Inter-Integrated Circuit,常被称为I2C)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。

它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。

在CPU与被控IC之间、IC与IC之间进行双向传送,高速I2C总线一般可达400kbps以上。

I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。

●开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

●结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

●应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。

CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。

若未收到应答信号,由判断为受控单元出现故障。

这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。

I2C总线时序图如图3.1所示:图3.1 I2C总线时序图在MSP430系列单片机中,硬件I2C接口是通过通用串行通信接口(universalserialcommunicationinterface,USCI)来实现的,通用串行通信接口在一套硬件模块上支持多种串行通信模式,例如SPI接口、I2C接口、UART接口等。

配置通用串行通信接口的工作模式是通过为一系列寄存器赋值来实现的,接下来将介绍将通用串行通信接口配置为I2C模式涉及的一系列寄存器。

(2)MSP430F5529中的I2C接口MSP430F5529中USCI(Universal Serial Communication Interface)模块可提供多种串行通信模式。

MSPF测频法测量信频率

MSPF测频法测量信频率

MSP430F5529测量频率-----测频法信号变换电路过零比较器,lm393输出上拉电阻,两电阻分压程序#include <msp430f5529.h>#include "stdio.h"//测频法,上限1Mhz//看门狗定时1s,开门狗中断处理程序开启捕获器,捕获1s中所有的上升脉冲,脉冲个数即为频率/*优化的反向可以将开门够定时1S使用定时器去定时1s* main.c*/long fre=0;char buf[60]="\0";void SetVcoreUp (unsigned int level){// Open PMM registers for writePMMCTL0_H = PMMPW_H;// Set SVS/SVM high side new levelSVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;// Set SVM low side to new levelSVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;// Wait till SVM is settledwhile ((PMMIFG & SVSMLDL YIFG) == 0);// Clear already set flagsPMMIFG &= ~(SVMLVLRIFG + SVMLIFG);// Set VCore to new levelPMMCTL0_L = PMMCOREV0 * level;// Wait till new level reachedif ((PMMIFG & SVMLIFG))while ((PMMIFG & SVMLVLRIFG) == 0);// Set SVS/SVM low side to new levelSVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;// Lock PMM registers for write accessPMMCTL0_H = 0x00;}void init_clock(){SetVcoreUp (0x01);SetVcoreUp (0x02);SetVcoreUp (0x03);UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFOUCSCTL4 |= SELA_2; // Set ACLK = REFO__bis_SR_register(SCG0); // Disable the FLL control loopUCSCTL0 = 0x0000; // Set lowest possible DCOx, MODxUCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operation UCSCTL2 = FLLD_0 + 609; // Set DCO Multiplier for 25MHz// (N + 1) * FLLRef = Fdco// (762 + 1) * 32768 = 25MHz// Set FLL Div = fDCOCLK/2 __bic_SR_register(SCG0); // Enable the FLL control loop__delay_cycles(782000);do{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flag}void send_char(char sc){UCA0TXBUF=sc;while(!(UCA0IFG&UCTXIFG));}void send_string(char *s){while(*s!='\0'){send_char(*s++);}}init_uart(){P3SEL |= BIT3+BIT4; // P3.3,4 = USCI_A0 TXD/RXDUCA0CTL1 |= UCSWRST; // **Put state machine in reset**UCA0CTL1 |= UCSSEL__SMCLK; // SMCLKUCA0BR0 = 173; // 1MHz 115200 (see User's Guide) UCA0BR1 = 0; // 1MHz 115200UCA0MCTL |= UCBRS_5 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** //UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt send_string("CLS(0);\r\n");}int main(void) {WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timerinit_clock();//初始化系统时钟为20MHzinit_uart();//串口波特率为115200bpsWDTCTL=WDT_ADLY_1000 ;//开门狗定时1sP1DIR &= ~BIT2; // P1.2 inP1SEL |= BIT2; //捕获输入SFRIE1|=WDTIE; //开看门狗定时器中断__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts__no_operation(); // For debuggerreturn 0;}void measure_fre(){if(fre>=500)sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",fre*1.008);if(fre<=52)sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",(fre)*1.0);else if(fre<=208)sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",(fre+1)*1.0);else if(fre<=496)sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",(fre+3)*1.0);send_string( buf);fre=0;TA0CTL = TASSEL_2 + MC_2 + TACLR+TAIE; // SMCLK, 连续mode, clear TAR 8分频下限可以测到8Hz。

Msp430f5529开发板测频率和ADC采样电压

Msp430f5529开发板测频率和ADC采样电压

UCSCTL6 &= ~XT2OFF; // Enable XT2
UCSCTL3 |= SELREF_2; // FLLref = REFO
// Since LFXT1 is not used,
// Set up LCD
Dogs102x6_init(); //初始化LCD
Dogs102x6_backlightInit(); //背光初始化
// Contrast not programed in Flash Yet
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
//****************************************************************************//
// 项目名称: MSP-EXP430F5529 交直流电压频率测试
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
// Basic GPIO initialization
Board_init(); //初始化GPIO
*设置时钟源
*
*
*
**************************************************************************************************/
v2; // SMCLK set out to pins

第9章MSP430单片机应用系统设计实例

第9章MSP430单片机应用系统设计实例

图9.1.3 板载仿真器部分电路原理图
9.1 MSP430F5529 Launchpad
2. BoosterPack接口 BoosterPack接口是MSP430F5529 LaunchPad的一大特色,正是由于BoosterPack的存在,MSP430单片机的扩展应 用才变得方便。MSP430F5529单片机片内有128 kB的Flash和10 kB的SRAM,以及SPI、SCI、I2C、ADC、DMA和 USB2.0等丰富的外设资源。MSP430F5529 LaunchPad通过BoosterPack接口引出4组SPI、2组I2C和2组UART功能引脚 ;同时,还包括多组定时器、比较器、DMA及ADC的引脚。这些丰富的引脚为外部扩展功能的实现提供了必备的 条件。BoosterPack接口上的资源和功能如图9.1.4所示。
电压可达7V;EN是芯片的使能端,高电平有效;芯片的输入IN端和输出OUT端,都通过陶瓷电容接
地,对噪声进行滤波;NR/FB通过旁路电容接地,可以减小输出噪声及增加供电电压的抑制比(PSRR)。
图9.1.9 TPS77301可调输出电压电路
图9.1.10 TPS73533固定输出电压电路
9.1 MSP430F5529 Launchpad
9.1.3 软件开发
为了帮助初学者更好地学习和使用MSP430F5529 LaunchPad,我们开发了相应的板载实验程序。该板 载实验程序为一个完整的CCS软件工程,不仅能够 应用MSP430F5529单片机的USB通信模块、定时器 模块、外部中断模块等,也能够使用该开发板上的 所有硬件资源,即在一个软件工程下,完成对实验 板上所有硬件资源的测试。板载实验程序软件流程 图如图9.1.11所示。其中,USB通信控制实验为整个 板载实验的主体框架,通过上位机输入相应的命令, 利用USB通信将相应的命令发送给MSP430单片机, 从而控制程序的流向,进入相应的实验。该板载实 验程序包括USB通信控制实验、GPIO输出控制实验、 定时器计时中断实验、PWM产生实验和按键外部中 断实验。

基于msp430f5529及cc2540的智能型低功耗心电监测仪

基于msp430f5529及cc2540的智能型低功耗心电监测仪

收稿日期:2015-04-09基金项目:上海市生物医药领域产学研医合作项目(13DZ1941802)作者简介:龚元,E-mail:*********************通信作者:周国辉,博士,讲师,E-mail:****************.cn文章编号:1671-7104(2015)04-0240-04龚元,曹瑾,罗泽惠,周国辉复旦大学电子工程系,上海市,200433该文提出了一种智能低功耗心电监测仪的设计方案。

该设计应用最新的低功耗单片机技术和蓝牙4.0标准,能在极低的功耗下实现监测仪与多平台智能设备的交互。

医用拓展端可以实现显示心电图及心率曲线、读取已存储的异常心电图、调节报警阈值等功能,适合医生随访时使用。

心电监测;低功耗;智能设备;MSP430F5529;CC2540TH772.2A doi:10.3969/j.issn.1671-7104.2015.04.002 GONG Yuan, CAO Jin, LUO Zehui, ZHOU GuohuiDepartment of Electronic Engineering, Fudan University, Shanghai, 200433A design of ECG monitor was presented in this paper. It is based on the latest MCU and BLE4.0 technologies and caninteract with multi-platform smart devices with extra low power consumption. Besides, a clinical expansion part can realize functions including displaying the real-time ECG and heart rate curve, reading abnormal ECG signals stored in the monitor, and setting alarm threshold. These functions are suitable for follow-up use.ECG monitor, low power consumption, smart device, MSP430F5529, CC2540基于MSP430F5529及CC2540的智能型低功耗心电监测仪【作 者】【摘 要】【关 键 词】【中图分类号】【文献标志码】【 Writers 】【 Abstract 】【Key words 】A Smart Low-Power-Consumption ECG Monitor Based on MSP430F5529 and CC25400 引言 世界卫生组织发布的《2014年全球非传染性疾病现状报告》显示,全球每年约有1 750万人死于心血管疾病,占全球每年死亡总数的31.25% [1]。

MSP430F5529实验指导书(V1.0)

MSP430F5529实验指导书(V1.0)

MSP430F5529 实验指导书(V1.0)2014年10月27日东北林业大学机电工程学院“3+1”实验室实验一基础GPIO实验实验二键盘与液晶显示实验实验三时钟系统配置实验实验四看门狗与定时器实验实验五 AD/DA实验实验六比较器实验实验七 Flash实验实验八串行通信实验实验一基础GPIO实验【实验目的】1、熟悉CCS的基本使用方法;2、掌握MSP430系列单片机程序开发的基本步骤;3、掌握MSP430 IO口的基本功能。

【实验仪器】1、SEED-EXP430F5529v1.0开发板一套;2、PC机操作系统Windows XP或Windows 7,CCSv5.1集成开发环境。

【实验原理】CCS(Code Composer Studio)是 TI 公司研发的一款具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境,能够帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。

CCSv5.1 为 CCS 软件的最新版本,功能更强大、性能更稳定、可用性更高,是 MSP430 软件开发的理想工具。

SEED-EXP430F5529v1.0开发板上的有8个可操作的LED灯,与MCU的IO口对应关系如图1-1所示:图1-1 LED与MCU的IO对应关系电路我们可以通过控制单片机IO口的输出电平状态来控制各个LED灯的亮灭。

开发板上还有2个可操作的按键S1,S2。

如图1-2所示。

图1-2 按键电路我们可以通过读取与按键相连的IO口的输入电平状态来执行相应的操作。

此外,S1,S2还可以作为外部中断源,触发中断。

【实验内容】1、用调用头文件的方法,使能MSP430F5529开发板上的8个LED灯依次按顺序循环点亮;2、用按键S1控制开发板上LED1的亮灭状态(查询法);3、用按键S2控制开发板上跑马灯的循环速度(中断方式)。

【实验步骤】内容1:使能开发板上的8个LED灯依次按顺序循环点亮1、打开CCSv5并确定工作区间,然后选择File-->New-->CCS Project 弹出图1-3对话框。

《基于MSP430F5529的多功能电子》实验报告

《基于MSP430F5529的多功能电子》实验报告

基于MSP430F5529的多功能电子琴章仕波1 吴晓庆2(1.杭州电子科技大学,通信工程卓越工程师计划 11081522;2.杭州电子科技大学,通信工程卓越工程师计划 11081428)摘要:本电子琴以MSP430为核心,用MSP430的launchpad为开发工具和以CCS5.1为开发环境,以YF017语言芯片控制喇叭发声,用MSP430的比较器实现电容按键作为琴键,液晶屏LCD5110显示菜单,6个按键开关操作菜单。

系统特色:1)声音与钢琴相似度高;2)人机交互良好,可以进行功能选择;3)有自由模式,能自由演奏曲子;4)试听模式,能欣赏多首曲子;5)学习模式,可以根据屏幕的提示学习演奏曲子。

关键词:电容按键、多功能0引言依据《单片机与嵌入式系统课程设计Ⅰ》以及指导老师要求,在一块型号为MSP430F5529的单片机板子上完成创意型的设计。

通过我们的头脑风暴和各类资料搜集,我们决定设计一个多功能的电子琴。

1设计想法实现电子琴的基本功能—演奏,为提高人机交互性,加入LCD屏幕能显示菜单;同时为了提高电子琴的功能性,加入欣赏功能、学习功能。

为了使琴键更加舒适,采用了当前流行的触摸按键实现。

2功能实现硬件部分分成发声部分、LCD显示部分、菜单按键部分、电容触摸琴键部分、MCU控制部分(采用现成的MSP430F5529的launchpad)。

2.1 发声部分:方案一:采用蜂鸣器发声,通过单片机IO口输出频率可由软件控制的PWM波。

主要优点是电路简单,成本低,可靠性好,占用单片机的引脚数少。

缺点是因为是PWM波驱动蜂鸣器的,所以声音没有钢琴的音色,声音不够悦耳。

要通过单片机的计时器实现PWM波。

方案二:采用语音芯片控制喇叭,实现动听的钢琴声。

主要优点是声音动听、音调准确、编程简单。

缺点是成本比方案一高,占用单片机IO口多,对声音的控制只能通过语音芯片来控制,控制响应速度、声音音域、声音延时等收到语音芯片的性能限制。

MSP430F5529制作的施工车辆信息监测系统.doc

MSP430F5529制作的施工车辆信息监测系统.doc

MSP430F5529制作的施工车辆信息监测系统一,功能介绍:本系统主要用于监测施工车辆运行的速度,运行时路面的温度以及车辆的位置信息。

然后将这些这些信息借助移动的网络发送到服务器上去并将温度,速度,时间信息通过显示屏进行显示。

系统的控制核心选用的是TI的msp430F5529,考虑到整个系统用到的IO管脚比较多,所以选用了该款430。

一下是整个系统的方案选型:(1)测速系统采用的霍尔器件,430单片机对霍尔器件输出的脉冲进行输入捕获对其频率进行测量就可计算出车辆的速度;(2)测量车辆运行的路面温度系统我采用的是红外测温温度传感器,430通过smBUS总线方式读取温度传感器的数据,然后进行数据处理,显示在LCD屏上。

(3)计时系统我选用了的是DS1302时钟芯片,外加上一个3v的纽扣电池起到掉电时间保护左右,然后430负责读取时间进行显示。

(4)车辆定位系统我选用的GPS模块,430通过GPS读取到车辆的经纬度信息。

(5)数据发送装置我采用的GPRS模块将采集到速度,温度,时间,位置信息发送到我们自己建立的服务器上去(6)LCD屏,我选用的是240*128的LCD屏,这样尺寸的屏刚好满足我设计的要求。

(7) 考虑到有时没有移动信号,我们在电路上设计了SD卡,这样当GPRS 没有信号时,我们的数据可以自动的到存到我们的SD卡中二,系统框图上图就是我整个设计的框图。

(1)电源给整个系统供电,输入12v通过两种稳压芯片,分别稳压到5v和3.3v 给整个系统供电。

(2)测速,键盘, LCD我采用的都是IO进行和430单片机进行连接(3)GPS和GPRS采用的是UART和430进行连接(4) SD卡采用的是SPI接口和430进行连接三,系统原理图图2 电源图3 LCD和时钟芯片图4 430核心部分整个系统的原理图如图2,3,4所示。

图2是整个系统的电源部分,图3是lcd 显示屏,图4是整个430核心部分。

MSP430F5529(八)实时时钟RTC

MSP430F5529(八)实时时钟RTC

MSP430F5529(八)实时时钟RTCMSP430F5529 (八)实时时钟RTC实时时钟模块提供了具有日历模式的时钟计数、灵活可编程的闹钟以及可校准的时钟计数器。

8.1RTC_A 简介实时时钟模块提供了一个可以配置成一般目的计数器的日历时钟。

RTC_A 的特点包括:(1). 可配置成带日历的实时时钟或者一般目的的计数器;(2). 在日历模式中提供了秒钟,分钟,小时,星期,日期,月份和年份;(3). 具有中断能力;(4). 实时时钟模式下可以配置为BCD 或者二进制模式;(5). 实时时钟模式下具有可编程的闹钟;(6). 实时时钟模式里具有时间偏差的逻辑校正;注意:实时时钟模块的大多数寄存器没有初始条件。

在使用这个模块之前,用户必须通过软件对寄存器进行配置。

8.2RTC_A 的寄存器说实话,RTC 这一章不太好写,东西太多又太碎,不好总结。

它一个人的寄存器,比前面加起来似乎还要多。

不过还好控制寄存器只有几个,大部分为数值寄存器。

(大家浏览下列寄存器时,注意和上面的结构图配合)贴这张图的目的仅仅在于告诉大家,16 位的寄存器大部分被分成两个8 位的寄存器了,操作的时候需要注意你的操作对象是8 位的还是16 位的。

在这里常用8 位寄存器来操作。

(以下如未特意声明,则全部为8 位寄存器)RTCCTL0 实时时钟控制寄存器0(r0 表示读为0)RTCTEIVE:实时时钟-时间事件中断使能0:禁止中断1:允许中断RTCAIE:实时时钟-闹钟中断使能,在计数器模式时被清除(RTCMODE=0)0:禁止中断1:允许中断RTCRDYIE:实时时钟读取准备中断使能0:禁止中断1:允许中断RTCTEVIFG:实时时钟-时间事件标志0:没有时间事件发生1:有时间事件发生RTCAIFG:实时时钟- 闹钟标志位,在计数器模式时被清除(RTCMODE=0)0:没有时间事件发生1:时间事件发生RTCRDYIFG:实时时钟读取准备标志位0:实时时钟不能被安全读取1:实时时钟能被安全读取RTCCTL1 实时时钟控制寄存器1(rw-(0)。

430实现频率的检测

430实现频率的检测

1 引言由于频率信号具有抗干扰性强、易于传输、测量准确度较高等优点,因此许多非频率量的传感信号都转换为频率量来进行测量和处理。

因此频率测量方法愈来愈引起关注和研究。

频率测量是测量和控制系统领域的最基本测量之一。

当今用的最多的测量信号频率的仪器是频率计,由于频率计在测量过程中需要一个时基信号作为测量信号频率的时基。

时基信号一般是由本机振荡电路发生的,尽管现在多用石英晶体振荡器,但是仍然不能保证时基信号的精度,因此频率计的测量精度也就成了问题。

传统的频率测量方法有两种[1]:一种是测频法,在一定时间间隔T内测出待测信号重复变化次数N,频率即为;另一种方法是测周法,在被测信号的一个周期内测出标准高频信号f的个数N,则被测频率。

本文介绍了一种测宽法[2],借助光电耦合原理,将交流信号转变成周期脉冲信号,通过捕获脉冲信号的下降沿,由定时器计数,通过二次计数的差值便能得到脉冲信号的周期,进而可以计算出所测交流信号的频率。

2 硬件电路设计硬件电路完成的任务是:(1)模拟电路部分的设计,其功能是进行信号的转化。

交流信号通过整流桥、光电耦合器等模拟器件便能得到周期脉冲信号。

(2)数字电路部分的设计,其功能是进行信号的检测。

MSP430单片机内部的16位定时器A具有脉冲捕获功能,能将脉冲信号的占空比检测出来。

图1为它的基本结构图。

图1 系统的基本结构2.1 模拟电路部分的设计图2为模拟部分原理。

下面主要阐述该电路的工作原理:图2模拟部分原理图考虑到交流信号中可能含有一定的直流信号,而直流信号会引起交流波形的上移或下移,这可能会导致原有交流信号没有零点,这就谈不上过零检测、周期脉冲了,因此要根据交流信号的实际情况,在交流信号的出口处用设个适当的电容,起到隔直的作用。

R1和R2是限流电阻,保护后面的稳压管、二极管、光电耦合器在额定功耗范围内。

由于这里的交流信号源选取的是220V市电正弦信号,所以R1和R2的阻值要比较大而且功率要比较大,该系统使用的是、1W的电阻。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MSP430F5529测量频率
-----测周法信号变换电路
过零比较器,lm393输出上拉电阻,两电阻分压
程序
#include <msp430f5529.h>
#include "stdio.h"
#include "math.h"
//测周法,在捕获过程中,定时溢出不能被检测出,选择时钟频率为低频时能测出低频,频率高能测出频率高的部分
/*
* main.c
*/
long long start=0;
//long long int stop=0;
double fre=0.0;
unsigned char i=0;
unsigned char over=0;
void SetVcoreUp (unsigned int level)
{
// Open PMM registers for write
PMMCTL0_H = PMMPW_H;
// Set SVS/SVM high side new level
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
// Set SVM low side to new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
// Wait till SVM is settled
while ((PMMIFG & SVSMLDL YIFG) == 0);
// Clear already set flags
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
// Set VCore to new level
PMMCTL0_L = PMMCOREV0 * level;
// Wait till new level reached
if ((PMMIFG & SVMLIFG))
while ((PMMIFG & SVMLVLRIFG) == 0);
// Set SVS/SVM low side to new level
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
// Lock PMM registers for write access
PMMCTL0_H = 0x00;
}
void init_clock()
{
SetVcoreUp (0x01);
SetVcoreUp (0x02);
SetVcoreUp (0x03);
UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFO
UCSCTL4 |= SELA_2; // Set ACLK = REFO
__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operation UCSCTL2 = FLLD_0 + 609; // Set DCO Multiplier for 25MHz
// (N + 1) * FLLRef = Fdco
// (762 + 1) * 32768 = 25MHz
// Set FLL Div = fDCOCLK/2 __bic_SR_register(SCG0); // Enable the FLL control loop
__delay_cycles(782000);
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
}
void send_char(char sc)
{
UCA0TXBUF=sc;
while(!(UCA0IFG&UCTXIFG));
void send_string(char *s)
{
while(*s!='\0')
{
send_char(*s++);
}
}
init_uart()
{
P3SEL |= BIT3+BIT4; // P3.3,4 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL__SMCLK; // SMCLK
UCA0BR0 = 173; // 1MHz 115200 (see User's Guide)
UCA0BR1 = 0; // 1MHz 115200
UCA0MCTL |= UCBRS_5 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
send_string("CLS(0);\r\n");
}
int main(void) {
char buf[60]="\0";
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
init_clock();
init_uart();
P1DIR &= ~BIT2; // P1.2 in
P1SEL |= BIT2; //捕获输入
TA0CTL = TASSEL_2 +ID__8 + MC_2 + TACLR+TAIE; // SMCLK, 连续mode, clear TAR 8分频下限可以测到8Hz。

上限200K左右
TA0CCTL1 =CM_1 +SCS +CAP +CCIE;
__bis_SR_register( GIE); // Enter LPM0, enable interrupts
while(1)
{
sprintf(buf,"DS16(0,60,'频率:%1.1f',4);\r\n",fre);
send_string( buf);
__delay_cycles(314574);
}
}
//下限频率15,上限200K左右
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
switch(__even_in_range(TA0IV,14))
{
case 0: break; // No interrupt
case 2: //CCR1
{
i++;
if(i==1)
{over=0;
TA0CTL |=TACLR;
}
if(i>=51)
{
i=0;
TA0CCTL0&=~CCIE;
start=over*65536+TA0CCR1;
fre=125000000/start;
TA0CTL |=TACLR;
}
}
break;
case 4: break; // CCR2 not used
case 6: break; // CCR3 not used
case 8: break; // CCR4 not used
case 10: break; // CCR5 not used
case 12: break; // CCR6 not used
case 14: over++;
break; //定时器溢出
default: break;
}
}。

相关文档
最新文档