基于51单片机的超声波测距系统的毕业设计报告

中北大学毕业论文

testtemp(); //重新启动转换 display(); //刷新显示 }

computer(); //计算距离 hextobcd(); //转化成BCD码 sta_flag=0; } } }

void sys_init(void) { uchar i;

for(i=0;i<29;i++) { num[i]=0;} TMOD=0x11; TH0=0x15; TL0=0xA0; P0=0;

CNT=0; CSBIN=1;

EA=1; Init_LCD();

//标志清零 //显示清零 //超声波发送关闭 //开放总中断 26

中北大学毕业论文

}

4.2外部中断子程序

如图所示,中断服务程序是响应单片机的外部中断。在系统主程序中,发射的4OKHz脉冲信号遇到障碍物反射后,经接收检测电路产生外中断信号至单片机。在中断服务程序中,首先进行必要的现场保护,再把进入中断服务程序处的计数值读出并对该数据进行处理,计算得到相应的距离值,同时转换为十进制,最后送到P2口显示输出。

RECEIVE: PUSH PSW ;中断现场保护 PUSH A

CLR EXO ;关闭外部中断INTO MOV R0,TL0 ;读取时间 MOV R1,TH0

LCALL MULD ;调用乘法子程序计算机距离 LCALL ADJ ;调用十进制调整子程序 LCALL DISP

SETB EX0 ;打开外部中断INT0 POP A POP PSW RETI

4.3定时器中断子程序

定时器中断子程序流程图如图4-2所示。由于51单片机是16位定时器,最大计时时间为65536us,当测量的距离很远的时候,定时器就会发生溢出;所以必须对溢出中断进行相应的设置才能使得单片机正常工作。同时由于电路的测量距离有限最远为5米,当测量距离超出5米时,接收探头就不能检测回波,即不能产出外部中断更不可能关闭定时器。程序如下:

TIME0: PUSH PSW ;中断现场保护 PUSH A CLR EX0 CLR TR0

MOV TL0,#00H MOV TH0,#00H SETB TR0 SETB EX0

27

中北大学毕业论文

LCALL PULSE ;调用发射脉冲子程序 POP A POP PSW RETI 定时中断 关闭定时器 定时器初始化 发射脉冲串 打开定时器 返回 图4-2 定时中断子程序流程

4.4 实现重要功能的程序分析

4.4.1 实现温度读取功能

uint Read_Temperature(void) //读取温度,返回整数值 {

uint c;

reset(); //复位18b20芯片

tu=0; //先置位温度正负标示为正 if(r) {

write(0xCC); // 跳过多传感器识别skio rom write(0xBE); //发读内部9字节内容指令

c=read(); //读两个字

reset(); //读完两个字节后复位

write(0xCC); // 跳过多传感器识别skio rom

write(0x44);

// 发启动温度变换指令

28

中北大学毕业论文

if(c>0x1000){c=c+1;tu=1;} //若温度小于0,tu=1

c>>=4; //去掉低四位即为整数温度值,无需*0.0625

return c;

}

else{return r; }

//返回0XFF表示未检测到18B20芯片

}

4.4.2 实现根据温度转化声速

int C_speed(void) //根据温度查算声速值

{

uchar y;

y=Read_Temperature(); //采温度

if(r){ //若温度有变化则按温度值取声速 {

T_C=y; //温度值=变化后的温度值 if(tu==0)speed=332+T_C*0.607; //温度为正则+声速 else speed=332-T_C*0.607; //温度为负则-声速 }

}else speed=346.5; //若1820不存在即无法读取温度,声 速=346.5M/S(取25度) return speed; }

4.4.3 实现距离计算

float Dis_count()

//距离计算函数

{ float cm; cm=TH1*256+TL1; cm-=7610; //减去限制10M的初值+可调误差值 cm*=speed; //计算距离uS*34650m cm/=20000; //转换为s 单程

return cm;

}

29

中北大学毕业论文

4.5本章小结

本章主要结合超声测距系统的硬件设计方案,给出具体实现时单片机涉及到的软件结构及其相关编程。主要包括整个程序的算法思想,采用模块化设计,大量采用子程序设计的方法,大大缩短编程开发周期,方便程序阅读以及程序查错。程序采用先在计算机上进行软件仿真,后灌进单片机中和硬件结合调试。

30

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4