msp430单片机用定时器A测量方波相位差的程序如何编写真的很急!拜托了!

msp430单片机用定时器A测量方波相位差的程序如何编写真的很急!拜托了!,第1张

这个简单,把两个方波进行异或,用430单片机的定时器A测量异或后的方波的脉冲宽度,在对测量数据进行简单的计算就可得到相位差。。。具体程序如下:

P1SEL

|=

BIT2;

//设置P12端口为功能模块使用

TACTL

|=TACLR;

TACTL

=

TASSEL_2+TAIE+MC1;

//定时器A时钟信号选择SMCLK

8M,清计数寄存器,使能中断,同时设置定时器A计数模式为连续增计模式

CCTL1

=CM0+SCS+CAP+CCIE;

//输入上升沿捕获,同步,capture模式

CCI0A为捕获信号源,中断使能

//TACCTL1

&=~CCIFG;

//清CCR2

的标志位

//中断允许

_EINT();

LPM0;

}

#pragma

vector=TIMERA1_VECTOR

//定时器A中断处理

__interrupt

void

timer_a(void)

{

switch(TAIV)

//向量查询

{

case

2:

//捕获中断

if(CCTL1&CM0)

//上升沿

{

CCTL1=(CCTL1&(~CM0))|CM1;

//更变设置为下降沿触发

start=TACCR1;

//记录初始时间

overflow=0;

//溢出计数变量复位

}

else

if(CCTL1&CM1)

//下降沿

{

CCTL1=(CCTL1&(~CM1))|CM0;

//更变设置为上升沿触发

end=TACCR1;

//用start,end,overflow计算脉冲宽度

TACTL

&=~TAIE;

//不使能中断

CCTL1

&=~CCIE;

P1SEL

&=~BIT2;

_DINT();

LPM0_EXIT;

}

break;

case

10:

//定时器溢出中断

overflow++;

break;

//溢出计数加1

default:break;

}

}

然后再对得到的start,end,overflow处理计算即可。。。

Sub MergeSort(Array() As Integer, First As Integer, Last As Integer)

Dim mid As Integer = 0

If first<last Then

mid = (first+last)\ 2

MergeSort(Array, first, mid);

MergeSort(Array, mid+1, last);

Merge(Array, first, mid, last);

End If

End Sub

/

以下示例代码实现了归并 *** 作。array[]是元素序列,其中从索引p开始到q位置,按照升序排列,同时,从(q+1)到r也已经按照升序排列,merge()函数将把这两个已经排序好的子序列合并成一个排序序列。结果放到array中。

/

/

0 <= p <= q < r, subarray array[pq] and array[q+1r] are already sorted

the merge() function merges the two sub-arrays into one sorted array

/

void Merge(int array[], int p, int q, int r)

{

int i,k;

int begin1,end1,begin2,end2;

int temp = (int)malloc((r-p+1)sizeof(int));

begin1 = p;

end1 = q;

begin2 = q+1;

end2 = r;

k = 0;

while((begin1 <= end1)&&( begin2 <= end2))

{

if(array[begin1] <= array[begin2]){

temp[k] = array[begin1];

begin1++;

}

else

{

temp[k] = array[begin2];

begin2++;

}

k++;

}

while(begin1<=end1 || begin2<=end2)

{

if(begin1<=end1)

{

temp[k++] = array[begin1++];

}

if(begin2<=end2)

{

temp[k++] = array[begin2++];

}

}

for (i = 0; i < =(r - p); i++)

array[p+i] = temp[i];

free(temp);

}

以上就是关于msp430单片机用定时器A测量方波相位差的程序如何编写真的很急!拜托了!全部的内容,包括:msp430单片机用定时器A测量方波相位差的程序如何编写真的很急!拜托了!、pca测量2个信号相位差的程序框图、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9872913.html

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

发表评论

登录后才能评论

评论列表(0条)

保存