我自已实在找不出错在哪里!!,再不成功,我就对学汇编失出信心了!!
注:数码管各段接p2.0~p2.7,选位接p0.0,p0.1
org 0000h
ljmp start
org 001bh
ajmp time1
org 30h
start:
mov sp,#5fh
mov p2,#0ffh
mov p0,#0ffh
mov 5ah,#0 ;第一位显示缓冲地址,初始显示0
mov 5bh,#0 ;第二位显示缓冲地址,初始显示0
mov r0,5ah ;r0 指向显示缓冲首址
mov r1,#01b ; r1 先输出第一位位选
;
mov tmod,#00010000b ;设定定时器,并启动,开中断。
mov th1,#00h
mov tl1,#00h
setb ea
setb et1
setb tr1
loop: ;主程序
lcall disp ;调显示子程序,显示显示缓冲区内容
ajmp loop
time1: ;定时器1中断子程序
mov a,5ah
inc a
mov 5ah,a ;更改显示缓冲第一位内容,加1
cjne a,#10h,exit ;是否到10。
mov 5ah,#0 ;复位到0
exit:
mov th1,#00h ;重置定时常数。
mov tl1,#00h
reti
;显示子程序,扫描显示。
disp:
mov a,@r0
mov dptr,#disptab ;字形表首址
movc a,@a+dptr ;查表得字形
mov p2,a ;送段位
inc r0 ;下一位段位缓冲位地址
mov a,r1
mov p0,a ;送选位
lcall delay
rl a ;下一位选位
mov r1,a
cjne r1,#100b,disp ;两位显示完毕?
mov r1,#01b ;段位复位
mov r0,5ah ;选位复位
ret
;延时子程序
delay:
mov r7,#50
d1:mov r6,#50
d2:djnz r6,d2
djnz r7,d1
ret
disptab:db 28h,7eh,0a4h,64h,72h,61h,21h,7ch,20h,60h ;字形表
end