ORG 0000H
LJMP START
ORG 0003H
LJMP PINT0
ORG 000BH
LJMP INTT0
ORG 001BH
LJMP INTT1
ORG 0030H
START: MOV SP, #4FH
MOV R0,#30H ;;30~35H为显示数据存放单元(30为最高位)
MOV R7,#0AH
MOV 20H,#00H ;标志位
CLEARDISP:MOV @R0,#00H
INC R0
DJNZ R7, CLEARDISP
mov tcon,#01h
MOV TMOD, #21H ; ;T1为8位自动重装模式,T0为16位定时器
MOV TH0, #00H ; ;65ms初值
MOV TL0, #00H
MOV TH1, #0F2H ;;40KHz初值
MOV TL1, #0F2H
MOV P0, #0FFH
MOV P1, #0FFH
MOV P2, #0FFH
MOV P3, #0FFH
mov 36h,#20h ;显示位控
mov 37h,#30h
mov 38h,#40h
mov 39h,#50h
mov 3ah,#60h
MOV R4, #10h ; ;超声波脉冲个数控制(为赋值的一半)
SETB PX0
SETB ET0
SETB EA
clr 20H
SETB TR0 ; ;开启测距定时器
START1: LCALL DISPLAY
JNB 20H, START1 ; ;收到反射信号时标志位为1
CLR EA
LCALL WORK ; ;计算距离子程序
SETB EA
CLR 20H
SETB TR0 ; ;重新开启测距定时器
LOOP: LCALL DISPLAY
DJNZ R5, LOOP
SJMP START1
;*中断程序*
;;T0中断,65ms中断一次
INTT0: CLR EA
CLR TR0
MOV TH0,#00H
MOV TL0,#00H
SETB ET1
SETB EA
SETB TR0 ; ;启动计时器T0,用以计算超声波来回时间
SETB TR1 ; ;开启发超声波用定时器T1
RETI
;;T1中断,发超声波用
INTT1:
CPL P1.0
DJNZ R4,RETIOUT
CLR TR1 ; ;超声波发送完毕,关T1
CLR ET1
MOV R4,#10h ;发送8个,约200us(最小距离)后开启外部中断,
SETB EX0 ; ;开启接收回波中断
RETIOUT: RETI
;;外中断0,收到回波时进入
PINT0:
CLR TR0 ; ;关计数器
CLR TR1
clr et1
CLR ea
clr ex0
MOV 40H,TL0 ; ;将计数值移入处理单元
MOV 41H,TH0
SETB 20H
RETI
哎~~~~~~~~~~~
自己顶自己一下
命苦呀
利用顶定时器啊、、直接可以的呀。。在驱动一下。就产生了啊
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |