汇编深度理解中断
Posted osmondwang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编深度理解中断相关的知识,希望对你有一定的参考价值。
要求:利用T0的工作模式1产生1ms定时,在P1.0引脚输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。要求如下:分别采用查询方式和中断方式编写程序。
一、中断模式
CPL P1.0 控制翻转
设置初值。
中断:
ORG 0000H ;伪指令
LJMP MAIN ;这是实际上的第一条指令,使用长转移
ORG 000BH ;WEB中断用0003H,定时器使用000BH
LJMP INSERT
ORG 0100H
MAIN:MOV TMOD,#01H
;接下来启动定时器
SETB TR0
SETB ET0 ;小开关
SETB EA ;总开关
MOV TH0,#0FCH ;如果当成数字,那么就要加0;如果是字母,就不用加0
MOV TL0,#18H ;初始化也放在MAIN函数里
SJMP $ ;死循环,反复执行这段指令。其实这个指令是可以被代替的,用其他正常运行的代码代替
ORG 0200H
INSERT:
;模式0和模式1,初值需要再设置一次,之所以能进入INSERT,是因为计时器溢出,溢出后触碰到中断,所以在中断服务程序中还需要再赋值
MOV TH0,#0FCH
MOV TL0,#18H
CPL P1.0
RETI
明白这个处理顺序,就可以彻底理解中断了。代表执行的过程:ORG 0000H ==> ORG 0100H ==> ORG 000BH ==> ORG 0200H ==>RETI 返回到SJMP $
定时器存在MAIN里,不在中断子程序里。
PC是一个16位的计数器。用于存放和指示下一条要执行的指令的地址。寻址范围达64KB。PC有自动加1功能,以实现程序的顺序执行。PC没有地址,是不可寻址的,无法用指令对它进行读写。但在执行转移、调用、返回等指令时能自动改变其内容,以改变程序的执行顺序。
二、查询方式
(TF0=1,溢出。溢出就反转)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV TMOD,#01H
SETB TR0
LOOP3:MOV TH0,#0FCH
MOV TL0,#18H
LOOP1:JBC TF0,LOOP2 ;等于1符合条件转移,顺带着清零
SJMP LOOP1
LOOP2:CPL
SJMP LOOP3
以上是关于汇编深度理解中断的主要内容,如果未能解决你的问题,请参考以下文章