历史上的今天
今天是:2025年02月25日(星期二)
2020年02月25日 | 基于MSP430F5529的超声波测距源码
2020-02-25 来源:eefocus
超声波的原理大家百度一下就应该知道了,因此基于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;
}
}
史海拾趣
|
eboot.bin文件烧进系统以后,会自行压缩成eboot.nb0文件。我现在需要知道这个压缩的过程的代码是在哪个文件的哪个函数里的!有知道的吗??? 我找了F:\\WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\ETHDBG\\BLCOMMON的BLCOMMON.c文件的DownloadImage函 ...… 查看全部问答> |
|
想学WINCE的驱动,但书籍好少,于是我想先看WINDOWS的驱动,从这里入门,下面这三种那种更接近WINCE的驱动编程呢?区别又在那呢? 1)WIN9X虚拟设备驱动VxD 2)WIN NT驱动 3)WIN 2000 WDM驱动 … 查看全部问答> |
|
1、89S52的波特率发生器是T2还是T1,还是两个都可以? 2、多机通信的时候SCON是设置成方式1还是方式3?(我要通过SM2来控制发送的是地址还是数据) 3、S52用KEIL在线仿真是接在COM口还是打印机口?… 查看全部问答> |
|
实验室最近翻出来一个古董级的CPLD(谢谢一楼~ 嘻嘻)~~ 大家帮我看看是干什么用的啊 最好能告诉我值多少钱~~~ 娃哈哈哈哈哈! 见图 对不起各位,手机拍的!! 效果差了点!! 但差不多都拍上了,请达人来 ...… 查看全部问答> |
|
协议栈版本信息: ZigBee2006\\ZStack-1.4.3-1.2.1因为用现在这模块SerialApp没做成功,上电后按键没反应……两块无线龙小板子已经买来N年了. 自己想在SampleApp例子基础上修改实现串口透明传输:串口调试助手1模块1 模块2串 ...… 查看全部问答> |




