sjmp $ 是死循环,常用于调试中断服务程序,用它来模拟主程序,等待中断信号,中断后可以运行中断服务程序。可以在这条指令前写指令,也可以在它后面写指令,但是要运行后面的指令,除非后面的指令有程序头而且在中断服务程序里面有跳转指令这样才会调用到。
中断有很多种,外中断,定时器中断和串行口中断
我写一个定时器中断的吧
定时器T0中断
ORG 0000H;复位后主程序入口地址
LJMP MAIN;长跳转到主程序
ORG 000BH;T0定时器中断入口地址
LJMP CTC0;长跳转到中断服务程序
ORG 100H;主程序地址
MAIN:
MOV TL0,#156;赋T0定时器初值
MOV TL1,#156;重装初值
MOV TMOD,#00000100B;设置T0运作在8位制动重装模式
SETB ET0;允许T0溢出中断
SETB EA;开中断
SETB TR0;启动T0
SJMP $;循环等待,模拟主程序等待中断
CTC0:;中断服务程序
CPL P1.0;将P1.0脚取反
RETI;返回中断点
上面的程序是使T0定时,每逢100个机器周期中断一次,没中断一次将P1.0取反,使P1.0产生周期是200us的方波
楼主可以看看我回答过的问题,很多是中断的
温馨提示:答案为网友推荐,仅供参考