1、 南昌南昌大学大学实验实验报告报告 学生姓名:学号:专业班级:实验类型:验证 综合 设计 创新 实验日期:2018.05.29 实验成绩:实验实验四四 外中断实验外中断实验(一)实验目的(一)实验目的 1.掌握单片机外部中断原理;2.掌握数码管动态显示原理。(二)设计要求(二)设计要求 1.使用外部中断 0 和外部中断 1;2.在动态数码管上显示中断 0 次数,中断 1 用作次数清 0,数码管采用 74HC595 驱动。(三)实验原理(三)实验原理 1.1.中断中断 所谓中断是指程序执行过程中,允许外部或内部时间通过硬件打断程序的执行,使其转向为处理外部或内部事件的中断服务程序中去,完成中断服
2、务程序后,CPU 返回继续执行被打断的程序。如下图所示,一个完整的中断过程包括四个步骤:中断请求、中断响应、中断服务与中断返回。当中断请求源发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断处理程序处理中断服务请求。中断服务请求处理完后,再回到原来被中止的程序之处(断电),继续执行被中断的主程序。如果单片机没有终端系统,单片机的大量时间可能会浪费在是否有服务请求发生的查询操作上,即不论是否有服务请求发生,都必须去查询。因此,采用中断技术大大地提高了单片机的工作效率和 实时性。2.2.IAP15W4K58S4IAP15W4K58S4 单片机的中断请求单片机的中断
3、请求 IAP15W4K58S4 单片机的中断系统有 21 个中断请求源,2 个优先级,可实现二级中断服务嵌套。由 IE、IE2、INT_CLKO 等特殊功能寄存器控制 CPU 是否相应中断请求;由中断优先级高存器 IP、IP2安排各中断源的优先级;同优先级内 2 个以中断同时提出中断请求时,由内部的查询逻辑确定其响应次序。中断请求源中的外部中断外部中断 0 0(I INT0NT0)和外部中断外部中断 1 1(I INT1NT1)详述如下:(1)外部中断 0(INT0):中断请求信号由 P3.2 引脚输入。通过 IT0 来设置中断请求的触发方式。当 IT0 为“1”时,外部中断 0 为下降沿触发
4、当 IT0 为“0”时,无论是上升沿还是下降沿,都会引发外部中断 0。一旦输入信号有效,则置位 IE0 标志,向 CPU 申请中断。(2)外部中断 1(INT1):中断请求信号由 P3.3 引脚输入。通过 IT1 来设置中断请求的触发方式。当 IT1 为“1”时,外部中断 1 为下降沿触发;当 IT1 为“0”时,无论是上升沿还是下降沿,都会引发外部中断 1。一旦输入信号有效,则置位 E1 标志,向 CPU 申请中断。中断源是否有中断请求,是由中断请求标志来表示的。在 IAP15W4K58S4 单片机中,外部中断 0、外部中断 1 等请求源的中断请求标志分别由特殊功能寄存器特殊功能寄存器 T
5、 TCONCON 和 S SCONCON 控制,格式如下:(1)TCON 寄存器中的中断请求标志。TCON 为定时器 T0 与 T1 的控制寄存器,同时也锁存 T0 和T1 的溢出中断请求标志及外部中断 0 和外部中断 1 的中断请求标志等。格式如下图所示:D7 D6 D5 D4 D3 D2 D1 D0 TCON TF1 TR1 TF0 TR0 IR1 IT1 IE0 IT0 88H 位地址 8FH 8DH 8BH 8AH 89H 88H 与中断有关的各标志位功能如下:TF1:T1 的溢出中断请求标志。T1 被启动计数后,从初值做加 1 计数,计满溢出后由硬件置位 TFI,同时向 CPU 发出
6、中断请求,此标志一直保持到 CPU 响应中断后才由硬件自动清 0。也可由软件查询该标志,并由软件清 0。TF0:T0 的溢出中断请求标志。T0 被启动计数后,从初值做加 1 计数,计满溢出后由硬件置位 TF0,同时向 CPU 发出中断请求,此标志一直保持到 CPU 响应中断后才由硬件自动清 0。也可由软件查询该标志,并由软件清 0。IE1:外部中断 1 的中断请求标志。当 INT1(P3.3)引脚的输入信号满足中断触发要求时,置位 IE1,外部中断 1 向 CPU 申请中断。中断响应后中断请求标志自动清 0。IT1:外部中断 1(INT1)中断触发方式控制位。当(IT1)=1 时,外部中断 1
7、 为下降沿触发方式。在这种方式下,若 CPU 检测到 INT 1 出现下降沿信号,则认为有中断申请,随即使 IE1 标志置位。中断响应后中断请求标志会自动清 0,无须做其他处理。当(T1)=0 时,外部中断 1 为上升沿触发和下降沿触发触发方式。在这种方式下,无论 CPU 检测到 INT1 引脚出现下降沿信号还是上升沿信号,都认为有中断申请,随即使 IE1 标志置位。中断响应后中断请求标志会自动清 0,无须做其他处理。IE0:外部中断 0 的中断请求标志。当 INT0(P3.2)引脚的输入信号满足中断触发要求时,置位 IE0,外部中断 0 向 CPU 申请中断。中断响应后中断请求标志自动清 0
8、IT0:外部中断 0 的中断触发方式控制位。当(IT0)=1 时,外部中断 1 为下降沿触发方式。在这种方式下,若 CPU 检测到 INT0(P3.2)出现下降沿信号,则认为有中断申请,随即使 IE0标志置位。中断响应后中断请求标志会自动清 0,无须做其他处理。当(IT0)=0 时,外部中断 0 为上升沿触发和下降沿触发触发方式。在这种方式下,无论 CPU 检测到 INT0(P3.2)引脚出现下降沿信号还是上升沿信号,都认为有中断申请,随即使 IE0 标志置位。中断响应后中断请求标志会自动清 0,无须做其他处理。(2)SCON 寄存器中的中断请求标志。SCON 是串行口控制寄存器,其低 2
9、位 TI 和 RI 锁存串行口1 的发送中断请求标志和接收中断请求标志格式如下:D7 D6 D5 D4 D3 D2 D1 D0 TCON TI RI 98H 位地址 99H 98H 中断请求标志和接收中断请求标志的功能如下:TI:串行口 1 发送中断请求标志。CPU 将数据写入发送缓冲器 SBUF 时,就启动发送,每发送完一个串行帧,硬件将使 TI 置位。但 CPU 响应中断时并不清除 TI,必须由软件清除。RI:串行口 1 接收中断请求标志。在串行口 1 允许接收时,每接收完一个串行帧,硬件将使RI 置位。同样,CPU 在响应中断时不会清除 RI,必须由软件清除。中断请求源中的外部中断 0(
10、INT0)和外部中断 1(INT1)等都是可屏蔽中断,由片内的中断允许寄存器 IE 控制,可对中断的开放和关闭实现两级控制。所谓两级控制,就是有一个总的开关中断控制位 EA(IE.7 位),当 EA=0 时,所有的中断请求被屏蔽,CPU 对任何中断请求都不接受,因此称EA 为系统中断允许总开关控制位;当 EA=1 时,CPU 开放中断,但 5 个中断源的中断请求是否允许,还要由其对应的中断请求允许控制位中断请求允许控制位状态决定。格式如下:D7 D6 D5 D4 D3 D2 D1 D0 IE EA ET2 ES ET1 EX1 ET0 EX0 A8H 位地址 AFH ADH ACH ABH A
11、AH A9H A8H 其中 EX1 是外部中断 1 中断允许位,EX1=0,禁止外部中断 1 中断;EX1=1,允许外部中断 1 中断。EX0 是外部中断 0 中断允许位,EX0=0,禁止外部中断 0 中断;EX0=1,允许外部中断 0 中断。另外,单片机中的中断请求源还具有两个中断优先级,存放在特殊功能寄存器 IP 中,只要利用程序改变其内容就可以对各个中断源的中断优先级进行控制,其格式如下:D7 D6 D5 D4 D3 D2 D1 D0 IP PT2 PS PT1 PX1 PT0 PX0 B8H 位地址 BDH BCH BBH BAH B9H B8H 其中 PX1 是外部中断 1 的中断优
12、先级控制位,PX1=1,外部中断 1 为高优先级;PX1=0,外部中断1 为低优先级。PX0 是外部中断 0 的中断优先级控制位,PX0=1,外部中断 0 为高优先级;PX0=1,外部中断 0 为低优先级。根据上述原理分析,单片机要相应中断请求,首先要使 IE 寄存器中的中断总允许位 EA=1,再使外部中断 0 和 1 所对应的中断请求标志为 1 和中断允许位为 1 即可。本实验要求对中断 0 计数再利用中断 1 清 0,只需要在中断 0 的中断服务子程序加上一个计数器,在中断 1 的中断服务子程序对该计数器清 0,最后利用数码管显示该计数器的值便可实现。(四)实验设备(四)实验设备 硬件:P
13、C 机、USB 数据传输线、STC 单片机综合实验箱 软件:兼容 51 单片机的 Keil uvision5 集成开发环境、STC-ISP 单片机烧录软件(五)实验结果(五)实验结果 实验源代码如(七)所示。对代码进行编译,提示 0 错误 0 警告,生成 hex 文件。将单片机试验箱和电脑通过 USB 数据线连接,打开 STC-ISP 检测串口 点击点开程序文件,选择刚才生成的 hex 文件,点击下载程序,烧录成功 (六)结果讨论与心得体会(六)结果讨论与心得体会 结果分析讨论:将程序烧录至单片机后,可观察到数码管的高三位显示 000,其他位消隐。按下 SW17(外部中断 0),数码管对此计数
14、当按下 SW18(外部中断 1),数码管显示 000,即定时器清零,与预期效果一致,完成实验。心得体会:通过本次实验,我掌握了外部中断的原理,学会了利用按键来产生中断,还了解了如何使用数码管显示,希望通过自己多次尝试能在今后实验中熟练使用外部中断并将其运用到其他方面。(七(七)附录:实验附录:实验源代码源代码 P4 DATA 0C0H ;P5 DATA 0C8H ;P4M1 DATA 0 xB3 ;P4M0 DATA 0 xB4 ;P5M1 DATA 0 xC9 ;P5M0 DATA 0 xCA ;*/P_HC595_SER BIT P4.0 ;P_HC595_RCLK BIT P5.4 ;
15、P_HC595_SRCLK BIT P4.3 ;*/LED8 DATA 30H ;display_index DATA 38H ;INT0_cnt DATA 39H ;*/ORG 0000H ;LJMP F_Main ;ORG 0003H ;LJMP F_INT0_Interrupt ;ORG 0013H ;LJMP F_INT1_Interrupt ;*/ORG 0100H ;F_Main:CLR A ;MOV P4M1,A ;MOV P4M0,A ;MOV P5M1,A ;MOV P5M0,A ;MOV display_index,#0 ;MOV R0,#LED8 ;MOV R2,#8 ;
16、CLR IE1 ;CLR IE0 ;SETB EX1 ;SETB EX0 ;SETB IT0 ;SETB IT1 ;SETB EA ;MOV INT0_cnt,#0 ;L_MainLoop:LCALL F_delay_ms ;LCALL F_DisplayScan ;LJMP L_MainLoop ;F_delay_ms:MOV R2,#20 ;D1:MOV R3,#20 ;D2:DJNZ R3,D2 ;DJNZ R2,D1 ;RET T_Display:;DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,077H,07CH,039H,0
17、5EH,079H,071H;DB 000H T_COM:DB 020H,040H,080H;F_Send_595:PUSH 02H ;MOV R2,#8 ;L_Send_595_Loop:RLC A ;MOV P_HC595_SER,C ;SETB P_HC595_SRCLK ;CLR P_HC595_SRCLK ;DJNZ R2,L_Send_595_Loop;POP 02H ;RET F_DisplayScan:PUSH DPH ;PUSH DPL ;PUSH 00H ;MOV A,INT0_cnt;MOV B,#100 ;DIV AB MOV LED8+0,A ;MOV A,#10 ;X
18、CH A,B ;DIV AB ;MOV LED8+1,A ;MOV LED8+2,B ;MOV DPTR,#T_COM;MOV A,display_index;MOVC A,A+DPTR;CPL A ;LCALL F_Send_595 ;MOV DPTR,#T_Display;MOV A,display_index;ADD A,#LED8 ;MOV R0,A ;MOV A,R0 ;MOVC A,A+DPTR;LCALL F_Send_595 ;CLR P_HC595_RCLK ;SETB P_HC595_RCLK ;INC display_index ;MOV A,display_index;CJNE A,#3,L_QuitDisplayScan;MOV display_index,#0 ;L_QuitDisplayScan:POP 00H ;POP DPL ;POP DPH ;RET F_INT0_Interrupt:INC INT0_cnt ;RETI F_INT1_Interrupt:MOV INT0_cnt,#00H ;RETI END (注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)






