金牌会员
- 积分
- 2515
- 威望
- 1198
- 贡献
- 703
- 兑换币
- 752
- 注册时间
- 2012-12-24
- 在线时间
- 307 小时
|
本帖最后由 老学童先生 于 2014-4-13 10:31 编辑
#include "common.h"
#include "include.h"
#define Trig PTA27 //超声波输入(触发)
#define Echo PTD6 //超声波接收
#define led1 PTB20_OUT//野火自带的led灯
void PORTD_IRQHandler(void); //PORTD端口中断服务函数
void PIT0_IRQHandler(void);
uint8 m=0;
uint32 t=0;
uint8 f=0;
//uint32 time=0;
//uint32 time_rising=0;
//float distance=0;
uint32 distance=0;
void HC_SR04_Send(void)
{
gpio_set(Trig, 1);
DELAY_US(20);
gpio_set(Trig, 0);
//printf("\n Trig\n");
}
void main()
{
// printf("\n*****csb测试*****\n");
gpio_init (Trig, GPO,0);
DELAY_US(2);
pit_init_us(PIT0, 100); //定时 1000 个bus时钟 后中断 100us
set_vector_handler(PIT0_VECTORn,PIT0_IRQHandler); // 设置中断复位函数到中断向量表里
// enable_irq(PIT1_IRQn); //IRQ_RISING IRQ_FALLING IRQ_EITHER
port_init(Echo, ALT1 | IRQ_EITHER | PULLUP ); //初始化 PTD7 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
set_vector_handler(PORTD_VECTORn ,PORTD_IRQHandler); //设置PORTE的中断复位函数为 PORTE_IRQHandler
enable_irq (PORTD_IRQn); //使能PORTE中断
//HC_SR04_Send();
//DELAY_MS(50);
while(1)
{
HC_SR04_Send();
DELAY_MS(500);
}
}
void PORTD_IRQHandler(void)
{
uint8 n = 0; //引脚号
n = 6;
m++;
if(PORTD_ISFR & (1 << n)) //PTD7 触发中断
{
PORTD_ISFR = (1 << n); //写1清中断标志位
/* 以下为用户任务 */
// printf("\n按下按键\n");
// key_handler();
if(m==1)
{
t=0;
enable_irq(PIT0_IRQn); // 使能LPTMR
}
if((m==2)||(t>=348))
{
disable_irq(PIT0_IRQn);
if(t>=348)
t=348;
distance=17*t;//(340*t*100us)/2=17*t 为啥是实际距离的两倍?????
printf("\n distance为:%d mm\n",distance); //打印延时时间
m=0;
}
/* 以上为用户任务 */
}
}
void PIT0_IRQHandler(void)
{
t++;
PIT_Flag_Clear(PIT0); //清中断标志位
}
|
|