我的程序是这样的
disbuf0 equ 30h
disbuf1 equ 31h
disbuf2 equ 32h
disbuf3 equ 33h
second equ 40h
mind equ 41h
org 0000h
ajmp main
org 000bh
ajmp intert0
main:
mov sp,#70h
mov r2,#0
mov r5,#0
call initt0
loop:
call disp
call delay
ajmp loop
initt0:
mov a,tmod
anl a,#0f0h
orl a,#01h
mov tmod,a
mov tl0,#low(-20000)
mov th0,#high(-20000)
setb et0
setb ea
setb tr0
ret
disp:
mov dptr,#distab
mov a,#disbuf0
add a,r5
mov r0,a
mov a,@r0
movc a,@a+dptr
mov p2,-1
mov p0,a
mov dptr,#seattab
mov a,r5
movc a,@a+dptr
mov p2,a
inc r5
cjne r5,#4,dispend
mov r5,#0
dispend:
ret
intert0:
push acc
push psw
inc r2
cjne r2,#50,next
mov r2,#0
inc second
mov a,second
call hex2bcd
mov disbuf1,a
mov disbuf0,b
cjne second,#60,next
mov second,#0
mov disbuf0,#0
mov disbuf1,#0
inc mind
mov a,mind
call hex2bcd
mov disbuf2,b
mov disbuf3,a
cjne mind,#60,next
mov mind,#0
mov disbuf2,#0
mov disbuf3,#0
next:
mov tl0,#low(-20000)
mov th0,#high(-20000)
pop psw
pop acc
reti
hex2bcd:
mov b,#10
div ab
ret
delay:
mov r7,#10
ll1: mov r6,#-1
djnz r6,$
djnz r7,ll1
ret
distab: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
seattab: db 0feh,0fdh,0fbh,0f7h
end
"cjne second,#60,next
cjne mind,#60,next"
会报告
"REGISTER OPERAND EXPECTED"错误。
而前边的
"cjne r2,#50,next"不报错。
"REGISTER OPERAND EXPECTED"
的意思是需要一个寄存器作为操作对象。
你的正确的语句里r2是寄存器,
错误的语句里,second,mind是变量。
所以,cjne指令操作寄存器而不是变量。
把second,mind先赋值给r2(或别的?)应该可以解决这个错误。
cjne a,#60,next