单片机得一小段程序

来源:百度知道 编辑:UC知道 时间:2024/05/16 15:52:06
单片机对外部脉冲进行记数的其中一小段程序:......................LCALL PTDS..............
PTDS:MOV R1,A
ACALL PTDS1
MOV A,R1
SWAP A
PTDS1:ANL A,#0FH
MOV @R0,A
INC R0
RET .................
其中R0里面是79H,A里面应该是个多位的十进制数,我看不懂这个程序,不知道多位十进制放到缓冲区79H是这么一个结果;还有那个子程序PTDS1插在那里,等返回在向下运行的时候会再运行吗? 请详细分析下。
缓冲区不是直能放1位数吗,一个LED对应一个缓冲区,它放4位数怎么放的下啊。

程序先是调用“LCALL PTDS”,跳到 “PTDS:”,“MOV R1,A”把累加器的数给R1,然后又是调用“ACALL PTDS1”,跳转到“PTDS1:”,“ANL A,#0FH”这是与操作,把A的高四位清零,低四位没有变化;把累加器A的数放到R0地址,也就是79H单元“MOV @R0,A”;“INC R0”把地址加1,也就是指向7AH单元,然后返回; 返回后又把R1的数给累加器 A,也就是和调用“PTDS1:”前的内容是一样的,“SWAP A”是把A里面的数高四位和低四位交换。
调换后接着运行“PTDS1:ANL A,#0FH”,高四位清零,再把A中的数放到R0地址,注意的是R0现在指向的是 7AH 单元。这样就完成一次计数,计数完后R0地址又加 1 ,指向 7BH 单元,等待下一次计数。

程序分析就是这样,也就是A中的数低四位放到 79H 单元,高四位放到 7AH 单元。
什么一个缓冲区啊?那是一个单元,比如说79H单元,里面就可以放 8 位二进制数,也许你会问“既然一个单元可以放8位数,为什么要分开高低四位来放啊?”因为那是BCD码的一种表示法,会产生非BCD码,所以要分开来。

这是一个拆分子程序,把A中的数拆成两部分,低四位放到了79H里面,高四位变成低四位后放到了7AH里面。还有那个子程序PTDS1插在那里,等返回在向下运行的时候会再运行的,借用他的RET,一块返回去。