51单片机 外部中断(汇编语言)问题
刚学到外部中断这一块儿,书上说实现中断要开总中断EA,外外部中断,然后设置外部中断的触发方式比如一般要有这三句:SETBEA;开总中断SETBEX0;开INT0中断CLR...
刚学到外部中断这一块儿,书上说实现中断要开总中断EA,外外部中断,然后设置外部中断的触发方式
比如一般要有这三句:
SETB EA ;开总中断
SETB EX0 ;开INT0中断
CLR IT0 ; 设置INT0为电平触发
但是书上一个例子的代码中却没有这样的设置。。。
这是为什么?
该例子完整代码如下:
ORG 0000H
LJMP START
ORG 0003H
LJMP INT_0
ORG 0100H
;主函数体,流水灯0到7依次点亮
;然后7到0依次点亮,每次点亮延时一秒
START: MOV A,#00H
MOV R0,#8
SETB C
;P1.0到P1.7的二极管依次点亮
LOOP1: RLC A
MOV P1,A
ACALL DELAY
DJNZ R0,LOOP1
MOV A,#00H
MOV R0,#8
SETB C
;P1.7到P1.0的二极管依次点亮
LOOP2: RRC A
MOV P1,A
ACALL DELAY
DJNZ R0,LOOP2
AJMP START
;延时1秒子程序
DELAY: MOV R5,#200
D1: MOV R6,#20
D2: MOV R7,#123
NOP
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
;中断子程序
INT_0: PUSH PSW
PUSH ACC
MOV A,#00H
MOV R2,#6
L4: MOV P1,A
LCALL DELAY
CPL A
DJNZ R2,L4
POP ACC
POP PSW
RETI
END
我的问题不在于这段代码执行的功能,我只是不明白为什么没有设置关于总中断(EA)和相关外部中断(EX0)的语句 展开
比如一般要有这三句:
SETB EA ;开总中断
SETB EX0 ;开INT0中断
CLR IT0 ; 设置INT0为电平触发
但是书上一个例子的代码中却没有这样的设置。。。
这是为什么?
该例子完整代码如下:
ORG 0000H
LJMP START
ORG 0003H
LJMP INT_0
ORG 0100H
;主函数体,流水灯0到7依次点亮
;然后7到0依次点亮,每次点亮延时一秒
START: MOV A,#00H
MOV R0,#8
SETB C
;P1.0到P1.7的二极管依次点亮
LOOP1: RLC A
MOV P1,A
ACALL DELAY
DJNZ R0,LOOP1
MOV A,#00H
MOV R0,#8
SETB C
;P1.7到P1.0的二极管依次点亮
LOOP2: RRC A
MOV P1,A
ACALL DELAY
DJNZ R0,LOOP2
AJMP START
;延时1秒子程序
DELAY: MOV R5,#200
D1: MOV R6,#20
D2: MOV R7,#123
NOP
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
;中断子程序
INT_0: PUSH PSW
PUSH ACC
MOV A,#00H
MOV R2,#6
L4: MOV P1,A
LCALL DELAY
CPL A
DJNZ R2,L4
POP ACC
POP PSW
RETI
END
我的问题不在于这段代码执行的功能,我只是不明白为什么没有设置关于总中断(EA)和相关外部中断(EX0)的语句 展开
展开全部
主程序是:流水灯0到7依次点亮、流水册拆皮灯7到0依次点亮,反复循环。
外部中断程序是:灯全亮州差、全灭3次。
但是,程序没有开中断的指令,中断程序是不会执行的。
START: ;在下面添加:
SETB EA ;开总中断.
SETB EX0 ;开INT0中断.
CLR IT0 ; 设置INT0为电平御纯触发.
MOV A,#00H
……
外部中断就可以实现了。
外部中断程序是:灯全亮州差、全灭3次。
但是,程序没有开中断的指令,中断程序是不会执行的。
START: ;在下面添加:
SETB EA ;开总中断.
SETB EX0 ;开INT0中断.
CLR IT0 ; 设置INT0为电平御纯触发.
MOV A,#00H
……
外部中断就可以实现了。
更多追问追答
追问
就是说,书上的代码有错误?
追答
有可能的。
缺少了这两行:
SETB EA ;开总中断.
SETB EX0 ;开INT0中断.
中断处理程序,肯定是不会执行的。
当然,使用字节传送指令,也可开中断:
MOV IE, #81H ;开总中断 同时 开INT0中断.
这一行,楼主给出的程序里面,也没有,所以,中断,就不可能发生。
展开全部
程序不完整,51复位后默认是关闭中断的,不打开中断则不会进入中断服务程序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不尘改要太相信消游书上是知识,我拿兄销在很多是书上都看见过错误。
SETB EA ;开总中断
SETB EX0 ;开INT0中断
是必须有的,没有不能中断。
SETB EA ;开总中断
SETB EX0 ;开INT0中断
是必须有的,没有不能中断。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在去看看书上,EA这位是在那个寄拆档存器里面厅陵的,别忘了单片机的寻址方式,旅伏乱有的时候有些位的默认状态,和寄存器的默认状态,这些都很重要。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LJMP INT_0
INT—梁顷漏乎唯0 里面橡烂应该就有你要的东西 一般是初始化程序
INT—梁顷漏乎唯0 里面橡烂应该就有你要的东西 一般是初始化程序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询