单片机定时/计数器T1定时50ms,在P1.0引脚上产生周期为50ms的方波信号,晶振频率为12MHZ,请编写程序。

下面是我老师给的答案:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP DVT0
ORG 0030H
MAIN:MOV TMOD,#10H
MOV TL1,#58H
MOV TH1,#9EH
MOV IE,#88H
CLR P1.1
SETB TR1
LOOP:SJMP LOOP
ORG 0050H
DVT0:MOV TL1,#58H
MOV TH1,#9EH
CPL P1.1
RETI
END
但我有几个问题:
1.题目明明说是在P1.0引脚上产生的信号,为何程序里却是P1.1而不是P1.0?
2.指令LOOP:SJMP LOOP与SJMP $有什么区别?
3.程序执行顺序问题:当产生中断信号时,指令LOOP:SJMP LOOP的下一个该执行指令LJMP DVTO还是执行指令DVT0:MOV TL1,#58H呢?
4.执行指令RETI之后该执行回哪个指令呢?

1.接口位置是不对,应该是笔误。

2.$是代表当前地址的意思,SJMP $就是转移到自身的地址;SJMP LOOP的LOOP,如果确实放在SJMP之前,这两条指令在作用就是完全相同的。

3.当不停的执行SJMP LOOP,如果产生中断,CPU会保存下条指令的地址,其实就是SJMP本身的地址;然后自动转移到000BH去取指令,即执行LJMP DVTO指令。

4.RETI当然是返回到原先保存的地址,即:SJMP本身的地址。
温馨提示:答案为网友推荐,仅供参考
相似回答