找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1542|回复: 0
收起左侧

关于msp430频率计的问题,一直解决不了

[复制链接]
ID:420570 发表于 2018-12-4 19:19 | 显示全部楼层 |阅读模式
//*********************************************************
//计数后一直显示为 65535 请问大佬应该怎么改,错误请详细指出来,谢谢
//*********************************************************





//    端口初始化
void Port_Init()
{
P1SEL|=BIT2;     //捕获模式
P1DIR&=~BIT2;    //捕获输入

P2SEL|=BIT0;      //ACLK时钟
P2DIR|=BIT0;
P2SEL&=~BIT5;


P4SEL=0x00;
P4DIR=0xff;
P5SEL=0x00;
P5DIR|=BIT5+BIT6+BIT7;


TACCTL1=CM1+CAP+CCIS0+SCS+CCIE;           //捕获模式设置
TACTL|=TASSEL0+MC1+TAIE+TACLR+TAIE;   //定时器设置
}





//频率处理
void TIME_do(uint x)
{
uint time;
time=(1000000/(65535*overtime+x));     //将时间转换为频率
a[0]=time/100000+48;
a[1]=(time%100000)/10000+48;            //用数组记录每一位
a[2]=(time%10000)/1000+48;
a[3]=(time%1000)/100+48;
a[4]=(time%100)/10+48;
a[5]=time%10+48;
a[6]='H';
a[7]='Z';
}




//    中断
#pragma vector=TIMERA1_VECTOR
__interrupt void time(void)
{
switch(TAIV)
{
case 2:Flag++;      
if(Flag==1)             //捕获第一个上升沿
{
  TACTL|=TACLR;
  overtime=0;
  TIME0=TACCR1;
}
else if(Flag==2)             //捕获第二个上升沿
{
  TIME1=TACCR1;
TIME=TIME1-TIME0;          //一个周期的时间
  Flag=0;
}
  break;
case 4:break;
case 10:overtime++;break;        //定时器溢出次数
  default:break;
}
}




//    主函数
void main()
{
WDT_Init();
Clock_Init();
Port_Init();
delay_ms(500);
LCD_Init();
LCD_clear();
  _EINT();
while(1)
{
  uchar i;
  TIME_do(TIME);            //对所计的定时器时间差处理
  delay_ms(5);
for(i=0;a[i]!='\0';i++)
{
LCD_write_char(i,1,a[i]);       //转lcd显示

}
  delay_ms(500);
}
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表