logo资料库

51单片机超声测距汇编.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
;***P1.0 口发射,P1.2 口接收,P0.0~P0.3 与 P0.4~P0.7 分别接 SN74LS47N 解码器的 A、B、C、 D 脚,再接到两位七段数码管 ;***************产生超声波发射所需的发射脉冲信号******************** 0RG 00H START: MOV A,#0FFH MOV P1,A 先写入“1” MOV TMOD,#02H TIMER0_LOAD: MOV TH0,#0F4H MOV TL0,#0F4H RESEND_PULSE: MOV R2,#40 所以设为 40 SEND_PAUSE: SETB TR0 TIMER0_CHECK: JNB TF0,TIMER0_CHECK CLR TR0 CLR TF0 CPL P1.0 DJNZ R2,SEND_PULSE ;ACC=0FFH ;P1.2 将作为输出口,需要 ;设置 Timer0 工作在模式 2 下 ;往 TH0 中载入计数初始值 ;往 TL0 中载入计数初始值 ;一个方波对应 2 个 Timer 延时, ;启动 Timer0 ;检测 Timer 溢出标志,当 TF0=1,跳出 ;关闭 Timer0 ;将 TF0 清零 ;将 TF0 取反 ;如果 R2 不为 0,跳到 SEND_PULSE 继续 ;***************等待回波信号时的计时功能******************** WAITECHO: ;等待回波信号 MOV TMOD,#12H TIMER1_LOAD: MOV TL1,#00H 得最大计时 MOV TH1,#00H SETB TR1 ECHO_CHECK: JB P1.2,RECORD 到达 JNB TF1,ECHO_CHECK CLR TR1 Timer1 CLR TF1 JMP RESEND_PULSE RECORD: CLR TR1 Timer1 CLR TF1 ;Timer1 模式 1,Timer0 模式 2 ;载入最小的计数初始值,以获 ;启动 Timer1 ;检测回波信号,如果 P1.2=1,回波 ;如果回波还没有到达,Timer1 继续计时 ;Timer1 计 时 完 成 , 关 闭 ;清 TF1 ;跳回 SEND_PULSE 重新发射超声波 ; 已 接 收 到 回 波 , 停 止 ;清 TF1
MOV 30H,TL1 MOV 31H,TH1 MOV R0,#00H MOV R1,#00H MOV SP,#50H CLR C 0 METER: 行比较 PUSH 30H 压入堆栈 MOV A,30H SUBB A,#0FAH 位 FAH 相减 MOV 30H,A MOV A,31H SUBB A,#16H 差高位 16H 相减 JC DECIMETER ;30H 存储计时的低位字节 ;31H 存储计时的高位字节 ;R0 记录的是 1 米的倍数,清 0 ;R1 记录的是 1/10 米的倍数,清 ;定义堆栈初始地址为 50H ;进位 CY 清 0 ;与一米的时间差 16FAH 进 ;先将 30H 上的时间差低位 ;时间差低位载入 ACC ;时间差低位与 1 米对应的时间差低 ;结果存回 30H ;时间差高位载入 ACC ;时间差高位与 1 米对应的时间 ;如果有借位,说明相减结果已经小 于 1 米,则跳到 DECIMETER 与 1/10 米的时间差进行比较 INC R0 MOV 31H,A JMP METER 比较 DECIMETER: 比较 POP 30H 位弹出到 30H DECIMETER_1: MOV A,30H SUBB A,#4CH 间差低位 4C 相减 MOV 30H,A MOV A,31H SUBB A,#02H 高位 02H 相减 JC DISPLAY 经小于 1/10 米,则时间差比较计算完成,跳到显示程序段 ;如果没有借位,米数增加 1 ;高位相减结果存回 31H ;继续与 1 米的时间差进行 ;与 1/10 米的时间差 024CH 进行 ;将堆栈中存储的时间差低 ;时间差低位载入 ACC 中 ;时间差低位与 1/10 米对应的时 ;结果存回 30H ;时间差高位载入 ACC ;时间差高位与 1/10 米的时间差 ;如果有借位,说明相减结果已 ;如果没有借位,1/10 米数 INC R1 增加 1 MOV 31H,A JMP DECIMETER_1 DISPLAY: MOV A,R0 ;高位相减结果存回 31H ;继续与 1/10 米的时间差进行比较 ;1 米的倍数载入 ACC
SWAP A ADD A,R1 MOV P0,A JMP START END ;ACC 中高、低位互换 ;ACC 与 R1 相加,得到显示数据 ;显示数据从 P0 口输出 ;循环
分享到:
收藏