单片机综合实验 - 02 | 中断与定时/计数器实验

Posted Neutionwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机综合实验 - 02 | 中断与定时/计数器实验相关的知识,希望对你有一定的参考价值。

一、实验目的和任务

1、掌握80C51单片机外部中断的初始化及中断服务子程序设计方法。

2、掌握80C51单片机定时器/计数器的程序控制方法。

二、实验原理简介

中断是指在突发事件到来时先中止当前正在进行的工作,转而去处理突发事件。待处理完成后,再返回到原先被中止的工作处,继续进行随后的工作。引起突发事件的来源称为中断源,中断源要求服务的请求称为中断请求,对中断请求提供的服务称为中断服务,中断管理系统处理事件的过程称为中断响应过程。80C51单片机至少包括5个中断源:

INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。(本实验用)

INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。

T0:定时器/计数器0中断,由T0计满回零引起。(本实验用)

T1:定时器/计数器l中断,由T1计满回零引起。

TI/RI:串口中断,串口完成一帧字符发送/接收后引起。

本实验对应的硬件电路与实验三相同(见图3.6.1)。P0口用于控制发光管L101~L108,口线输出0(低电平)时,对应的发光管点亮,口线输出1(高电平)时,对应的发光管熄灭。P3口的4根口线连接独立按键KX0~KX3,其中KX0对应外部中断0,进行KX0按键动作的时候可以触发外部中断。

注意:在做本实验时,须将拨码开关JUMP2置为接通状态(向左)。

 

三、实验内容和步骤

1、编写一段程序,用P0口作为控制端口,使实验箱上的LED轮流点亮(走马灯)。用外部中断0/KX0控制走马灯的暂停/继续。

   

		ORG   0000H
		LJMP  MAIN
		ORG   0003H
		LJMP  ZEX0
		ORG   0100H
MAIN:  MOV   SP,#60H
		SETB  IT0
		SETB  EX0
		SETB  EA
		MOV   A,#0FEH
		 MOV   R5,#00H
NEXT:   CJNE  R5,#00H,NEXT
		 MOV   P0,A
		 ACALL DELAY
		 RL    A
		 SJMP  NEXT
;延时子程序
DELAY:  MOV   R2,#3
DELAY2: MOV   R3,#200
DELAY3: MOV   R4,#200		
		 DJNZ  R4,$
		 DJNZ  R3,DELAY3
		 DJNZ  R2,DELAY2
		 RET
;外部中断0服务子程序
ZEX0:	 PUSH  ACC
		 SETB  RS0
		 MOV   R2,#2
		 ACALL DELAY2
		 CLR   RS0
		 JB    P3.2,EXIT
		 MOV   A,R5
		 XRL   A,#0FFH
		 MOV   R5,A
EXIT:   POP   ACC
		 CLR   IE0
		 RETI
  • 观察实验结果,解释如何实现走马灯的暂停和继续。
  • 比较电平触发和边沿触发时走马灯控制的难易程度。

 

答:  走马灯的暂停和继续是通过外部按下按键而使单片机触发外部中断0,此时会进入外部中断0服务子程序,然后通过异或操作指令来修改工作寄存器R5的值为FFH,使其在跳出外部中断0服务子程序之后在NEXT: CJNE  R5,#00H,NEXT这条程序中进入死循环,而无法执行程序下面的位左移操作。在控制走马灯时经过验证电平触发相比边沿触发要困难。

 

2、编写一段程序,用P0口作为控制端口,使实验箱的LED轮流点亮(走马灯)。用定时/计数器0控制走马灯切换速度。

  

	  ORG   0000H
   	  LJMP  MAIN
	  ORG   000BH
	  LJMP  ZIT0
	  ORG   0100H
MAIN: MOV   SP,#60H
	  MOV   TMOD,#01H
	  MOV   TH0,#3CH
	  MOV   TL0,#0B0H
	  MOV   R6,#1
	  MOV   R7,#0FEH
	  SETB  ET0
	  SETB  EA
	  SETB  TR0
	  SJMP  $
;定时中断0服务子程序
ZIT0: DJNZ  R6,ZRET
	  MOV   A,R7
	  MOV   P0,A
	  RL    A
	  MOV   R7,A
	  MOV   R6,#1
ZRET: MOV   TH0,#3CH
	  MOV   TL0,#0B0H
	  RETI
	  END
  • 修改R6=0或1时,观察走马灯的速度快慢。
  • ZRET处没有重置初值时的走马灯的速度与 ZRET处有重置初值时的走马灯的速度的比较。
  • R6=50时,改变T0的初值,设为最大、最小时,比较走马灯的速度。
  • 去掉R6的软件辅助延时,是否可以?速度怎样?

 

答:经过验证,R6=0时走马灯的速度慢,R6=1时走马灯的速度快,原因是在DJNZ  R6,ZRET这条程序中,R6=0时DJNZ的减一操作进行了255次,也就是装载了255次TH0和HL0的值,而R6=1时只执行了1次。ZRET处没有重置初值时的走马灯的速度相比有重置初值时要慢,原因是没有重置初值,那么初值为0。当R6=50时,T0的初值设为最大时走马灯的速度要比T0的初值设为最小时要快。不可以去掉R6的软件辅助延时,此时走马灯的速度快到人眼无法识别。

 

以上是关于单片机综合实验 - 02 | 中断与定时/计数器实验的主要内容,如果未能解决你的问题,请参考以下文章

单片机原理及其应用——单片机定时器中断实验(八段数码管依次显示0~9数字)

蓝桥杯单片机定时器与中断秒表实验+Proteus仿真

单片机综合实验 - 05 | 简易电子钟设计

外部中断和计时器要点

FPGA(microblaze)怎么代替单片机实现串口通信,定时器/计数器,中断、系统时间同步?

51单片机定时器问题