- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于MSP430G2553的数字频率计设计
基于MSP430G2553的数字频率计设计
这是经过改进后的程序源码,较上次的设计相比,测频范围提高到3MHz,是因为将上次采用的IO口中断计数,改为两人TIMERB计数,通过TIMERA定时,TIMERB捕获计数,最终实现测频。
相关经验总结
1、测频有两种方法 :侧频法和测周法; 本次设计是采用的timerA定时1S,P1.0口作为被测信号输入口,上升沿捕捉,每来一个上升沿进入IO中断,在中断服务函数里变量i计数一次,当定时1S到时,读取变量i的值,则为被测频率;然后将数据传送到LCD和PC机显示;G2553有两个定时模块timerA和timerB,要特别注意它的寄存器的区别格式,默认的是TIMER A的。 中断向量也有两个,有优先级之分,timer0_A0 (应用于CCR0 优先级最高)timer0_A1(用于CCR1,CCR2和其他寄存器)。
串口通信有UART的异步通信与SPI的同步通信,也有两个通信模块,接收中断和发送中断,对应口位P1.1和P1.2。
MAX232在焊接时,外围的电容可以在0.1UF到10UF,没有影响,9阵的串口接线时也需要特别注意 (见单片机书上179页)
在最后的串口通信中会出现串口调试窗口中不仅显示需要的频率 还会有其他的数据 ,这就需要传进BUFF(8位)中的数据长度不能有其他的 ,因此比如传一个字符串型的DATA 进入BUFF,用到stringlen(),包含头文件sring.h。
5、重点是波特率的配置,特别是当分频系数为小数时:
/***msp430g2553_LCD1602_Frequency_Detect****
*grade:2010
*date:2012.7.16
*函数功能:测频率
*管脚:P1.0作为外部频率的入口
*LCD显示:P1.3 P1.5 -- RS EN P2.0-- RW P2.4-2.7 数据端口
*/
#include msp430g2553.h
#include lcd1602_4.h
unsigned long data;
int i,j,h,m=0,n=0;
char a[15]= ;
char *pa=a;
double Freq=0; //频率测量结果存放变量
double TA_OverflowCnt=0;//TA溢出次数存放变量
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//端口设置
P1SEL |=BIT0; //允许其第二功能,作为TACLK输入,即待测输入 ----设为1外围模块接口
P2SEL=0x00; //设置P2为通用I/O
P1DIR =~BIT0; //P1.0(TACLK)作为输入引脚
P2DIR |= 0xf1; // Set P2 to output direction 1111 0001
P1DIR |= 0x28; //0111 1000 p1.3 1.5 作为LCD使能复位控制端 0010 1000
//initial_lcd(); //LCD初始化
initLCD();
TA1CCR0=65535; //A1定时1s
TA1CTL = TASSEL_2 + ID_3 + TACLR + MC_1 + TAIE; // TA1信号作为基准时钟 选择SMCLK作为时钟 选ACLK会不会稳定点?
TA0CTL = TASSEL_0 + TACLR + TAIE + MC_2; //外部信号作为A0时钟 ,捕获模式
TACCTL0 = CCIE; //打开A0中断捕获(该句和下一句为中断必要语句)
TA1CCTL0 = CCIE; //打开A1中断捕获
_EINT(); //打开全局中断
for (;;)
{
_enable_interrupts();
data=(int)data;
a[0]=data/100000+0x30;
a[1]=data/10000%10+0x30;
a[2]=data/1000%10+0x30;
a[3]=data/100%10+0x30;
a[4]=data/10%10+0x30
原创力文档


文档评论(0)