9393|12

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

频率计 [复制链接]

   求大神帮忙,本人刚学msp430. 用msp430g2553测量频率,显示在lcd1602上,有没有谁有c语言程序啊。

最新回复

#pragma vector=2*1u;   这个编译过不了  详情 回复 发表于 2014-10-9 16:45
 
点赞 关注

回复
举报

5014

帖子

12

TA的资源

裸片初长成(初级)

沙发
 
说下思路吧!
使用定时器的捕获单元,测量两次上升沿的时间间隔,来达到测频的目的。
关于这部分的知识主要是定时器的功能
液晶显示的话IO口模拟时序即可,但是可能launchpadIO口数目不足,可以使用165这样串转并方法拓展IO
 
 

回复

437

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
测频的话,用M3吧,811就不错~
 
个人签名
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢指导,我也在困惑之中!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

5
 

基于MSP430G2553数字频率计设计(网上的)

设计要求:
1、利用MSP430核心板设计一个数字频率计;
2、对外部输入幅度约为3V的方波进行频率测量;
3、LCD1602 显示当前频率;
4、同时将频率数据通过串口传送给PC机显示。

注:MAX232统一提供。


#include "msp430g2553.h"
#include "string.h"
unsigned long i=0;
unsigned long j,data;
char a[15]=" ",b[15]=" ";
const char string1[] = { "I love 430\r\n" };
char *pa=b;
int m=0,n=0,h;
unsigned int w;
void delay(int t)
{
        long s=50;
        for(;t>0;t--)
        {
                for(;s>0;s--)
                {
                        ;;
                }
        }
}

void write_com(char com)
{
        P1OUT&=~(1<<3);//rS=0;
        P1OUT&=~(1<<4);//RW=0;
        P1OUT&=~(1<<5);//en=0;
        P1OUT&=~(1<<1);//
        delay(8);
        P2OUT=com;
        delay(8);
        P1OUT|=(1<<5);//en=1;
        delay(8);
        P1OUT&=~(1<<5);//en=0;
}

void write_data(char dt)
{
        P1OUT|=(1<<3);//rs=1;
        P1OUT&=~(1<<4);//rw=0;
        P1OUT&=~(1<<5);//en=0;
        delay(50);
        P2OUT=dt;
        delay(50);
        P1OUT|=(1<<5);//en=1;
        delay(50);
        P1OUT&=~(1<<5);//en=0;
}

void initial_lcd(void)
{
        delay(20);
        write_com(0x28);
        delay(15);
        write_com(0x0c);
        delay(15);
        write_com(0x06);
        delay(15);
        write_com(0x01)        ;
}

void LCD_Disp(char x,char y,char *character)
{
  char xtemp;
    switch(y)
    {
        case 0:xtemp=0x80+x;break;
        case 1:xtemp=0xc0+x;break;
        default:break;
    }
    write_com(xtemp);
    while(*character!=0)
    {
            write_data(*character);
        character++;
    }
}

void main(void)
{

        WDTCTL=WDTPW+WDTHOLD;
                //配置定时器TimerA
        TACTL = TASSEL_1 + MC_1 + TAIE;          // Source: ACLK, UP mode
        TACCTL0 = SCS;
        CCR0 =12000;                                        //Timer count 5100
        CCTL0 = CCIE;                          //CCR0 interrupt enabled
        _BIS_SR(GIE);
        P1DIR |=BIT6;

        P1IES &=~BIT0;//上升沿触发中断
        P1IE |=BIT0;//允许中断
        _EINT();

        P2SEL=0x00;
        P1DIR |=0x3E;    // 0011 1110
        P2DIR =0xFF;
        P1OUT &= ~BIT1 + ~BIT2;                                // All P1.x reset
        P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
        P1SEL2 = BIT1 + BIT2;
        initial_lcd();

         //配置 串口

        UCA0CTL1 |= UCSSEL_2;                     // SMCLK
        UCA0BR0 = 8;                              // 1MHz 115200
        UCA0BR1 = 0;                              // 1MHz 115200
        UCA0MCTL = UCBRS0+UCBRS2;               // Modulation UCBRSx = 5
        UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
        IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt
          // __bis_SR_register(LPM4_bits + GIE);       // Enter LPM4, interrupts enabled
        for(;;)
        {
                        while(data>0)
                                        {
                                                a[m]=data%10;
                                                data/=10;
                               
                                        }
                                        a[m]='\0';
                                        m--;

                                        for(;m>=0;m--)
                                        {
                                                b[n]=a[m]+0x30;
                                                                                        }
                                        b[n++]='H';
                                        b[n++]='z';
                                        b[n++]='\0';

                                        //if(UCA0TXBUF!='\0')
                                        //{UCA0TXBUF = *pa;}
                                        for(h=5000;h>0;h--)
                                        {
                                                LCD_Disp(0,0,"f=");
                                                LCD_Disp(1,0,pa);
                                        }
                                        UCA0TXBUF = *pa;
        }
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
        //P1OUT ^=BIT6;//可以用P1.6口检测中断来了没有
        data=i;
        //UCA0TXBUF=i;
        j=i;
        i=0;
}
//P1口中断
#pragma vector=2*1u;
__interrupt void port1(void)
{
        if(P1IFG&BIT0)
        {
                i++;
                P1IFG &=~BIT0;  //清除中断标志位
        }
}

点评

这个程序有限制啊。。。。。高于32768HZ的就无法测试了。。。。。。呵呵~~~目前最高的只能测到400KHZ左右,误差也挺大的~~~ 我稍后会发布频率计的源代码。可以测试到200K以上,误差较小。但是。达到400K的话,误  详情 回复 发表于 2012-8-2 01:44
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

6
 
非常感谢
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

7
 
灰常感谢
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(高级)

8
 

回复 5楼 单片机终极者 的帖子

这个程序有限制啊。。。。。高于32768HZ的就无法测试了。。。。。。呵呵~~~目前最高的只能测到400KHZ左右,误差也挺大的~~~

我稍后会发布频率计的源代码。可以测试到200K以上,误差较小。但是。达到400K的话,误差就很大了~~~
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(高级)

9
 
 
 
 

回复

4008

帖子

0

TA的资源

版主

10
 
ti例程有个dcoflash设置完后使用定时器测的频率,能测到16M,不是很准凑合能用
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(中级)

11
 
设置完后使用定时器测的频率,能测到16M,
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(中级)

12
 

低频(100HZ以下)

有没有谁写的有测低频的频率计程序(测周期法)
 
 
 

回复

7

帖子

3

TA的资源

一粒金砂(初级)

13
 
#pragma vector=2*1u;   这个编译过不了
 
 
 

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

查找数据手册?

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
快速回复 返回顶部 返回列表