DDDXGCC 2019-12-11 00:16 采纳率: 0%
浏览 492

stm8超声波测距为什么测的距离一直没有改变

#include
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define Echo PC_IDR_IDR6
#define Trig PC_ODR_ODR5
float distance;
void delay_ms(uint ms) //延时函数{ uint i,j;
for(i=0;i<ms;i++)

for(j=0;j<3164;j++);
}
void IO() //IO初始化
{

PB_DDR_DDR5=0; //PB4配置为输入

PB_CR1_C15=1; //PB4为上拉电阻输入

PB_CR2_C25=0;

PC_DDR_DDR6=0;

PC_CR1_C16=1;

PC_CR1_C16=0;
}
void uart1_init(void) //串口初始化
{

UART1_CR1=0x00; UART1_CR2=0x00; UART1_CR3=0x00;

UART1_BRR2 = 0x03;

UART1_BRR1 = 0x68; //9600波特率 UART1_CR2_TEN = 1; //允许发送 UART1_CR2_REN = 1; //允许接收 UART1_CR2_RIEN = 1; //接收中断使能
}
void uart1_send(uchar dat) //串口发送{

while((UART1_SR & 0x80)==0x00); UART1_DR = dat;
}
void timer_Init(void)
{

TIM1_PSCRH = 0;

TIM1_PSCRL = 15; //(15+1)分频为1M

TIM1_ARRH = 0x0;

TIM1_ARRL = 0x32; //每50us中断一次

TIM1_CCMR1_OC1M = 6; //pwm模式2

TIM1_CCER1_CC1E = 1; //CC1引脚使能

TIM1_CCR1H = 0;

TIM1_CCR1L = 0; //默认输出低 TIM1_BKR |= 0x80; //设置刹车寄存器

TIM1_IER = 0x01; //允许更新中断 TIM1_CR1 = 0x01; //计数器使能,开始计数}
/****千位数上的每一位数的读取*****/void uart1_int(uint distance)
{

char bai,shi,ge;

bai=distance%100;

shi=distance/10%10;

ge=distance%10; uart1_send(bai+48); uart1_send(shi+48); //0x30对应的字符是‘0‘,数字加上0X30后为数字所对应的Ascall码

uart1_send(ge+48); uart1_send(0x0a); //0X0a对应的字符是换行\n}
/*********** 定时器计数 ***********/void calc(){
//0..034cm/us
int t=0; t=TIM1_CCR1H*256+TIM1_CCR1L; distance=t*0.017;

TIM1_CCR1H = 0;

TIM1_CCR1L = 0;

uart1_int(distance);
}
void Trigger()
{ Trig=1;

TIM1_ARRH = 0x0;

TIM1_ARRL = 0x32;

Trig=0;}
void main(void){

CLK_CKDIVR &=0xe7; //配置时钟为16MHz

asm("sim"); //关总中断 IO(); //IO uart1_init(); timer_Init(); asm("rim"); //开总中断

while(1)

{

Trigger(); //发送触发信号 while(Echo)

TIM1_CR1 = 0x01; //启动定时器 while(!Echo)

TIM1_CR1 = 0x00; //关闭定时器 calc(); //计算 uart1_send(0x0a);

}}#pragma vector = UART1_R_RXNE_vector__interrupt void uart1rxd(void){

UART1_SR_RXNE = 0;

//data = UART1_DR;}
#pragma vector = TIM1_OVR_UIF_vector__interrupt void TIM1_OVR_UIF(void){ TIM1_SR1_UIF = 0; //add your code here}

  • 写回答

1条回答 默认 最新

  • 艾七乌八 2019-12-25 19:10
    关注

    可能是超声波探头坏了,检测一下

    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献