求一个cc2530 超声波模块测距的程序

求一个cc2530 超声波模块测距的程序,第1张

#ifndef ULTRASOUND_H

#define ULTRASOUND_H

#define uchar unsigned char

#define uint unsigned int

#define TRIG P1_3//P1_2

#define ECHO P0_7//P0_1

extern uchar RG

extern uchar H1

extern uchar L1

extern uchar H2

extern uchar L2

extern uchar H3

extern uchar L3

extern uint data

extern float distance

extern uchar LoadRegBuf[4]

//void Delay(uint n)

void Delay_1us(uint microSecs)

void Delay_10us(uint n)

void Delay_1s(uint n)

void SysClkSet32M()

void Init_UltrasoundRanging()

void UltrasoundRanging(uchar *ulLoadBufPtr)

__interrupt void P0_ISR(void)

#endif

×××××××××××××××××××××××××××××××××××××××××××

//×××××××××××Ultrasound.c****************************

#include <ioCC2530.h>

#include "Ultrasound.h"

uchar RG

uchar H1

uchar L1

uchar H2

uchar L2

uchar H3

uchar L3

uint data

float distance

uchar LoadRegBuf[4]//全局数据,用以存储定时计数器的值扒谨。

void Delay_1us(uint microSecs)

{ while(microSecs--)

{/* 32 NOPs == 1 usecs 因为延时还有计算的缘故,用了31个nop*/

asm("nop")asm("nop")asm("nop")asm("nop")asm("御宴nop")

asm("nop")asm("nop")asm("nop")asm("nop")asm("nop")

asm("nop")asm("nop")asm("nop")asm("nop")asm("nop"镇此银)

asm("nop")asm("nop")asm("nop")asm("nop")asm("nop")

asm("nop")asm("nop")asm("nop")asm("nop")asm("nop")

asm("nop")asm("nop")asm("nop")asm("nop")asm("nop")

asm("nop")

}

}

void Delay_10us(uint n)

{ /* 320NOPs == 10usecs 因为延时还有计算的缘故,用了310个nop*/

uint tt,yy

for(tt = 0tt<ntt++)

for(yy = 310yy>0yy--)

{asm("NOP")}

}

void Delay_1s(uint n)

{ uint ulloop=1000

uint tt

for(tt =n tt>0tt--)

for( ulloop=1000ulloop>0ulloop--)

{

Delay_10us(100)

}

}

void SysClkSet32M()

{

CLKCONCMD &= ~0x40//设置系统时钟源为32MHZ晶振

while(CLKCONSTA &0x40)//等待晶振稳定

CLKCONCMD &= ~0x47 //设置系统主时钟频率为32MHZ

//此时的CLKCONSTA为0x88。即普通时钟和定时器时钟都是32M。

}

void Init_UltrasoundRanging()

{

P1DIR = 0x08//0为输入1为输出 00001000 设置TRIG P1_3为输出模式

TRIG=0 //将TRIG 设置为低电平

P0INP &= ~0x80 //有上拉、下拉 有初始化的左右

P0IEN |= 0x80 //P0_7 中断使能

PICTL |= 0x01 //设置P0_7引脚,下降沿触发中断

IEN1 |= 0x20 // P0IE = 1

P0IFG = 0

}

void UltrasoundRanging(uchar *ulLoadBufPtr)

{

SysClkSet32M()

Init_UltrasoundRanging()

EA = 0

TRIG =1

Delay_1us(10)//需要延时10us以上的高电平

TRIG =0

T1CNTL=0

T1CNTH=0

while(!ECHO)

T1CTL = 0x09 //通道0,中断有效,32分频自动重装模式(0x0000->0xffff)

L1=T1CNTL

H1=T1CNTH

*ulLoadBufPtr++=T1CNTL

*ulLoadBufPtr++=T1CNTH

EA = 1

Delay_10us(60000)

Delay_10us(60000)

}

#pragma vector = P0INT_VECTOR

__interrupt void P0_ISR(void)

{

EA=0

T1CTL = 0x00

LoadRegBuf[2]=T1CNTL

LoadRegBuf[3]=T1CNTH

L2=T1CNTL

H2=T1CNTH

if(P0IFG&0x080) //外部ECHO反馈信号

{

P0IFG = 0

}

T1CTL = 0x09

T1CNTL=0

T1CNTH=0

P0IF = 0//清中断标志

EA=1

}

××××××××××××××××××××××××××××××××××××××

#include <ioCC2530.h>

#include "Ultrasound.h"

void main(void)

{

while(1)

{

UltrasoundRanging(LoadRegBuf)

Delay_1s(1)

data=256*H2+L2-L1-256*H1

distance=(float)data*340/10000

Delay_1s(2)

}

}

我也遇到这种情况...

只要连着CC2530,多复位几次败枝猜就好了..

识别到C1100是,因为仿真器没有识别到芯片...

复位后,仿真器与芯片进行识别,即可找了CC2530

这种情况应该是仿真器的原因.应该是BUG吧.

我用了一年的仿真器都没问题.一年后就经常出现..

开始以为仿真器坏了.就又买了一个仿真器,发现情况还是这样..

找了好久才搞明白...

实在不行,把电脑重启..多试搭猛几次就好了

总这一句话.仿真器察型软件BUG.

请给分....

void init_1602()

{

LCD_1602_EN=0

LCD_1602_RW=0 /困链/这句悄歼话你忘写了,液晶数据也不进去的。。

write_1602_com(0x38) //设置16X2显示,5X7点阵,8位数据接口

write_1602_com(0x0e) //设置开显示,不显示光标

write_1602_com(0x06) //写一个字启尺冲符后地址指针加1

write_1602_com(0x01) //显示清0,数据指针清0

write_1602_com(0x80) //设置初始显示为第一行第一列

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8261552.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存