/*硬件接线说明 PC1接ECHO PI0接TRIG */ #include "iostm8s208mb.h"//主控芯片的头文件 #include "ptctr.h" #include "lcd1602.h" #include "stdbool.h" #include "stdio.h" #define TRIG PI_ODR_ODR0 //输出给超声波一个触发信号的引脚 u16 pw1=0,pw2=0; u16 tmp=0; _Bool pw_Flag=false; int main(void) { Clock_Config(); Delay_ms(10);//延时等待稳定 GPIO_Config();//初始化相关GPIO引脚配置 TIM1_init();//TIM1相关功能配置初始化 asm("rim"); while(1) { TRIG =1;//保证最短10us的高电平 Delay_us(15); TRIG =0; Delay_ms(100);//保持100ms的延时以等待回波 if(pw_Flag==true) { tmp=(float)pw2*0.017;//0.017是声速340m/s除以2的值。 pw_Flag=false; } } } /*TIM1捕获/比较中断*/ #pragma vector=TIM1_CAPCOM_CC1IF_vector __interrupt void TIM1_CAPCOM_CC1IF_ISR(void) { if(TIM1_SR1_CC1IF==1) { TIM1_SR1_CC1IF=0;//清除中断标志位 } if(TIM1_SR1_CC2IF==1) { TIM1_SR1_CC2IF=0;//清除中断标志位 pw2=TIM1_CCR2H; pw2<<=8; pw2+=TIM1_CCR2L; pw_Flag=true; } } /*TIM1初始配置*/ void TIM1_init(void){ CLK_PCKENR1=0x80;//打开定时器1时钟 TIM1_PSCRH=0;//16M不分频 TIM1_PSCRL=0; TIM1_CR1_ARPE =0;//不通过预装载寄存器 TIM1_CR1_URS=1;//仅当计数器溢出时才发生中断请求 TIM1_CR1_UDIS=1;//禁止更新事件//计数器溢出属于更新事件 TIM1_CR1_DIR=0;//向上计数 TIM1_CCMR1=0; TIM1_CCMR1 |=0x01; TIM1_CCMR2=0; TIM1_CCMR2|=0x02; TIM1_CCER1_CC1P=0;//上升沿时发生捕获 TIM1_CCER1_CC2P=1;//下降沿时发生捕获 TIM1_CCER1_CC1E=1;//使能捕获功能 TIM1_CCER1_CC2E=1;//使能捕获功能 TIM1_SMCR=0x54;// TIM1_CCER1_CC1E=1;//使能捕获功能 TIM1_CCER1_CC2E=1;//使能捕获功能 TIM1_IER_CC1IE=1;//开启捕获中断 TIM1_IER_CC2IE=1;//开启捕获中断 TIM1_CR1_CEN=1;//开启计数 } /*时钟初始配置*/ void Clock_Config(void){ //==启用外部晶振.不分频。 CLK_CKDIVR =0x02;//四分频 CLK_ECKR=0x01;//HSE开 CLK_ICKR=0x00; while(CLK_ECKR!=0x03);//等待HSE准备就绪 CLK_SWR=0xb4;//设置HSE为主时钟源 CLK_SWCR=0x03;//使能时钟切换,禁止时钟中断 while(!(CLK_SWCR &0x08)); // 等待切换至HSE完成 } /*GPIO初始配置*/ void GPIO_Config(void){ PI_DDR_DDR0=1; //配置PI0端口为输出模式 PI_CR1_C10=1; //配置PI0端口为推挽输出模式 PI_CR2_C20=1; //配置PI0端口高速输出 PI_ODR_ODR0=0; //输出低电平 PC_DDR_DDR1 =0;//PC1输入 PC_CR1_C11 =0;//浮空输入 PC_CR2_C21 =0;//禁止外部中断功能 }
举报
/*TIM1初始配置*/ void TIM1_init(void){ TIM1_PSCRH=0; TIM1_PSCRL=15; TIM1_CCMR1=0; TIM1_CCMR1 |=0x01; TIM1_CCMR2=0; TIM1_CCMR2|=0x02; TIM1_CCER1_CC1P=0;//上升沿时发生捕获 TIM1_CCER1_CC2P=1;//下降沿时发生捕获 TIM1_CCER1_CC1E=1;//使能捕获功能 TIM1_CCER1_CC2E=1;//使能捕获功能 TIM1_SMCR=0x54;// TIM1_CCER1_CC1E=1;//使能捕获功能 TIM1_CCER1_CC2E=1;//使能捕获功能 TIM1_IER_CC1IE=1;//开启捕获中断 TIM1_IER_CC2IE=1;//开启捕获中断 TIM1_CR1=0x01;//开启计数 }
cry1109 发表于 2019-12-9 09:15 是不是捕获极性反了?
/*TIM1初始配置*/ void TIM1_init(void){ CLK_PCKENR1=0x80;//打开定时器1时钟 TIM1_PSCRH=0;//16M不分频 TIM1_PSCRL=0; TIM1_CR1_ARPE =0;//不通过预装载寄存器 TIM1_CR1_URS=1;//仅当计数器溢出时才发生中断请求 TIM1_CR1_UDIS=1;//禁止更新事件//计数器溢出属于更新事件 TIM1_CR1_DIR=0;//向上计数 TIM1_CCMR1=0; TIM1_CCMR1 |=0x01; TIM1_CCMR2=0; TIM1_CCMR2|=0x02; TIM1_CCER1_CC1P=0;//上升沿时发生捕获 TIM1_CCER1_CC2P=1;//下降沿时发生捕获 TIM1_CCER1_CC1E=1;//使能捕获功能 TIM1_CCER1_CC2E=1;//使能捕获功能 TIM1_SMCR=0x54;// TIM1_CCER1_CC1E=1;//使能捕获功能 TIM1_CCER1_CC2E=1;//使能捕获功能 TIM1_IER_CC1IE=1;//开启捕获中断 TIM1_IER_CC2IE=1;//开启捕获中断 TIM1_CR1_CEN=1;//开启计数 }
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
等级类勋章
发帖类勋章
时间类勋章
人才类勋章
10
29
3
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号