【汇编】深度理解中断

要求:利用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

转载于:https://www.cnblogs.com/osmondwang/p/7976094.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值