内容发布更新时间 : 2024/11/14 12:30:01星期一 下面是文章的全部内容请认真阅读。
中北大学毕业论文
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