3133|1

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

程序问题 [复制链接]

大家帮忙看下这个程序有些什么问题啊?

我想用这个程序测量占空比为百分之五十的方波

问什么液晶总是显示65535,而且frequency=1000000/period;这一句不管我把1000000换成多少他都显示的65535

不知道什么原因,请高手指点
先谢了。

 

 

 

 

 

 

 

#include "msp430x14x.h"
#include "cry1602.h"
uint start,end;
uint width; //==用于存放脉宽==
uint period; //==用于存放周期==
uint frequency; //==用于存放频率==
uint fy[]; //==用于存放频率显示数据==



uchar pinlv[]={"Frequency:"};
uchar hz[]={"HZ "};
void process(void); //==函数声明==

void Initclk(); //==初始化时钟==
/******************************************************************
主函数
******************************************************************/
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //==关狗==

Initclk(); //==初始化时钟,SMCLK,MCLK均为8M==

P1DIR&=~BIT2;
P1SEL = BIT2; //==设置P1.2端口为功能模块使用,即:做捕获源==
TACTL = TASSEL_2+ID_3+TACLR+TAIE+MC1;//==定时器A时钟信号选择SMCLK,8分频,同时设置定时器A计数模式为连续计数模式==

CCTL1 = CM_1+SCS+CAP+CCIE; //==输入上升沿捕获,CCI0A为捕获信号源==
_EINT(); //==开全局中断允许==
process();
LcdReset(); //初始化LCD
DispStr(3,0,pinlv);
DispStr(13,1,hz);

for(int i=0;i<6;i++)
{
Disp1Char(3+i,1,fy+48);
}
for(;;);
}



/*******************************************************
初始化时钟
*******************************************************/
void Initclk()
{
unsigned int i;
//--- 使用XT2振荡器 ---
BCSCTL1&=~XT2OFF; //==打开XT2振荡器==
do
{
IFG1 &= ~OFIFG; //==清除振荡器失效标志==
for (i = 0xFF; i > 0; i--); //==延时,等待XT2起振==
}
while ((IFG1 & OFIFG) != 0); //==判断XT2是否起振==
BCSCTL2 =SELM_2+SELS; //==选择MCLK、SMCLK为XT2,8M==
}

/********************************************************************
数据处理
********************************************************************/

void process(void)

{
while(endstart

width = end-start; //==实际脉冲宽度的计算==
period = 2* width;
frequency=1000000/period;



fy[0]=frequency%1000000/100000;//显示十万位
fy[1]=frequency%100000/10000; //显示万位
fy[2]=frequency%10000/1000; //显示千位
fy[3]=frequency%1000/100; //显示百位
fy[4]=frequency%100/10; //显示十位
fy[5]=frequency%10; //显示个位

}
/*******************************************************************
中断处理函数
*******************************************************************/
#pragma vector=TIMERA1_VECTOR //==定时器A中断处理==
__interrupt void timer_a(void)
{
switch(TAIV) //==向量查询==
{ case 2: //==捕获中断==
if(CCTL1&CM0) //==捕获到上升沿==
{
CCTL1=(CCTL1&(~CM0))|CM1; //==更变设置为下降沿触发==

start=TAR; //==记录初始时间==
}

else if (CCTL1&CM1) //==捕获到下降沿==
{
CCTL1=(CCTL1&(~CM1))|CM0; //==更变设置为上升沿触发==
end=TAR; //==用start,end,overflow计算脉冲宽度==

}
break;

default:
break;
}
}

 
点赞 关注

回复
举报

23

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

。。

没人。。。
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表