基于MSP430F5529的超声波测距源码

发布者:TranquilWhisper最新更新时间:2020-02-25 来源: eefocus关键字:MSP430F5529  超声波测距  调整时钟 手机看文章 扫描二维码
随时随地手机看文章

超声波的原理大家百度一下就应该知道了,因此基于MSP430的超声波主要是调整时钟就行了。


代码如下


#include "msp430f5529.h"

#include "usart.h"

#include "stdio.h"

 

double a = 1.111;       //距离

long long next;         //寄存器

/*

 * P3.6与TB0.6相连接,输出信号

 */

int tim = 0;        //溢出次数

 

void SetVcoreUp (unsigned int level)

{

  PMMCTL0_H = PMMPW_H;

  SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;

  SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;

  while ((PMMIFG & SVSMLDLYIFG) == 0);

  PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);

  PMMCTL0_L = PMMCOREV0 * level;

  if ((PMMIFG & SVMLIFG))

    while ((PMMIFG & SVMLVLRIFG) == 0);

  SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;

  PMMCTL0_H = 0x00;

}

 

void set(void)

{

  volatile unsigned int i;

  WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT

  P1DIR |= BIT1;                            // P1.1 output

  P1DIR |= BIT0;                            // ACLK set out to pins

  P1SEL |= BIT0;

  P2DIR |= BIT2;                            // SMCLK set out to pins

  P2SEL |= BIT2;

  P7DIR |= BIT7;                            // MCLK set out to pins

  P7SEL |= BIT7;

  // Increase Vcore setting to level3 to support fsystem=25MHz

  // NOTE: Change core voltage one level at a time..

  SetVcoreUp (0x01);

  SetVcoreUp (0x02);

  SetVcoreUp (0x03);

  UCSCTL3 = SELREF_2;                       // Set DCO FLL reference = REFO

  UCSCTL4 |= SELA_2;                        // Set ACLK = REFO

  __bis_SR_register(SCG0);                  // Disable the FLL control loop

  UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx

  UCSCTL1 = DCORSEL_7;                      // Select DCO range 50MHz operation

  UCSCTL2 = FLLD_0 + 762;                   // Set DCO Multiplier for 25MHz

  __bic_SR_register(SCG0);                  // Enable the FLL control loop

 

  __delay_cycles(782000);

  do

  {

    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);

                                            // Clear XT2,XT1,DCO fault flags

    SFRIFG1 &= ~OFIFG;                      // Clear fault flags

  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

  P6DIR |= BIT0;

 

}

 

void main()

{

    set();

    WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT

    UART_Init();                //串口初始化

 

    P3DIR |= BIT6;        

    P3OUT &=~ BIT6;     

 

    P3DIR &=~ BIT5;      

    P3IN &=~ BIT5;       

 

    P2DIR |= 0X00;   

    P2IFG = 0X00;  

    P2IE = BIT0;    

    P2IES = BIT0;  

    P2IN = BIT0;  

    P2OUT = BIT0;    

    P2REN = BIT0;   

 

    __enable_interrupt();     

 

    P1SEL |= BIT4;    

    P1DIR |= BIT4;    

    P1DS |= BIT4;   

    P1OUT &=~ BIT4;   

 

    while(1)

    {

        P3OUT = BIT6;  

        __delay_cycles(4);

        P3OUT &=~ BIT6;

        P2OUT &=~ BIT0;

        __delay_cycles(40000);

    }

}

 

 

#pragma vector=PORT2_VECTOR  

 

__interrupt void Port2_ISR(void)

{

 

    unsigned int temp;   

    if((P2IN&0X01)!=0X01)

    {

        temp=P2IFG;     

        P2IFG=0x00; 

        if(temp==0x01)

        {

            P2OUT = BIT0;  

            //开始计时

            TA0CCTL0 = CCIE;

            TA0CCR0 = 20000;

            TA0CTL = TASSEL_2 + MC_1 + TACLR;      

            __bis_SR_register(GIE);

            while((P3IN&0X20) == 0X20);

            //a + TA0R

            TA0CTL = MC0;

            //next = TA0R;

 

            printf("next = %ldn",TA0R);

 

        }

    }

}

 

#pragma vector = TIMER0_A0_VECTOR

__interrupt void TIMER0_A0_ISR(void)

{

    tim++;

    if(a>10)

    {

        tim = 0;

        P3OUT = BIT6;  

        __delay_cycles(4); 

        P3OUT &=~ BIT6;

    }

 

}

关键字:MSP430F5529  超声波测距  调整时钟 引用地址:基于MSP430F5529的超声波测距源码

上一篇:初学MSP430——按键中断控制小灯翻转
下一篇:【MSP430】捕获模式测量信号占空比

推荐阅读最新更新时间:2024-11-08 16:13

嵌入式超声波测距系统的实现方案
  目前所研究的超声波测距传感器测距范围普遍较小,线性度和重复性较差。文中所提出的研究方法能很好的解决这2 个问题,在保证线性度和重复性均不低于1. 5‰的前提下,测量范围达到了5 m 以上。为了增大超声波发射功率和准确接收回波信号,在分析超声波测距误差原因和考虑软、硬件成本的基础上,提出了一种以C8051F320 微控制器、反激变换器和专用集成电路PW0268 为核心器件的超声波测距系统及其硬件和软件的设计方案。系统中还集成了声速的温度补偿、串行输出和LCD 显示等功能,能实时修正超声速度和显示测量值。实验结果表明,该超声波测距系统具有测量数据准确,线性度高、重复性好、迟滞小、成本低等优点,可广泛应用于工业中非接触测距场所。
[单片机]
嵌入式<font color='red'>超声波测距</font>系统的实现方案
使用MSP430F5529的ADC测量,并用OLED显示传感器输出的模拟量
导语 在所有的嵌入式应用中几乎都会用到的一个功能就是ADC模块(模数转换器)。 在这里笔者分享用CCS开发环境使用MSP430F5529中的ADC来读取灰度传感器输出的模拟量,然后读取电压并将其显示在OLED上。 效果展示 MSP430F5529有4个12位ADC通道,分别为P6.0~P6.3。ADC计算公式: ADC转化结果为0-4095,最大值为2的12次方。 此外MSP430的ADC有4个转换模式:单通道单次转化,多通道单次转化,单通道多次转化和多通道多次转化。在这里用的是多通道多次转化,毕竟要在OLED上显示多个通道的ADC值,这些值是随传感器变化的。 主函数代码 /******************接线
[单片机]
使用<font color='red'>MSP430F5529</font>的ADC测量,并用OLED显示传感器输出的模拟量
基于P89LPC932超声波测距
0 引言 一些传统的距离测量方式在某些特殊场合存在不可克服的缺陷。例如,液面测量就是一种距离测量,传统的电极法是采用差位分布电极,通过给电或脉冲来检测液面,电极长时间浸泡于水中或其他液体中,极易被腐蚀、电解,失去灵敏性。利用超声波测量距离可以解决这些问题,因此超声波测量距离技术在工业控制、勘探测量、机器人定位和安全防范等领域得到了广泛应用。所谓超声波是指频率高于20 kHz的机械波,具有强度大、方向性好等特点。其一般由压电效应或磁致伸缩效应产生。 本文设计的超声波测距仪用三种测距模式选择跳线J1(短距、中距、可调距)。其整体方案为当按下测量键,探头就发送超声波,当超声波遇到障碍物时将产生回波信号;系统将探头接收到的回波信号放
[测试测量]
基于P89LPC932<font color='red'>超声波测距</font>仪
msp430f5529 RC522射频卡程序
/* 波特率设置为9600 特别说明: 单片机与PC的通讯: PC与单片机的连接:需要一个usb转ttl调试器B,B的RXD接P4.5口,TXD接4.4口,VCC接5v电压,GND接地即可。 PC端使用的串口调试助手是X—COM,将调试器B连接好单片机。单片机的数据线接到电脑上,编译好程序后,点击CCS上的开始调试。 然后将调试器插入电脑,在X-COM中 设置波特率为9600,停止位1,数据位8,串口选择调试器B的usb接口!(这步很重要)打开串口,即可开始串口调试。 此刻能实现的功能: 1.PC发送除A, F外的字符,单片机发送给电脑菜单信息。 单片机与RC522的通讯: SDA p2.2 SCK P2.7
[单片机]
MSP430F5529 flash 读写 详解
MSP430F5529falsh的读写 先上代码 void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 unsigned long * Flash_ptrD; // 定义指向信息存储器D段的指针 unsigned long value; OLED_Init(); Flash_ptrD = (unsigned long *) 0x1800; // 初始化指针 value = 0x00000678; // 初始化需写入的长字 FCTL3 = FWKEY; /
[单片机]
<font color='red'>MSP430F5529</font> flash 读写 详解
如何使用ATtiny85单片机制作便携式超声波测距
在很多应用中,经常需要测量物体与人、设备或车辆等之间的距离,例如机器人运动控制、车辆控制、盲人手杖、医疗设备等。测量距离有多种方法,其中使用超声波传感器进行测距是最便宜的方法之一。在本篇文章中,我们将使用ATtiny85单片机和OLED显示模块以及HC-SR04超声波传感器来制作一款超声波数字测距仪。我们在自制了PCB电路板,该电路板可用于距离测量、物体检测和许多其他应用。 所需的组件 ● ATtiny85单片机 ● HC-SR04 超声波传感器 ● I2C OLED 显示模块 ● AMS1117 5V 稳压器 ● 3× 10KΩ 电阻 ● 1× 10 µf 电容 ● 9V电池 超声波测距仪的电路图 使用 A
[单片机]
如何使用ATtiny85单片机制作便携式<font color='red'>超声波测距</font>仪
浅谈msp430f5529入门(1)——时钟模块DCO
刚开始摸索430F55系列,我也是菜鸟一名,折腾了两天它的时钟系统,总算自认为有点眉目。想到入门不易,趁热把我的一些体会分享一下。菜鸟才疏学浅,如有不妥之处,请务必指出。 DCO 5系列中比149多了个FLL——锁频环,初学者对着他确实有点头疼。另外,还有一个名为DCOCLKDIV的时钟源,它只是由DCOCLK分频而得,但请谨记: ·PUC后MCLK和SMCLK的默认时钟源并不是DCOCLK,而是DCOCLKDIV!频率是DCOCLK的二分之一! ·DCOCLKDIV的分频值为D,由FLLD所确定,PUC后D默认为2,所以DCOCLKDIV的频率是DCOCLK的二分之一。 如果把锁频环关闭不用的
[单片机]
如何调整STM32单片机中flash与时钟速率之间的关系
void Flash_Init(void) { // 调整flash与时钟速率之间的关系 FLASH-》ACR |= FLASH_ACR_LA TE NCY; } void Flash_Unlock(void) { // FLASH-》CR 的第7位为解锁的标志位或者上锁的操作位 while(FLASH-》CR & FLASH_CR_LOCK) { FLASH-》KEYR = FLASH_FKEY1; FLASH-》KEYR = FLASH_FKEY2; } } void Flash_Lock(void) { FLASH-》CR |= FLASH_CR_LOCK; } void Flash_Clear_All_Flag(voi
[单片机]
如何<font color='red'>调整</font>STM32单片机中flash与<font color='red'>时钟</font>速率之间的关系
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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