#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}
stm8超声波测距为什么测的距离一直没有改变
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
悬赏问题
- ¥15 安装svn网络有问题怎么办
- ¥15 Python爬取指定微博话题下的内容,保存为txt
- ¥15 vue2登录调用后端接口如何实现
- ¥65 永磁型步进电机PID算法
- ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
- ¥88 找成都本地经验丰富懂小程序开发的技术大咖
- ¥15 如何处理复杂数据表格的除法运算
- ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
- ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
- ¥15 latex怎么处理论文引理引用参考文献