msp430f449测方波周期、频率、占空比程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include "12864c.h"
#define uint unsigned int
#define uchar unsigned char
void xians4(uchar x,uchar y2,uint shu1);
uint shu1,i;
uint new_cap=0;
uint old_cap=0;
uint cap_diff=0;
uint cap_diff2=0,down_cap;
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
for(i=0;i<20000;i++)
{}
P1DIR=0x20;//把P1.5设置为输出,P1.0设置为输入
P1SEL=0x21;//把P1.5设置为外围模块功能aclk,P1.0为外围模块功能TA0
P3DIR=0xff;
init_lcd();
FLL_CTL1|=FLL_DIV_8;//把aclk8分频
CCTL0=CM_1+SCS+CCIS_0+CAP+CCIE;//上升沿+同步+CCI0A(P1.0信号源)+捕获功能+捕获中断允许
TACTL=TASSEL_2+MC_2;//SMCLK时钟+增计数模式
_BIS_SR(LPM0_bits+GIE);
xians4( 0, 0, cap_diff );
}
void xians4(uchar x,uchar y2,uint shu1)
{
uint ge,shi,bai,qian,wan;
lcd_xy(x,y2);
wan=shu1/10000;
qian=shu1/1000%10;
bai=shu1/100%10;
shi=shu1/10%10;
ge=shu1%10;
wr_lcd(dat,wan+0x30);
wr_lcd(dat,qian+0x30);
wr_lcd(dat,bai+0x30);
wr_lcd(dat,shi+0x30);
wr_lcd(dat,ge+0x30);
}
/******************************************************************* 中断处理函数
*******************************************************************/ #pragma vector=TIMERA0_VECTOR //==定时器A中断处理==
__interrupt void TimerA0(void)
{
if(CCTL1&CM0) //==捕获到上升沿==
{
CCTL1=(CCTL1&(~CM_1))|CM_2; //==更变设置为下降沿触发==
new_cap=TACCR0;
if(new_cap { cap_diff=65536+new_cap-old_cap; } else { cap_diff=new_cap-old_cap; } old_cap=new_cap; } else if (CCTL1&CM_2) //==捕获到下降沿== { down_cap=TACCR0; CCTL1=(CCTL1&(~CM_2))|CM_1; //==更变设置为上升沿触发== if(old_cap>down_cap) { cap_diff2=65536+down_cap-old_cap; } else { cap_diff2=down_cap-old_cap; } } }