msp430测频程序,测试出错

msp430测频程序,测试出错,第1张

这里没看懂

if (CALBC1_8MHZ==0xFF || CALDCO_8MHZ == 0xFF)//时钟源DCO的设置

{

while(1) // If calibration constants erased

// do not load,trap CPU!!

}

如果这个条件判定成立,那么接下来包括中断以内的语句都不用执行了!!

因为开中断语句在这个函数后面!

#include <msp430g2553.h>

unsigned char ta0

unsigned char t,i

void main( )

{

WDTCTL = WDTPW+ WDTHOLD //stop WDT

TACTL |= BIT9+BIT2 //Timer_A clock source select SMCLK + Timer_A clear

CCR0 = 200

CCTL0 |= BIT4//CCR0 Interrupt enabled

CCTL1 |= BITF + BITE //Capture on both rising and falling edges

CCTL1 |= BITD + BITB + CAP + BIT4 // CAP+SCS+CCIS1+CM_3

P1DIR |= BIT0

P1OUT &= ~BIT0

TACTL |= BIT5 // Continuous mode: the timer counts up to 0FFFFh.

__enable_interrupt( )

LPM0

}

#pragma vector = TIMER0_A0_VECTOR//CCR0 Interrupt

__interrupt void TA0_CCR0_ISR (void)

{

{

CCTL1 ^= BITC //设置一个反转的脉冲,BIT=Vcc,CCTL1=GND,所以会产生一个上升沿使得CCR1捕获

CCR0 += 200

}

}

#pragma vector = TIMER0_A1_VECTOR //CCR1 cap Interrupt

__interrupt void TA0_CCR1_cap_ISR (void)

{

t++

ta0= CCR1

if (t>=2)

{

__disable_interrupt( )// 捕获两次,

P1OUT = BIT0

}

CCTL1 &= ~BIT0

}

这个是比较捕获的,中间把比较的部分改一下就可以了

430单片机的定时器模块有一个捕获比寄存器,通过设置相关的寄存器,让其工作在捕获模块,捕获的方式可选择,分别为上升沿捕获,下降沿捕获和上升下降都捕获。测方波频率的话,选第一个吧。捕获模块的工作原理是:当外部事件发生时,也就是你的方波的上升沿到来时,单片机的捕获端口就会捕获到一个脉冲,然后定时器的16位计数器就会计数,最后计数器的值就是你测得的脉冲个数。测频率一般有两种方法,一个是测周法,一个是测频法,百度一下这两个方法,了解一下原理。我们采用最简单的方法,那就是测一秒内捕获的脉冲个数,那个值就是频率。至于相关寄存器的设置,自己多看看430的常用模块介绍,了解一下定时器的那些寄存器的功能和设置方法。程序网上很多,我这儿也有,想要的话,看我ID,然后发邮件给我,我给你发过去。

多查查资料,只要愿意去学,一定会懂的,祝成功!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11724334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存