📄 urm37b.asm
字号:
; urm37 超声波传感器测试程序
$MOD51
ORG 0000H
LJMP 0003H;
MOV P0,#0ffH;
MOV P1,#0ffH;
mov p2,#0ffh;
mov p3,#0ffh;
;/***** init data ***********/
;/*******system test******/
; 系统测试
mov p0,#01000001b;
mov p2,#11111110b;
lcall delay0;
mov p0,#01000010b;
mov p2,#11111101b;
lcall delay0;
mov p0,#01000011b;
mov p2,#11111011b;
lcall delay0;
;************************
; p3.3=SDA p3.2=SCL
;********************;
;*****主测试程序*******
read_ultra: ;读超声波数据,送入p0 p2口
lcall IIC_START; 启动信号
mov a,#10010110b; 发送地址150
lcall sendbyte;
lcall send9rw; 发送RW=1
lcall IIC_ACK; 读取返回应答信号
jb f0,read_ultra; 无应答信号,重发数据
lcall readbyte; 读16位超声波数据
mov p2,r2;
lcall readbyte;
mov p0,r2;
lcall delay0;
lcall delay0;
lcall delay0;
lcall delay0;
lcall delay0;
lcall delay0;
lcall delay0;
lcall delay0;
ljmp read_ultra;
;************************;
IIC_START: ;IIC启动信号
clr p3.2;
nop;
nop;
nop;
setb p3.3;
nop;
nop;
nop;
setb p3.2;
nop;
nop;
nop;
clr p3.3;
nop;
nop;
nop;
clr p3.2;
nop;
nop;
nop;
ret;
;************************;
IIC_ACK: ; 读取返回应答信号
setb p3.3 ; SDA 为输入线
setb p3.2 ; 使SDA上数据有效
nop;
nop;
nop;
nop;
nop;
nop;
clr f0; 预设 F0=0 标志位
mov c,p3.3; 输入SDA引脚状态
jnc cend; 应答正常,则F0=0
setb f0; 应答不正常,则F0=1
cend:
clr p3.2; 子程序结束,使SCL=0
ret;
;*************************;
sendbyte: ; 发送1 Byte 数据
mov r0,#08h; 8位数据长度送 r0
wlp:
rlc A;
mov p3.3,c; A中数据送SDA脚发送
lcall delay1;
setb p3.2; 同步脉冲SCL发送,SDA数据有效
lcall delay1;
clr p3.2;
djnz r0,wlp;
lcall delay1;
ret;
;*************************;
send9rw: ; 发送RW 1位
clr p3.2;
lcall delay1;
setb p3.3; SDA=1为接收数据
nop;
nop;
nop;
setb p3.2;
nop;
nop;
nop;
clr p3.2;
nop;
nop;
nop;
setb p3.3;
ret;
;*************************;
readbyte: ; 读1 Byte 数据
mov r0,#08h;
rlp:
setb p3.3; 置SDA为输入方式
setb p3.2; 使SDA数据有效
mov c,p3.3; 读入SDA引脚状态
mov a,r2;
rlc a;
mov r2,a; 读入数据放入A 和 R2
nop;
nop;
nop;
clr p3.2;
nop;
nop;
nop;
djnz r0,rlp;
ret;
;*************************;
;*****************************;
;延时子程序
delay1:mov r5,#03h;
pa4:
mov r6,#0fh;
pa3:nop;
djnz r6,pa3;
djnz r5,pa4;
ret;
delay0:mov r5,#0fFh;
PA2: mov r6,#0ffh;
pa1: NOP;
djnz r6,pa1;
DJNZ R5,PA2;
RET;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -