码迷,mamicode.com
首页 > 其他好文 > 详细

【汇编】深度理解中断

时间:2017-12-04 13:22:05      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:溢出   style   设置   控制   第一条   main函数   中断   编写程序   寻址   

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

【汇编】深度理解中断

标签:溢出   style   设置   控制   第一条   main函数   中断   编写程序   寻址   

原文地址:http://www.cnblogs.com/osmondwang/p/7976094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!