单片机实验四报告_外中断实验

单片机实验四报告_外中断实验
单片机实验四报告_外中断实验

南昌大学实验报告

学生姓名:学号:专业班级:

实验类型:?验证?综合■设计?创新实验日期:2018.05.29 实验成绩:

实验四外中断实验

(一)实验目的

1.掌握单片机外部中断原理;

2.掌握数码管动态显示原理。

(二)设计要求

1.使用外部中断0和外部中断1;

2.在动态数码管上显示中断0次数,中断1用作次数清0,数码管采用74HC595驱动。

(三)实验原理

1.中断

所谓中断是指程序执行过程中,允许外部或内部时间通过硬件打断程序的执行,使其转向为处理外部或内部事件的中断服务程序中去,完成中断服务程序后,CPU返回继续执行被打断的程序。如下图所示,一个完整的中断过程包括四个步骤:中断请求、中断响应、中断服务与中断返回。

当中断请求源发出中断请求时,如果中断请求被允许的话,单片机暂时中止当前正在执行的主程序,转到中断处理程序处理中断服务请求。中断服务请求处理完后,再回到原来被中止的程序之处(断电),继续执行被中断的主程序。

如果单片机没有终端系统,单片机的大量时间可能会浪费在是否有服务请求发生的查询操作上,即不论是否有服务请求发生,都必须去查询。因此,采用中断技术大大地提高了单片机的工作效率和实时性。

2.IAP15W4K58S4单片机的中断请求

IAP15W4K58S4单片机的中断系统有21个中断请求源,2个优先级,可实现二级中断服务嵌套。由IE、IE2、INT_CLKO等特殊功能寄存器控制CPU是否相应中断请求;由中断优先级高存器IP、IP2安排各中断源的优先级;同优先级内2个以中断同时提出中断请求时,由内部的查询逻辑确定其响应次序。

中断请求源中的外部中断0(INT0)和外部中断1(INT1)详述如下:

(1)外部中断0(INT0):中断请求信号由P3.2引脚输入。通过IT0来设置中断请求的触发方式。当IT0为“1”时,外部中断0为下降沿触发;当IT0为“0”时,无论是上升沿还是下降沿,都会引发外部中断0。一旦输入信号有效,则置位IE0标志,向CPU申请中断。

(2)外部中断1(INT1):中断请求信号由P3.3引脚输入。通过IT1来设置中断请求的触发方式。当IT1为“1”时,外部中断1为下降沿触发;当IT1为“0”时,无论是上升沿还是下降沿,都会引发外部中断1。一旦输入信号有效,则置位E1标志,向CPU申请中断。

中断源是否有中断请求,是由中断请求标志来表示的。在IAP15W4K58S4单片机中,外部中断

0、外部中断1等请求源的中断请求标志分别由特殊功能寄存器TCON和SCON控制,格式如下:

(1)TCON寄存器中的中断请求标志。TCON为定时器T0与T1的控制寄存器,同时也锁存T0和T1的溢出中断请求标志及外部中断0和外部中断1的中断请求标志等。格式如下图所示:

D7 D6 D5 D4 D3 D2 D1 D0

88H

与中断有关的各标志位功能如下:

①TF1:T1的溢出中断请求标志。T1被启动计数后,从初值做加1计数,计满溢出后由硬件

置位TFI,同时向CPU发出中断请求,此标志一直保持到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为下降沿触发方式。

在这种方式下,若CPU检测到INT1出现下降沿信号,则认为有中断申请,随即使IE1标志

置位。中断响应后中断请求标志会自动清0,无须做其他处理。当(T1)=0时,外部中断1为

上升沿触发和下降沿触发触发方式。在这种方式下,无论CPU检测到INT1引脚出现下降

沿信号还是上升沿信号,都认为有中断申请,随即使IE1标志置位。中断响应后中断请求标

志会自动清0,无须做其他处理。

⑤IE0:外部中断0的中断请求标志。当INT0(P3.2)引脚的输入信号满足中断触发要求时,置

位IE0,外部中断0向CPU申请中断。中断响应后中断请求标志自动清0。

⑥IT0:外部中断0的中断触发方式控制位。当(IT0)=1时,外部中断1为下降沿触发方式。在

这种方式下,若CPU检测到INT0(P3.2)出现下降沿信号,则认为有中断申请,随即使IE0

标志置位。中断响应后中断请求标志会自动清0,无须做其他处理。当(IT0)=0时,外部中

断0为上升沿触发和下降沿触发触发方式。在这种方式下,无论CPU检测到INT0(P3.2)引

脚出现下降沿信号还是上升沿信号,都认为有中断申请,随即使IE0标志置位。中断响应后

中断请求标志会自动清0,无须做其他处理。

(2)SCON寄存器中的中断请求标志。SCON是串行口控制寄存器,其低2位TI和RI锁存串行口1的发送中断请求标志和接收中断请求标志格式如下:

D7 D6 D5 D4 D3 D2 D1 D0

98H

中断请求标志和接收中断请求标志的功能如下:

①TI:串行口1发送中断请求标志。CPU将数据写入发送缓冲器SBUF时,就启动发送,每

发送完一个串行帧,硬件将使TI置位。但CPU响应中断时并不清除TI,必须由软件清除。

②RI:串行口1接收中断请求标志。在串行口1允许接收时,每接收完一个串行帧,硬件将使

RI置位。同样,CPU在响应中断时不会清除RI,必须由软件清除。

中断请求源中的外部中断0(INT0)和外部中断1(INT1)等都是可屏蔽中断,由片内的中断允许寄存器IE控制,,可对中断的开放和关闭实现两级控制。所谓两级控制,就是有一个总的开关中断控制位EA(IE.7位),当EA=0时,所有的中断请求被屏蔽,CPU对任何中断请求都不接受,因此称EA为系统中断允许总开关控制位;当EA=1时,CPU开放中断,但5个中断源的中断请求是否允许,还要由其对应的中断请求允许控制位状态决定。格式如下:

D7 D6 D5 D4 D3 D2 D1 D0

A8H

位地址AFH —ADH ACH ABH AAH 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的中断优先级控制位,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,最后利用数码管显示该计数器的值便可实现。

(四)实验设备

硬件:PC机、USB数据传输线、STC单片机综合实验箱

软件:兼容51单片机的Keil uvision5集成开发环境、STC-ISP单片机烧录软件

(五)实验结果

实验源代码如(七)所示。

对代码进行编译,提示0错误0警告,生成hex文件。

将单片机试验箱和电脑通过USB数据线连接,打开STC-ISP检测串口

点击点开程序文件,选择刚才生成的hex文件,点击下载程序,烧录成功

(六)结果讨论与心得体会

结果分析讨论:将程序烧录至单片机后,可观察到数码管的高三位显示000,其他位消隐。按下SW17(外部中断0),数码管对此计数,当按下SW18(外部中断1),数码管显示000,即定时器清零,与预期效果一致,完成实验。

心得体会:通过本次实验,我掌握了外部中断的原理,学会了利用按键来产生中断,还了解了如何使用数码管显示,希望通过自己多次尝试能在今后实验中熟练使用外部中断并将其运用到其他方面。

(七)附录:实验源代码

P4 DATA 0C0H ;

精选文档P5 DATA 0C8H ;

P4M1 DATA 0xB3 ;

P4M0 DATA 0xB4 ;

P5M1 DATA 0xC9 ;

P5M0 DATA 0xCA ;

;******************************************************/

P_HC595_SER BIT P4.0 ;

P_HC595_RCLK BIT P5.4 ;

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 ;

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,05EH,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 ;

XCH 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

相关主题
相关文档
最新文档