求一下51单片机汇编程序的解释:不太明确这段程序功能,希望哪位大侠指点下!谢谢!

;p3口接段码a,b,c,d,e,f,g, p2.5-7口接位码,选哪个数码管显示
a_bit equ 20h ;个位数存放处
b_bit equ 21h ;十位数存放处
org 0000H
SJMP main
ORG 0030H
main:
mov p0,#0ffh ;初始化p0口
loop: mov a,p0 ;将a中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b

mov dptr,#numtab ;指定查表启始地址
mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p3,a
mov p2,#00h
acall d1ms

mov dptr,#numtab ;指定查表启始地址
mov a,b_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p3,a
mov p2,#20h
acall d1ms
SJMP loop
d1ms:
MOV R2,#200
DJNZ R2,$
RET
numtab: DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH
end
我这程序时24秒计时器的一部分汇编程序!计数功能不包括!我看了觉得是单片机配置数码管显示的,然后把fpga送过来的段码和位码译码显示出来。不知道是不是这样理解的!

这是一个 8位2进制数转换成10进制显示的程序,或者叫计算器。

改变的地方是为了仿真成功。低位在右。 1101B 转换过来正好是13

;p3口接段码a,b,c,d,e,f,g,  p2.5-7口接位码,选哪个数码管显示

 a_bit equ 20h         ;个位数存放处

 b_bit equ 21h         ;十位数存放处

  org   0000H

    SJMP  main

    ORG   0030H

main: 

 mov p0,#0ffh ;初始化p0口

loop: mov a,p0 ;将a中的十六进制数转换成10进制

        mov b,#10   ;10进制/10=10进制

        div ab

        mov b_bit,a ;十位在a

        mov a_bit,b ;个位在b

 mov dptr,#numtab ;指定查表启始地址

 mov a,a_bit ;取个位数

 MOVC A,@A+DPTR ;查个位数的7段代码

   mov p3,a

  acall d1ms

 mov p2,#40h     ;显示个位数

  acall d1ms

mov p2,#0ffh   ;屏蔽所有显示

acall d1ms

 mov dptr,#numtab ;指定查表启始地址

 mov a,b_bit ;取十位数

 MOVC A,@A+DPTR ;查十位数的7段代码

   mov p3,a

call d1ms

 mov p2,#80h ;显示十位数

acall d1ms

 mov p2,#0ffh ;屏蔽所有显示

 SJMP  loop

d1ms: 

 MOV R2,#200

 DJNZ R2,$

nop

 RET

numtab: DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH

end 

你看这句, loop: mov a,p0 ;将a中的十六进制数转换成10进制

把p0 送A 才开始的转换 。 这可不是我加的。不知你说的fpga在哪里。当然把p0改成fpga就是你说的那个功能了。

总之 理解成16进制转换成2位10进制数再显示就对了,  至于16进制数是哪来的 就全看在那用了吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-09
给个电路图吧,也说明数码管是共阳的还是共阴的,就这样看的话只能看出求个位数并显示出来啊
第2个回答  2011-01-10
两位数码管显示程序
相似回答