2000分跪求,帮忙读一下单片机程序,一次只能给100分,如果解决 ,可给20次分

sparc2 2004-05-06 11:27:33
本人最近遇到一棘手问题,下面一段代码是一个位移传感器中单片机的代码

此位移传感器可以通过RS485接口读取数据,但由于编写指令的人员已不在

现在不知道通过什么命令读取其中的数据,所以需要分析一下其中单片机的源代码

小弟对单片机没有什么了解,所以想请哪一位大侠出手相救,只要能看出通过什么指令可以由RS485接口取得当前采集的数据即可

小弟跪谢,十万火急



代码:
$MOD51 org 0000h ljmp l_0018
djnz 27h,l_0017
mov 27h,#04h
inc 24h
inc 25h
inc 26h
reti
l_0018:
mov sp,#5fh
lcall l_0207
mov r4,#0ch
lcall l_01fb
mov r0,#7fh
l_0025:
mov @r0,#00h
djnz r0,l_0025
mov p0,#0ffh
mov r2,#18h
mov 23h,#80h
mov p2,23h
l_0034:
anl p1,#0f8h
orl p1,#07h
inc 23h
mov p2,23h
l_003f:
djnz r2,l_0034
mov pcon,#00h
mov scon,#0d8h
mov th1,#0f4h
mov tmod,#21h
mov tcon,#55h
mov ie,#0a2h
mov p0,#0feh
mov p2,#94h
clr p1.2
setb p1.2
mov p2,#90h
clr p1.2
setb p1.2
mov p2,#8ch
clr p1.0
setb p1.0
mov p2,#88h
clr p1.0
setb p1.0
mov p2,#84h
clr p1.1
setb p1.1
mov p2,#80h
clr p1.1
setb p1.1
mov 0c8h,#00h
mov 0cbh,#0e0h
mov 0cah,#00h
l_0089:
mov a,#31h
acall l_0188
jc l_009c
mov r0,#38h
acall l_017d
l_0093:
acall l_01cd
mov r7,#97h
mov b,#0fbh
acall l_015f
l_009c:
mov a,#32h
acall l_0188
jc l_00ed
mov r0,#3dh
acall l_017d
acall l_01cd
mov r7,#8fh
mov b,#0feh
acall l_015f
mov a,3ch
add a,41h
da a
mov c,acc.4
anl a,#0fh
mov 36h,a
mov a,3bh
addc a,40h
da a
mov c,acc.4
anl a,#0fh
mov 35h,a
mov a,3ah
addc a,3fh
da a
mov c,acc.4
anl a,#0fh
mov 34h,a
mov a,39h
addc a,3eh
da a
mov c,acc.4
anl a,#0fh
mov 33h,a
mov a,38h
addc a,3dh
da a
anl a,#0fh
mov 32h,a
acall l_01cd
mov r7,#87h
mov b,#0fdh
acall l_015f
mov a,#34h
acall l_0188
jc l_0102
acall l_01cd
mov r0,#42h
mov a,#24h
acall l_012e
l_00fb:
mov r7,#93h
mov b,#0fbh
acall l_015f
mov a,#35h
acall l_0188
jc l_0117
acall l_01cd
mov r0,#46h
mov a,#25h
acall l_012e
mov r7,#8bh
mov b,#0feh
acall l_015f
mov a,#36h
acall l_0188
jc l_012c
acall l_01cd
mov r0,#4ah
mov a,#26h
acall l_012e
mov r7,#83h
mov b,#0fdh
acall l_015f
ajmp l_0089
l_012e:
mov b,#00h
l_0131:
push acc
mov r2,#04h
mov r1,#32h
l_0137:
mov a,@r1
xch a,@r0
xrl a,@r0
orl b,a
inc r0
inc r1
djnz r2,l_0137
pop acc
mov r0,a
mov a,b
jz l_014a
mov @r0,#00h
ret
mov a,#1eh
clr c
subb a,@r0
jnc l_015e
mov @r0,#1fh
mov 32h,#0ah
mov 33h,#0ah
mov 34h,#0ah
mov 35h,#0ah
ret
mov r2,#04h
mov r0,#32h
l_0163:
mov a,@r0
acall l_01ec
mov p0,a
inc r0
mov a,r7
mov p2,a
dec r7
clr p1.5
mov a,b
anl p1,a setb p1.5 orl p1,#07h
djnz r2,l_0163
ret
mov r1,#32h
mov r2,#05h
mov a,@r1
mov @r0,a
inc r0
inc r1
djnz r2,l_0181
ret
mov b,a
setb p1.7
mov r0,#30h
mov r4,#08h
mov sbuf,#43h
jnb ti,l_0193
clr ti
mov sbuf,a
jnb ti,l_019a
clr ti
clr p1.7
mov r2,#10h
mov r3,#00h
l_01a5:
jb ri,l_01ae
djnz r3,l_01a5
djnz r2,l_01a5
l_01ac:
setb c
ret
clr ri
mov a,sbuf
mov @r0,a
inc r0
djnz r4,l_01a1
mov r0,#30h
cjne @r0,#41h,l_01ac
mov a,31h
xrl a,b
jnz l_01ac
mov r2,#07h
clr a
add a,@r0
inc r0
djnz r2,l_01c4
xrl a,@r0
jnz l_01ac
clr c
ret
l_01cd:
anl 35h,#0fh
mov r2,#05h
mov r0,#36h
mov a,#05h
clr c
l_01d7:
addc a,@r0
da a
mov c,acc.4
anl a,#0fh
mov @r0,a
clr a
dec r0
djnz r2,l_01d7
ret
clr p1.7
mov a,36h
add a,#05h
da a
mov c,acc.4
inc a
movc a,@a+pc
ret
ajmp l_049f
mul ab
mov 9ah,@r0
clr 0c0h.
mov p0,r7
anl c,0f8h.
mov r6,a
clr p1.5
mov a,#01h
acall l_0226
mov a,r4
acall l_0226
setb p1.5
ret
l_0207:
mov a,#06h
clr p1.5
acall l_0226
setb p1.5
ret
mov a,#05h
clr p1.5
acall l_0226
mov r3,#07h
setb p1.4 clr p1.4
djnz r3,l_0218
mov c,p1.3
setb p1.5
jc l_0210
ret
mov r3,#08h
l_0228:
rlc a
mov p1.3,c setb p1.4 clr p1.4
djnz r3,l_0228
retl_02f1:
l_0475:
l_049f:
END
...全文
34 9 点赞 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sparc2 2004-05-07
不好意思,现在如果给分的化,此贴就要结贴了,所以需要再等一下
  • 打赏
  • 举报
回复
sparc2 2004-05-07
非常感谢各位抽空来为鄙人解决此问题,不管问题是否可以解决,在这里首先表示由衷的感谢,由于一个帖子最多只能给100分,所以这里先给每一位兄弟一点分值,如果问题解决,再加分值。
  • 打赏
  • 举报
回复
oral_expert 2004-05-07
以上只是我个人的看法,欢迎大家讨论。
搂主:我已向你发送了EMAIL。
  • 打赏
  • 举报
回复
oral_expert 2004-05-07
我花了两个多小时的时间,几乎把整个反汇编文件的所有语句标上了行号,看来看去,认为你的这段代码中就没有向外输出当前测量值的功能,它与外界的通讯,看上去只是请求一些命令而已。大概的通讯过程如下:
(不知你的硬件使用多少MHZ的晶振,所以也不知道波特率)
此机器先向外发出#43H,即ACSII的“c”,然后发送“#31H”,然后等待通讯对象返回信息。收到8个字节的信息后,先检查第一个字节是否是“#41H”即ASCII的“a”,然后检查第二个字节是否是本机先前发出的第二个信息即“#31H”,然后把前7个字节的和与最后一个字节的内容比较(估计是在做校验),如果相同(校验通过)则表示通讯成功,否则进行下一项目的通讯。
第二项通讯和第一项大体相同,唯一不同的是发送的第二字节是“#32H”即ASCII码的2,第三、第四、。。。。。都如此,除了没有发送“#33”外,一直发送至“#36H”,如此循环。
在每次通讯成功后,进行了一些处理,然后进行下项通讯。
从程序看不出机器将自身存储的或外部的数据大批量通过串口向外发送。所以推断没有将测量结果送道上位机的功能。
另外,从程序看出,应该是将P3.2脚作为脉冲测量脚,每四个脉冲将24H,25H,26H的内容加一,循环不停。
  • 打赏
  • 举报
回复
sparc2 2004-05-06
结果可以发邮件给我(W_Y_G@263.NET),这样我可以比较快的得知,谢谢!!!
  • 打赏
  • 举报
回复
sparc2 2004-05-06
To: zhufigo(zuma)
老兄,能不能说的清楚一点,我需要写什么指令才能取得当前显示值,小弟对汇编一窍不通,谢了
  • 打赏
  • 举报
回复
sparc2 2004-05-06
具体情况介绍

这个单片机是一个位移显示仪表的,输入信号为一个编码器的脉冲信号,仪表可以将脉冲信号显示

仪表有一个输出功能为RS485接口,可以读取当前显示的脉冲值,使用RS485时,一般情况下需要先写入一个指令

然后会得到一个返回值,由于当初写这个单片机的人已经走了,没有人知道需要写什么指令才能读取到显示的值。

可能会有其他指令,如设置量程和设置其实值等等,但是现在只需要一个读取功能就可以了。
  • 打赏
  • 举报
回复
tglong 2004-05-06
程序反汇编有问题,程序中"mov a,sbuf"没有跳入语句,你知道接收了些什么数据,又怎么分析指令,
可联系:
我的Email:studyc51@163.com,
  • 打赏
  • 举报
回复
zhufigo 2004-05-06
根sbuf 有关的语句就是读写串口的啊
mov sbuf,#43h
mov sbuf,a

mov a,sbuf
就这三句
  • 打赏
  • 举报
回复
相关推荐
发帖
单片机/工控
加入

2.6w+

社区成员

硬件/嵌入开发 单片机/工控
申请成为版主
帖子事件
创建了帖子
2004-05-06 11:27
社区公告
暂无公告