#include
sbit
L1=P0^0
void
delay1ms()
void
main()
{
LI=1
delay1ms(500)
L1=0
delay1ms(500)
}
这个简单,把两个方波进行异或,用430单片机的定时器A测量异或后的方波的脉冲宽度,在对测量数据进行简单的计算就可得到相位差。。。具体程序如下:P1SEL |= BIT2//设置P1.2端口为功能模块使用
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(CCTL1CM0) //上升沿
{
CCTL1=(CCTL1(~CM0))|CM1 //更变设置为下降沿触发
start=TACCR1 //记录初始时间
overflow=0//溢出计数变量复位
}
else if(CCTL1CM1) //下降沿
{
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处理计算即可。。。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define DAdata P0//DA数据端口
可以产生弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的频率(最大790HZ)和幅度在一定范围内可任意改变。波形和频率的改变通过软件控制,幅度的改变通过硬件实现。
正弦波是频率成分最为单一的一种信号,因这种信号的波形是数学上的正弦曲线而得名。任何复杂信号——例如音乐信号,都可以看成由许许多多频率不同、大小不等的正弦波复合而成。振荡电路是电子技术的一个重要组成部分,正弦波振荡器广泛应用于广播、电视、通讯,工业自动控制,测量表计, 以及高频加热,超声波探伤等等方面。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)