初学者:y一个显示程序,请大家帮我找回学汇编的信心!,
各位,下面是我编的一个试验程序,MCU用at89c51,目的是扫描显示两只数管,第一只固定显示
0,第二位随定时器变化,时间到加1,到9复0,不断循环。但是,我试了上百次,化了几个晚上,
均达不到目的,无法使第一位随定时器变化,但只要将定时器部分程序封住或不启动定时器,显
示子程序可以显出不变的显示缓冲区内容。请各位帮忙查错,谢谢。
我自已实在找不出错在哪里!!,再不成功,我就对学汇编失出信心了!!
注:数码管各段接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
发表时间:2002年3月8日22:52:00