基于MSP430F5438A单片机测量频率的程序实例_第1页
基于MSP430F5438A单片机测量频率的程序实例_第2页
基于MSP430F5438A单片机测量频率的程序实例_第3页
基于MSP430F5438A单片机测量频率的程序实例_第4页
基于MSP430F5438A单片机测量频率的程序实例_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于MSP430F5438A单片机测量频率的程序实例/*程序描述:利用Timer_A捕获脉冲宽度利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量程序用到了定时器A的CCI1A端口(MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,start,end,两个个变量来计算脉冲宽度*/#include msp430x14x.h#include lcd12864.huint start,end;uint width; /=用于存放脉宽=uint period; /=用于存放周期=uint frequency; /=用于存放频率=uint fy7; /=用于存

2、放频率显示数据=uint pd7; /=用于存放周期显示数据=uint wh6; /=用于存放脉宽显示数据=const unsigned char zhouqi=周期为:(us) ; const unsigned char us=us ;const unsigned char pinlv=频率为:(Hz) ;const unsigned char hz=HZ ;void process(void); /=函数声明=void delay(); /=延时函数=void InitSys(); /=初始化时钟=/* 主函数*/int main( void ) WDTCTL = WDTPW + WDTH

3、OLD; /=关狗= InitSys(); /=初始化时钟,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(); /=开全局中断允许= Ini_Lcd(); /=初始化液晶= Clear_GDRAM(); /=清屏= Disp_HZ(0x

4、80,zhouqi,8); Disp_HZ(0x88,pinlv,8); while(1) process(); Write_Cmd(0x90);/=写地址= Write_Data(0x30+pd6); Write_Data(0x30+pd5); Write_Data(0x30+pd4); Write_Data(0x30+pd3); Write_Data(0x30+pd2); Write_Data(0x30+pd1); Write_Data(0x30+pd0); Write_Cmd(0x98);/=写地址= Write_Data(0x30+fy6); Write_Data(0x30+fy5);

5、 Write_Data(0x30+fy4); Write_Data(0x30+fy3); Write_Data(0x30+fy2); Write_Data(0x30+fy1); Write_Data(0x30+fy0); delay(); /* 初始化时钟*/void InitSys() unsigned int i; /- 使用XT2振荡器 - BCSCTL1&=XT2OFF; /=打开XT2振荡器= do IFG1 &= OFIFG; /=清除振荡器失效标志= for (i = 0xFF; i 0; i-); /=延时,等待XT2起振= while (IFG1 & OFIFG) != 0)

6、; /=判断XT2是否起振= BCSCTL2 =SELM_2+SELS; /=选择MCLK、SMCLK为XT2,8M= /* 延时函数*/void delay() unsigned int i; unsigned int j=10; for(i=10;i0;i-) while(j-); /* 数据处理 */void process(void) while(endstart); /while(endstart width = end-start; /=实际脉冲宽度的计算= period = 2* width; frequency=/period; pd6=period/; pd5=(period

7、-*pd6)/; pd4=(period-*pd6-*pd5)/10000; pd3=(period-*pd6-*pd5-10000*pd4)/1000; pd2=(period-*pd6-*pd5-10000*pd4-1000*pd3)/100; pd1=(period-*pd6-*pd5-10000*pd4-1000*pd3-100*pd2)/10; pd0=period%10; fy6=frequency/; fy5=(frequency-*fy6)/; fy4=(frequency-*fy6-*fy5)/10000; fy3=(frequency-*fy6-*fy5-10000*fy4

8、)/1000; fy2=(frequency-*fy6-*fy5-10000*fy4-1000*fy3)/100; fy1=(frequency-*fy6-*fy5-10000*fy4-1000*fy3-100*fy2)/10; fy0=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; /=记录初始时间= e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论