中断嵌套实验

使用汇编语言,要求:

外部中断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

中断嵌套实验_第1张图片

 3.TCON寄存器:IT1,IT0选择外部中断请求是什么方式。

中断嵌套实验_第2张图片

 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博客

 电平触发:高或低电平保持的时间内触发

边沿触发:由高到低或由低到高这一瞬间触发

在数字电平变化的电压上升沿或下降沿到一定阈值时就产生触发,即边沿触发。

当电压达到数字电平的高或低电压一段时间后(一般是最小脉冲宽度的三分之一),才产生触发是电平触发。

边沿触发的话,电平保持多久都只产生一次。

电平触发的话,只要一直保持对应的电平,就会不断触发。

比如:按下开关,边沿触发的话,应该只会触发一次中断。

而电平触发的话,会不断响应。(个人理解,不知道对不对)

你可能感兴趣的:(单片机,嵌入式硬件)