回 帖 发 新 帖 刷新版面

主题:中断的应用问题???


org 0100h
ajmp main
org 0003h
ajmp ZD
main:mov a,#01h
     mov p1,#00h
     mov r5,0ffh
     setb ea
     setb ex0
     setb it0
here: sjmp $
loop:mov p1,a
     rl a
     acall delay
     ajmp loop
delay:mov r4,#0ffh
delay1:djnz r4,delay1
       djnz r5,delay
       ret
ZD: mov p1,#0aah
     reti
end 
请问:中断执行完后,为什么不继续执行 loop呢???
那么中断执行完后,具体返回到什么地方??

回复列表 (共1个回复)

沙发

org  0100h        ;!!!——建议改成org 0000h
ajmp main

org  0003h        ;!!!你使用外部中断0?
ajmp ZD

                  ;建议增加org 0030h
main:mov   a,#01h
     mov   p1,#00h
     mov   r5,0ffh
     setb  ea
     setb  ex0
     setb  it0    ;???你其实好象用定时器0中断吧?
                  ;而你开始的程序定义的是外部中断0 
here:             ;标号没用处
     sjmp  $      ;!!!这是死循环,程序在此等待外部中断却永远得不到

loop:             ;这段程序,即使你确实改正成定时器中断,也永远不会被执行,想想为什么?
     mov   p1,a
     rl    a
     acall delay
     ajmp  loop
delay:
     mov   r4,#0ffh
delay1:
     djnz  r4,delay1
     djnz  r5,delay
     ret

ZD:  mov   p1,#0aah ;你的中断程序似乎永远只向P1口发0aah,状态不发生变化,似乎成了多余的啊:)
     reti
end

我来回复

您尚未登录,请登录后再回复。点此登录或注册