资源描述:
《超声波测距汇编程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、;///////////////////////////////////////////////////////;USEBY:超声波测距器;测距范围xxCM-yyCM,堆栈在4FH以上,20H用于标志;显示缓冲单元在40H-43H,使用内存44H、45H、46H用于计算距离;VOUTEQUP1.0;红外脉冲输出端口speakequp1.1;喇叭输出端口;********************************************;*中断入口程序*;********************************************;ORG00
2、00HLJMPSTARTORG0003HLJMPPINT0ORG000BHretiORG0013HRETIORG001BHLJMPINTT1ORG0023HRETIORG002BHRETI;********************************************;*主程序*;********************************************START:MOVSP,#4FHMOVR0,#40H;40H-43H为显示数据存放单元(40H为最高位)MOVR7,#0BHCLEARDISP:MOV@R0,#00HINCR0DJNZ
3、R7,CLEARDISPMOV20H,#00HMOVTMOD,#11H;T1/T0为16位定时器MOVTH0,#00H;65毫秒初值MOVTL0,#00HMOVTH1,#00HMOVTL1,#00HMOVP0,#0FFHMOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHMOVR4,#04H;超声波脉冲个数控制(为赋值的一半)SETBPX0SETBET1SETBEASETBTR1;开启测距定时器start1:LCALLDISPLAYJNB00H,START1;收到反射信号时标志位为1CLREALCALLWORK;计算距离子程序clrEAMOVR
4、2,#32h;#64H;测量间隔控制(约4*100=400MS)LOOP:LCALLDISPLAYDJNZR2,LOOPCLR00Hsetbet0movth0,00hmovtl0,00hSETBTR1;重新开启测距定时器SETBEASJMPStart1;****************************************************;*中断程序**;****************************************************;T1中断,发超声波用;T1中断,65毫秒中断一次INTT1:CLREACLRTR0
5、clrex0MOVTH0,#00HMOVTL0,#00HMOVTH1,#00HMOVTL1,#00HSETBET0SETBEASETBTR0;启动计数器T0,用以计数intt11:CPLVOUT;40KHZnopnopnopnopnopnopnopnopnopDJNZR4,intt11;超声波发送完毕,MOVR4,#04H;只发送了两个周期lcalldelay_250;延时,避开发射的直达声波信号SETBEX0;开启接收回波中断RETIOUT:RETI;外中断0,收到回波时进入PINT0:nopjbp3.2,pint0_exitCLRTR0;关计数器CLRE
6、A;CLREX0;MOV44H,TL0;将计数值移入处理单元MOV45H,TH0;movth0,#00hmovtl0,#00hjnbp3.2,$SETB00H;接收成功标志pint0_exit:RETI;****************************************************;*显示程序*;****************************************************;40H为最高位,43H为最低位,先扫描高位DISPLAY:MOVR1,#40H;GMOVR5,#7fH;GPLAY:MOVA,R5MO
7、VP0,#0FFHMOVP2,AMOVA,@R1MOVDPTR,#TABMOVCA,@A+DPTRMOVP0,ALCALLDL1MSINCR1MOVA,R5JNBACC.4,ENDOUT;GRRAMOVR5,AAJMPPLAYENDOUT:MOVP2,#0FFHMOVP0,#0FFHRET;TAB:DB18h,7Bh,2Ch,29h,4Bh,89h,88h,3Bh,08h,09h,0ffh;共阳段码表"0""1""2""3""4""5""6""7""8""9""不亮""A""-";***************************************
8、*************;*延时程序(1ms)*;