|
写了老长时间,相位差程序就是没用,以至于功率因素也搞不出来,大神们求帮忙看下程序
[复制链接]
5芯积分
#include
//#include "cry1602.c"
//#include "cry1602.h"
#include "cryfucns.h"
#include "displaydata.h"
#include
#include "BoardConfig.h"
char buf[];
float start;
float end;
int overflow;
//float pwm;
//float pwm_cha;
//int pwm_start1,pwm_end1,pwm_wide1;
//int pwm_start2,pwm_end2,pwm_wide2;
const unsigned char inaddr=0x84; //LCD第1行,输入数据地址
void int_clk()
{
unsigned char i;
BCSCTL1&=~XT2OFF; //打开XT振荡器
do
{
IFG1 &= ~OFIFG; //清除振荡错误标志
for(i = 0; i < 100; i++)
_NOP(); //延时等待
}
while ((IFG1 & OFIFG) != 0); //如果标志为1继续循环等待
BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 8M
IFG1&=~OFIFG;
}
/* void mainttt()
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
BoardConfig(0xb2); //关闭数码管和流水灯,4245
int_clk(); //初始化时钟,MCLK 8M and SMCLK 8M
Ini_Lcd(); //初始化LCD
Send(0,0x01); //清屏
Disp_SZ2(0x80, 5,0.5);
//Disp_HZ(0x80,line1,2); //显示3行汉字
//Disp_HZ(0x90,line2,4);
// Disp_HZ(0x88,line3,4);
//Disp_HZ(0x98,line4,2);
_EINT(); //开全局中断
while(1);
}*/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
BoardConfig(0xb2); //关闭数码管和流水灯,4245
int_clk(); //初始化时钟,MCLK 8M and SMCLK 8M
Ini_Lcd(); //初始化LCD
//P2SEL|=BIT2;
//P2SEL|=BIT3;
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 的标志位
//中断允许
/*TACTL |=TACLR;
TACTL = TASSEL_2+TAIE+MC1;
CCTL1 =CM0+SCS+CAP+CCIE;*/
//CCTL1 = CCIE; // CCR0 interrupt enabled
//CCR1 = 20000;
//TACTL = TASSEL_2 + MC_2; // SMCLK, upmode
// _EINT();
//TACCTL1 = CAP+CM_3+CCIS_0+SCS+CCIE;
//TACCTL2 = CAP+CM_3+CCIS_0+SCS+CCIE;
//TACTL = TASSEL_2+MC_2;
_EINT();
LPM0;
_NOP();
// while(1)
/*{
if(pwm_end1>=pwm_start1)
{
pwm_wide1=(pwm_end1-pwm_start1)*2;
}
else if(pwm_end1
{
pwm_wide1=(pwm_start1-pwm_end1)*2;
}
pwm_cha=pwm_start1-pwm_start2;
pwm=pwm_cha/pwm_wide1*360;*/
// WDTCTL=WDT_ADLY_1000;
Send(0,0x01); //清屏
//Disp_SZ2(inaddr, (int)pwm,pwm-(int)pwm);
Disp_SZ2(inaddr, (int)start,start-(int)start);
Disp_HZ(0x80,line1,3); //显示3行汉字
while(1);
//P6DIR|=BIT2:P6OUT|=BIT2;
//LcdReset();
//sprintf(buf,"%f",pwm);
//DispNChar(3,0,4,buf);
//}
}
/*#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch(TAIV)
{case 2:
if(TACCTL1 & CCI)
pwm_start1=CCR1;
else
pwm_end1=CCR1;
break;
case 4:
if(TACCTL2 & CCI)
pwm_start2=CCR2;
else
pwm_end2=CCR2;
break;
case10:
break;
}
LPM0_EXIT;
return;
}*/
#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;
}
}
|
|