使用汇编语言,要求:
外部中断1可以嵌套外部中断0
没有中断时,8个LED发光二极管以0.1s的速度闪烁。
有外部中断0时,8个LED发光二极管以0.1s的速度流水点亮。(中断子程序0)
有外部中断1时,会打断外部中断0,8个LED发光二极管会常亮10秒(中断子程序1)
允许外部中断0和外部中断1,外部中断触发方式设置(IT0,IT1),中断入口设置,设置中断优先级。
程序段:
org 0000h
jmp Start
ORG 0003H
JMP INT00
ORG 0013H
JMP INT11
ORG 0100H
Start:
MOV SP,#60H
SETB EA
SETB EX0
SETB EX1
ClR IT0
CLR IT1
SETB PX1
CLR A
Loop:
CPL A
MOV P0,A
LCALL DELAY
JMP Loop
DELAY:
MOV R6,#200
D1:
MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
;----中断子程序0程序示例------
INT00:
MOV R1,#9
MOV A,#0ffH
LOOP1:
MOV P0,A
LCALL DELAY
SETB C
RLC A
DJNZ R1,LOOP1
RETI
;----中断子程序1----
INT11:
MOV A,#00H
Mov P0,A
MOV R1,#9
LOOP1:
LCALL DELAY
DJNZ R1,LOOP1
RETI
注释:
1.org:汇编起始地址命令
org伪指令规定程序存放的起始地址。如果不用org,则汇编得到的目标程序将从0000H地址开始。
例如:
ORG 2000H
Start:Mov A,#00H
即规定标号START代表从地址2000H开始存放程序。
2. 中断允许寄存器IE
3.TCON寄存器:IT1,IT0选择外部中断请求是什么方式。
4.流水灯点亮
INT00:
MOV R1,#9
MOV A,#0ffH
LOOP1:
MOV P0,A
LCALL DELAY
SETB C
RLC A
DJNZ R1,LOOP1
RETI
;1111 1111
;1111 1110
;1111 1100
5.我不知道DELAY可以延时多久,所以我不知道R1应该置多少。
;----中断子程序1----
;需要常亮10秒
INT11:
MOV A,#00H
Mov P0,A
;全亮
MOV R1,#9
;循环10秒(这里R1该置多少?)
LOOP1:
LCALL DELAY
DJNZ R1,LOOP1
RETI
6.关于外部中断1触发方式设置不同的方式,带来的影响?
IT1=0,电平触发方式
IT1=1,跳沿触发方式
???
学习这篇文章:
(2条消息) 电平触发和边沿触发的区别_下降沿触发_Pilgrim2017的博客-CSDN博客
电平触发:高或低电平保持的时间内触发
边沿触发:由高到低或由低到高这一瞬间触发
在数字电平变化的电压上升沿或下降沿到一定阈值时就产生触发,即边沿触发。
当电压达到数字电平的高或低电压一段时间后(一般是最小脉冲宽度的三分之一),才产生触发是电平触发。
边沿触发的话,电平保持多久都只产生一次。
电平触发的话,只要一直保持对应的电平,就会不断触发。
比如:按下开关,边沿触发的话,应该只会触发一次中断。
而电平触发的话,会不断响应。(个人理解,不知道对不对)