当前位置:文档之家› 汇编外部中断及NE555计数实验实验报告

汇编外部中断及NE555计数实验实验报告

汇编外部中断及NE555计数实验实验报告
汇编外部中断及NE555计数实验实验报告

外部中断及NE555计数实验

11103070315 李青

【实验内容】

1、利用外部按键中断计数并用数码管显示计数值

2、用51单片机T0、T1定时计数器对NE555产生的脉冲信号进行频率计数,频率送LCD显示(或数码管显示)

【需要了解的知识】

1、GPIO设定

2、LCD显示原理,输入与输出及其原理

3、定时计数器工作原理及频率测量

4、NE555工作原理

【实验预习】

预读实验指导电子文档的实验十六、七及其前面的实验流程

【实验设备】

Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序【实验过程】

实验一外部中断

实验任务:

利用单片机的外部中断功能进行计数,然后将计数值输出到数码管上显示。 K5键—计数值加1(外部中断0)

K6键—计数值加1(外部中断1)

3位数码管显示,最大计数值255

实验步骤:

1)首先在硬盘上建立一个文件夹;

2)启动Keil C51软件;

3)执行Keil C51软件的菜单“Project|New Project……”,弹出一个名为“Create New Project”的对话框。输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;

4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL 的AT89S52的CPU。选择之后,点击“确定”按钮;

5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;

6)执行菜单“File|New……”,出现一个名为“Text1”的文档。接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;

7)添加源程序文件到工程中,一个空的源程序文件建成。单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;

8)在弹出的对话框中先选择文件类型为“Asm Source file (*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;

输入源程序代码;

9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。点击Output选项,选中“Create Hex File”,

10)单击编译按钮,编译当前源程序;

11)运行。

12)将JP21的8个短接子全部用短接帽短接,使DG0-DG7与P2端口接通 13)将JP22的9个短接子全部用短接帽短接,使A-DP与P0端口接通,VCC 向数码管模块供电

14)将JP8的8个短接子全部用短接帽短接,使独立按键与相应的端口接通

15)将1602LCD的使能跳线JP24短接在OFF端以禁用1602LCD,避免1602LCD 干扰数码管显示

实验流程图:

汇编源程序:

K5 BIT P3.2 ;由K5控制端口P3.2,实现计数值加1 K6 BIT P3.3 ;由K6控制端口P3.3,实现计数值加0

DISSTART EQU 40H ;显示单元首地址

LED_DATA EQU P0 ;数码管数据口定义

COUNT EQU 30H ;计数单元

ORG 0000H ;汇编起始地址为0000H

AJMP MAIN ;跳转到主程序

ORG 0003H ;汇编起始地址为0003H

AJMP INT0_EX0 ;跳转到INT0_EX0

ORG 0013H ;汇编起始地址为0013H

AJMP INT1_EX1 ;跳转到INT1_EX1

ORG 0050H ;汇编起始地址为0050H

;*********************************************************

; 主程序

;*********************************************************

MAIN:

MOV SP,#60H ;设置堆栈指针,汇编由60H开始

MOV P0,#0FFH ;将端口P0初始化高电平

MOV P2,#0FFH ;将端口P2初始化高电平

MOV COUNT,#00H ;计数单元清零

MOV R0,#DISSTART ;将首地址赋给R0

CLR1:

MOV @R0,#00H ;清显存单元

INC R0 ;R0自加1

CJNE R0,#DISSTART+3,CLR1 ;判断是否循环3次,不是就跳转到CLR1

CLR IT0 ;INT0为电平触发

; SETB IT0 ;INT0为下降沿触发

CLR IT1 ;INT1为电平触发

; SETB IT1 ;INT1为下降沿触发

SETB EA ;将EA置1

SETB EX0 ;将EX0置1

SETB EX1 ;将EX1置1

MAIN1:

ACALL CONVT ;调用子程序CONVT

ACALL PLAY ;调用子程序PLAY

AJMP MAIN1 ;跳转到MAIN1

;********************************************************* ; INT0 外部中断服务子程序 (加计数)

;********************************************************* INT0_EX0:

PUSH ACC ;入栈保护

PUSH PSW ;入站保护

SETB RS0 ;更换寄存器组

CLR RS1 ;RS1清零

CLR EX0 ;关闭INT0中断

INC COUNT ;计数值加1

MOV R4,#70 ;将70赋给R4

EX0_PLAY:

MOV A,COUNT ;用显示程序进行延时

ACALL CONVT ;调用子程序CONVT

ACALL PLAY ;跳转到PLAY

DJNZ R4,EX0_PLAY ;R4减1,非0则跳转到EX0-PLAY

SETB EX0 ;开启INT0中断

POP PSW ;出栈

POP ACC ;出栈

RETI ;中断返回

;********************************************************* ; INT1 外部中断服务子程序 (减计数)

;********************************************************* INT1_EX1:

PUSH ACC ;入栈保护

PUSH PSW ;入站保护

SETB RS0 ;更换寄存器组

CLR RS1 ;关闭INT0中断

CLR EX1 ;关闭INT1中断

DEC COUNT ;计数值减1

MOV R4,#70 ;将70赋给R4

EX1_PLAY:

MOV A,COUNT ;用显示程序进行延时

ACALL CONVT ;调用子程序CONVT

ACALL PLAY ;调用子程序PLAY

DJNZ R4,EX1_PLAY ;R4自减1,非零则跳转到EX1_PLAY

SETB EX1 ;开启INT1中断

POP PSW ;出栈

POP ACC ;出栈

RETI ;中断返回

;*********************************************************

;数据转换 (HEX TO BCD)

;********************************************************* CONVT:

MOV A,COUNT ;计数值处理

MOV B,#100 ;将100赋给B

DIV AB ;A除以B,A为商,B为余数

MOV DISSTART+2,A ;百位存放在DISSTART+2

MOV A,#10 ;将10赋给累加器A

XCH A,B ;交换A,B的值

DIV AB ;A除以B,A为商,B为余数

MOV DISSTART+1,A ;十位存放在DISSTART+1

MOV DISSTART,B ;个位存放在DISSTART

MOV A,DISSTART+2 ;高位为0,不显示

CJNE A,#00H,CONVT1 ;判断A是否为0,非零则转移 MOV DISSTART+2,#0AH ;将0AH赋给高位

MOV A,DISSTART+1 ;将十位的值赋给10位

CJNE A,#00H,CONVT1 ;判断A是否为0,非零则转移 MOV DISSTART+1,#0AH ;将0AH赋给十位

CONVT1:

RET ;返回

;********************************************************* ; 数码管显示子程序

;********************************************************* PLAY:

MOV R0,#DISSTART ;获得显示单元首地址

MOV R1,#0FEH ;从第一个数码管开始

MOV R2,#03H ;共显示3位数码管

DISP1:

MOV A,@R0 ;获得当前位地址

MOV DPTR,#TAB_NU ;获得表头

MOVC A,@A+DPTR ;查表获得显示数据

MOV LED_DATA,A ;送段码

MOV P2,R1 ;送位码

MOV A,R1 ;准备下一位的位码

RL A ;累加器左移

MOV R1,A ;将A的值赋给R1

INC R0 ;取下一个显存单元地址

ACALL DELAY1MS ;延时 1 MS

DJNZ R2,DISP1 ;重复显示下一个

MOV P2,#0FFH ;关闭显示

RET ;显示完成,返回

;*********************************************************

;延时子程序

;*********************************************************

DELAY1MS:

MOV R6,#5 ;将5赋给R6

DEL1:

MOV R7,#93 ;将93赋给R7

DJNZ R7,$ ;R7自减1非零则跳转

DJNZ R6,DEL1 ;R6自减1非零则跳转到DEL1

RET ;返回

;*********************************************************

TAB_NU:

DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H

DB 080H,090H,0FFH

END ;结束

实验结果:

利用单片机的外部中断功能进行计数,然后将计数值输出到数码管上显示。 K5键—计数值加1(外部中断0)

K6键—计数值加1(外部中断1)

3位数码管显示,最大计数值255

问题解决及讨论:

1)注意短接子的短接

2)芯片型号没有选择正确。可重新选择型号

3)没有放置芯片。先放芯片,再压下锁紧座手柄锁紧

4)芯片损坏。换新的芯片重试

5)仔细输入汇编源程序,最好是新建txt文档后先更改扩展名为asm再输入源程序,否则可能无法编译

6)没有正确加载烧写文件。必须是先选芯片在加载文件

分析讨论:

经过这次试验,我学到了如何利用单片机的外部中断功能进行计数,然后将计数值输出到数码管上显示。通过K5、K6键进行加减控制,共有3位数码管显示,最高显示到255。

并且我发现我们在做实验时要有足够的细心和耐心,如果发现程序无法运行要认真寻找发现错误。比如这次,我输入汇编源程序时新建txt文档后没有直接更改扩展名为asm而是直接输入源程序,之后再更改扩展名最终造成程序无法编译,直接原因是在txt文档中输入时多输入了部分空格。经过这次教训,我以后一定会更加仔细的。

实验二 NE555计数实验

实验任务:

利用C51单片机的T0、T1定时计数器对NE555产生的脉冲信号进行频率计数,频率测量结果通过LCD1602显示出来

实验步骤:

1)首先在硬盘上建立一个文件夹;

2)启动Keil C51软件;

3)执行Keil C51软件的菜单“Project|New Project……”,弹出一个名为

“Create New Project”的对话框。输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;

4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL 的AT89S52的CPU。选择之后,点击“确定”按钮;

5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;

6)执行菜单“File|New……”,出现一个名为“Text1”的文档。接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;

7)添加源程序文件到工程中,一个空的源程序文件建成。单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;

8)在弹出的对话框中先选择文件类型为“Asm Source file (*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;

输入源程序代码;

9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。点击Output选项,选中“Create Hex File”,

10)单击编译按钮,编译当前源程序;

11)运行,查看效果。

12)将JP24的ON端短接,使LCD1602供能

13)将JP25背光短接子短接,使LCD1602的背光灯点亮

14)将JP3短接子短接,使

实验流程图:

汇编源程序:

LCD_RS BIT P2.0 ;LCD 控制管脚定义

LCD_RW BIT P2.1

LCD_EN BIT P2.2

BUSY BIT P0.7

DATAPORT EQU P0 ;定义LCD的数据端口

LCD_X EQU 3FH ;LCD 地址变量

BUSY_CHECK BIT 20H.0

TIMER_H EQU 30H ;定时器高位字节单元

TIMER_L EQU 31H ;定时器低位字节单元

TIMCOUNT EQU 32H ;50ms中断计数

INT_G EQU 35H ;中断计数缓冲单元高地址INT_H EQU 34H ;中断计数缓冲单元中地址

INT_L EQU 33H ;中断计数缓冲单元低地址

T_S EQU 36H ;数据显示低位

T_M EQU 37H ;数据显示中位

T_H EQU 38H ;数据显示高位

T_G EQU 39H ;数据显示最高位

TEMP_H EQU 3AH

TEMP_L EQU 3BH

;********************************************************** ORG 0000H

AJMP MAIN ;主程序开始

ORG 000BH

AJMP TIMER_INT ;定时器T0中断服务程序

ORG 001BH

AJMP TIMER1 ;定时器T1中断服务程序

ORG 0050H

;**********************************************************

MAIN:

MOV SP,#60H ;设置SP指针

ACALL PRO_SET ;程序初始化

ACALL LCD_INIT ;LCD初始化

MAIN1:

MOV B,#00H

MOV DPTR,#INFO1 ;指针指到信息1首地址

ACALL W_STRING1

MOV B,#00H

MOV DPTR,#INFO2 ;指针指到信息2首地址

ACALL W_STRING2

ACALL TIMER_SET ;定时器初始设定

MAIN2:

ACALL SBIN_SBCD

ACALL PLAY

AJMP MAIN2

;**********************************************************

INFO1: DB " CYMOMETER ",0 ;LCD 第一行显示信息

INFO2: DB "FREQ: HZ ",0 ;LCD 第二行显示信息

;********************************************************** ;初始化程序

;********************************************************** PRO_SET:

MOV P0,#0FFH ;端口初始化

MOV P1,#0FFH

MOV A,#00H ;寄存器初始化

MOV B,#00H

MOV 2AH,A

MOV INT_H,A

MOV INT_L,A

MOV INT_G,A

MOV T_S,A

MOV T_H,A

MOV T_M,A

MOV T_G,A

MOV TIMCOUNT,A

MOV TIMER_H,#04CH ;定时 50 MS

MOV TIMER_L,#10H

SETB P3.5 ;P3.5端口置为输入状态

RET ;T1(TIMER1的外部输入脚)

;********************************************************** ; 定时器设置

; 设置定时器0工作在定时方式1,定时器1工作在计数方式1

;********************************************************** TIMER_SET:

MOV TMOD,#51H

MOV TH0,TIMER_H ;设置定时初值高位

MOV TL0,TIMER_L ;设置定时初值低位

MOV TH1,#00H ;清T1计数器

MOV IE,#8AH ;开中断总允许,允许T0溢出中断 SETB PT1 ;TIMER1中断优先

SETB TR1

SETB TR0 ;定时器开始工作

RET

;********************************************************** ;检查LCD忙状态

;busy为1时,忙,等待。busy为0时,闲,可写指令与数据

;********************************************************** LCD_BUSY:

MOV DATAPORT,#0FFH

BUSY_1:

CLR LCD_RS

SETB LCD_RW

CLR LCD_EN

NOP

SETB LCD_EN

JB BUSY,BUSY_1

CLR LCD_EN

RET

;********************************************************** ;LCD写命令子程序

;LCD_RS=L,LCD_RW=L,D0-D7=指令码,E=高脉冲

;若 BUSY_CHECK =1,进行忙检测

;********************************************************** WCOM:

JNB BUSY_CHECK,WCOM_1

ACALL LCD_BUSY

WCOM_1:

MOV DATAPORT,A ;写入指令

CLR LCD_RS

CLR LCD_RW

NOP

SETB LCD_EN

NOP

CLR LCD_EN

RET

;********************************************************** ;LCD写数据子程序

;LCD_RS=H,LCD_RW=L,D0-D7=数据码,E=高脉冲

;********************************************************** WDATA:

ACALL LCD_BUSY

MOV DATAPORT,A ;写入数据

SETB LCD_RS

CLR LCD_RW

NOP

SETB LCD_EN

NOP

CLR LCD_EN

RET

;********************************************************** ; 在 LCD 第一行的指定显示位置

;********************************************************** SET_X1:

MOV A,LCD_X

ORL A,#80H

ACALL WCOM

RET

;********************************************************** ; 在 LCD 第二行的指定显示位置

;********************************************************** SET_X2:

MOV A,LCD_X

ORL A,#0C0H

ACALL WCOM

RET

;********************************************************** ; 写字符串子程序1

;********************************************************** W_STRING1:

MOV A,#80H ;设置 LCD 的第一行地址

ORL A,B

ACALL WCOM ;写入命令

ACALL FILL_CHAR

RET

;********************************************************** ; 写字符串子程序2

;**********************************************************

W_STRING2:

MOV A,#0C0H ;设置 LCD 的第二行地址

ORL A,B

ACALL WCOM ;写入命令

ACALL FILL_CHAR

RET

;********************************************************** ; 写入字符子程序

;********************************************************** FILL_CHAR:

CLR A ;填入字符

MOVC A,@A+DPTR ;由字符区取出字符

CJNE A,#0,F_CHAR ;判断是否为结束码

RET

F_CHAR:

ACALL WDATA ;写入数据

INC DPTR ;指针加1

AJMP FILL_CHAR ;继续填入字符

RET

;********************************************************** ; LCD 初始化子程序

;********************************************************** LCD_INIT:

CLR BUSY_CHECK ;不进行忙检测

MOV A,#38H ;强制执行3次

ACALL WCOM

ACALL DELAY1

MOV A,#38H ;双列显示,字形5*7点阵

ACALL WCOM

ACALL DELAY1

MOV A,#38H ;双列显示,字形5*7点阵

ACALL WCOM

ACALL DELAY1

SETB BUSY_CHECK ;进行忙检测

MOV A,#0CH ;开显示,不显示光标。

ACALL WCOM

ACALL DELAY1

MOV A,#06H ;

ACALL WCOM

ACALL DELAY1

MOV A,#01H ;清除 LCD 显示屏

ACALL WCOM

ACALL DELAY1

RET

;********************************************************** ; 延时5MS子程序

;********************************************************** DELAY1:

MOV R6,#25

DEL3:

MOV R7,#93

DEL4:

DJNZ R7,DEL4

DJNZ R6,DEL3

RET

;********************************************************** ;定时器0中断服务程序

;********************************************************** TIMER_INT:

CLR TR0 ;关闭定时器

PUSH ACC

MOV TL0,TIMER_L ;重新赋初值

MOV TH0,TIMER_H ;

INC TIMCOUNT ;定时50msj计数单位

MOV A,TIMCOUNT ;查看数量值

CPL P1.4 ;产生自测信号

CJNE A,#20,T_END ;如果没有到1S返回

CLR TR1 ;关闭计数器T1

MOV TIMCOUNT,#00H ;到1S则清零

MOV INT_L,TL1 ;取出计数值低位

MOV INT_H,TH1 ;取出计数值高位

MOV INT_G,2AH ;取出溢出计数值位

MOV TH1,#00H

MOV TL1,#00H

MOV 2AH,#00H

SETB TR1

T_END:

POP ACC

SETB TR0 ;重新开始定时操作

RETI

实验五 外部中断应用实验

外部中断应用实验 设计性试验 2012年11月28日星期三第三四节课 一、实验目的 1、掌握中断系统外部中断源的使用方法。 2、掌握延时程序的编程及使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。 2、在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。 三、电路原理图

四、实验程序流程框图和程序清单及实验结果 /******************** 实验五外部中断应用实验 要求:(1)在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。 (2)在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。 **********************/ ORG 0000H START: LJMP MAIN ORG 0003H LJMP EXINT0 ORG 0013H LJMP EXINT1 ORG 000BH LJMP TTC0 ORG 0100H MAIN: MOV SP, #2FH ;堆栈指针初始化 MOV IE, #10000111B;EA - - ES ET1 EX1 ET0 EX0 MOV TMOD, #01H ;设置定时器T/C0为工作方式1 MOV TH0, #9EH ;设置定时器T0的计数初值为25ms MOV TL0, #58H SETB IT0 ;设置外部中断0为脉冲触发 SETB IT1 ;设置外部中断1为脉冲触发 HERE: LJMP HERE ;等待中断 /*定时器T0中断服务程序*/ ORG 0200H TTC0: CPL P1.2

《8259中断控制器实验》的实验报告

实验六8259中断控制器实验 6.1 实验目的 (1) 学习中断控制器8259的工作原理。 (2) 掌握可编程控制器8259的应用编程方法。 6.2 实验设备 PC微机一台、TD-PIT+实验系统一套。 6.3 实验内容 1. 单中断应用实验 (1)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。 (2)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“Hello”,中断5次后退出。 2.扩展多中断源实验 利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。编写程序对8259控制器的IR0和IR1中断请求进行处理。 6.4 实验原理 1. 8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图6-1所示。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图6-2所示,

PSOC3外部中断实验报告

一.实验名称 ●中断实验 二.实验任务 ●了解PSoC3中断的构成,特点。 ●掌握PSoC3中断函数的编写 ●按键控制LED灯亮灭。 ●利用轻触按键K3分别产生PSoC3器件I/O口下降沿触发每 触发一次中断,LED1、LED2状态翻转一次。 三.实验设备及环境 ●微型计算机(安装了Psoc creator3.1集成开发软件) ●PSoC实验平台 ●DC9V电源 ●导线若干 四.原理: ●32个中断向量,每个中断向量对于多个中断源 ●可配置的中断入口向量地址 ●灵活的中断源 ●每个中断可独立的使能和禁制 ●每个中断可以设置8级中断优先级

●8级中断嵌套 ●软中断 ●程序可清除正在响应的中断 电平触发 边沿触发 五.具体步骤 1.新建工程 ●双击打开PSoC Creator软件 ●File -> New – Project,在Design栏中使用默认选择的 Empty PSoC 3 Design

●在“Name”框中输入新工程名称Timer,在“Location”框 中输入其存放路径 ●回到创建新工程对话框,点击“OK”,完成新工程的创建 2.绘制原理图 3.设置模块参数 ●设置Pin_1模块参数 ?Name:LED1 ?去掉 HW Connection前的勾 ?General:取默认 ?Drive Mode:Strong Drive ?Initial State:Low(0)

●设置Pin_2模块参数,与上一步相同 4.代码编写 ●主程序编写 #include CY_ISR(SWPin_Control) { if(InputPin_Read() == 1u) { OutputPinSW_Write(0u); } else { OutputPinSW_Write(1u); } InputPin_ClearInterrupt(); } int main() {

中断实验报告

沈阳工程学院 学生实验报告 实验室名称:微机原理实验室实验课程名称:微机原理及应用 实验项目名称:8259中断控制器实验实验日期:年月日 班级:姓名:学号: 指导教师:批阅教师:成绩: 一.实验目的 1.熟悉8086中断系统及8259的扩展方法。 2.理解8259中断控制器的工作原理。 3.初步掌握8259的应用编程方法。 二.实验设备 PC机一台,TD-PITE实验装置一套。 三.实验内容 1.实验原理 (1)在Intel 386EX芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器:一个为主控制器,一个为从控制器。从片的INT连接到主片的IR2信号上构成两片8259的级联。主片8259的中断请求信号IR6和IR7开放,从片的中断请求信号IR1开放,以供实验使用。 (2)单次脉冲输出与主片8259的MIR7相连,每按动一次单次脉冲开关,产生一个外部中断,在显示器上输出一个字符。 8259中断实验接线图 2.实验步骤 (1)补全实验程序,按实验接线图接线。 (2)对实验程序进行编译、链接无误后,加载到实验系统。 (3)执行程序,并按动单次脉冲开关KK1或KK2,观察程序执行结果。 3.程序清单 SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:SSTACK START: PUSH DS MOV AX, 0000H MOV DS, AX ·1·

8259中断控制实验 ·2· MOV AX, OFFSET MIR7 ①MOV SI, ( ) MOV [SI], AX MOV AX, CS ②MOV SI, ( ) MOV [SI], AX CLI POP DS MOV AL, 11H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 04H OUT 21H, AL MOV AL, 01H OUT 21H, AL MOV AL, ( ) OUT 21H, AL STI AA1: NOP JMP AA1 MIR7: STI CALL DELAY MOV AX, 0137H INT 10H MOV AX, 0120H INT 10H MOV AL, 20H OUT 20H, AL IRET DELAY: PUSH CX MOV CX, 0F00H AA0: PUSH AX POP AX LOOP AA0 POP CX RET CODE ENDS END START 四.实验结果及分析 根据实验回答下列问题: 1.按动单次脉冲输入KK1后,屏幕显示字符 。 2.分析中断矢量地址能改成别的数值吗?为什么? 3.改变接线,KK1连接MIR6。修改程序行①为 ,修改程序行②为 ,重新设置中断向量,以及中断屏蔽字改为 。 4.如果输出数字9,如何修改程序? 5.如何屏蔽MIR7上的中断请求?按下KK1会有什么现象? 6.选做:如果采用级联方式扩展一片8259从片,应如何修改程序呢?请将程序写在背面。 成绩评定 对实验原理的掌握情况 2 1 0 — 实验步骤正确性 3 2 1 0 实验数据记录正确性 2 1 0 — 实验结果及分析的正确性 3 2 1 成 绩 批阅教师: 20 年 月 日

实验3:外部中断实验指导书

《—嵌入式系统原理与应用—》实验指导书 黄鹏程、谢勇编写 适用专业:计算机科学与技术 物联网工程 厦门理工学院计算机与信息工程院(系) 2016 年 3 月

实验3:外部中断实验 实验学时:2 实验类型:(演示、验证√、综合、设计研究) 实验要求:(必修√、选修) 一、实验目的 1. 理解中断的概念及其在嵌入式系统中的应用; 2. 熟悉LPC1700系列CortexM3 微控制器的NVIC的配置; 3. 熟悉LPC1700系列CortexM3 微控制器外部中断的控制。 二、实验内容 在EasyARM1768开发板的硬件平台上,基于流水灯显示实验,结合向量中断控制器NVIC和外部中断,设计并实现外部中断实验。要求实现三种方式的流水灯实现,并且通过三个按键利用通过外部中断实现三种不同方式的切换。 三、实验原理、方法和手段 中断对嵌入式系统来说是很重要的一个概念,利用中断,可以开发出很接近产品的嵌入式系统。市场上大部分的不带嵌入式操作系统的嵌入式系统都采用了“前后台系统”来实现产品功能,这其中的前台就是中断机制。故我们要理解中断的概念,并且能够应用中断到实际的嵌入式系统中来。 图1 前后台系统

图2 中断处理流程示意图 1、 中断向量控制器(NVIC ) 嵌套向量中断控制器(NVIC )是 Cortex-M3 处理器的一个内部器件,它与 CPU 内核紧密耦合,共同完成对中断的响应,降低了中断延时,使得最新发生的中断可以得到高效处理。 它能够管理中断的各种事务,比如使能或禁止外设中断源的中断,设置外设中断源的优先级,挂起中断,查看外设中断源的中断触发状态等。然后把中断信号给ARM 内核。NVIC 的应用示意图如下所示: 图3 NVIC 的作用

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想 ------- 屠呦呦 实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1;

void timer1_init() { TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int sbit D1=P2^0; //将D1位定义为P2.0引脚 uint counter=0; unsigned int unit=0,decade=0,avs=0;//time=0;

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

大学实验报告 学生:学号:专业班级: 实验类型:?验证?综合■设计?创新实验日期: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为

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能: (1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成) C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); }

Void main { EA=1; EX0=1; EX1=1; ITO=1; IT1=1; PX0=1; PX1=0; While(1); } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) { While(1) { P2_1=1; delay02s(); P2_1=0; delay02s(); } } }

微机接口实验报告-8259中断控制器应用实验

姓名 院专业班 年月日实验内容8259中断控制器实验指导老师 【实验目的】 (1)学习中断控制器8259的工作原理。 (2)掌握可编程控制器8259的应用编程方法。 【试验设备】 PC微机一台、TD-PIT+实验系统一套。 【实验内容】 (1) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。 (2) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“9”,中断显示6次后退出。 【实验原理】 1. 8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图6-1所示。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1- OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图6-2所示,OCW1-OCW3各命令字格式如图6-3所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的操作命令字,OCW3用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。 图6-1 8259内部结构和引脚图

外部中断实验

实验二外部中断实验 一.实验目的 1.学习外部中断技术的基本使用方法; 2.学习中断处理程序的编程方法。 二.实验设备及器材配置 1.单片机仿真实验系统。 2.计算机。 3.导线。 三.实验内容 在以下实验题目中任选一个或由老师指定。 1.P1口做输出口,接八只发光二极管,编写程序,使其循环点亮。以单脉冲输出端做为中断申请,当第一次产生外部中断时,使发光二极管全亮,延时1秒后返回中断之前的状态;当第二次产生外部中断时,使发光二极管全灭,延时1秒后返回中断之前的状态;以后如上述一直循环下去。 2.以单脉冲输出端做为中断申请,自行设计连线,用实验箱上的红、绿、黄发光二极管模拟交通灯控制。当有急救车通过时,两交通灯信号为全红,以便让急救车通过,延时10秒后交通灯恢复中断前状态。 四.实验原理说明 本实验中中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能返回中断前P1口及发光二极管的状态。除了保护累加器A、程序状态字PSW外、P1口的状态外,还要注意主程序中的延时程序和中断程序的延时程序不能混用,本实验中,主程序延时程序用的寄存器和中断延时用的寄存器也不能混用。 五.连线方法及实验电路 8031的P1.0—P1.7分别接发光二极管L0—L7,P3.2接单脉冲输出端“ ” 外部中断实验电路如图1-3所示。

图1-3 外部中断实验电路 六.思考题及实验报告要求 1.思考题 (1).试说明51系列单片机外部中断如何使用。 (2).修改程序,外部中断产生时,使发光二极管闪亮移位方向改变。 2.实验报告要求 (1).给出自行设计的程序清单、程序流程图。 (2). 总结实验过程中调试所遇到的问题和解决方法,写出编程调试的经验和体会。 VW集成调试软件使用 1.自建以字母开头的文件夹,推荐在F盘。 2.双击桌面V/W快捷方式 3.左击【文件】-新建文件-保存文件(存于自建文件夹下,以字母开头,后缀为.ASM或.C) 4.左击【文件】-新建项目-(以字母开头,存于自建文件夹下,加入自存的汇编或C源程序) 5.编写程序 6. 左击【项目】-编译,根据提示将提示的错误位置修改,编译,直至程序无错。 7.实验箱断电、连线完毕后,打开实验箱电源开关。左击【仿真器】,在出现的窗口中选择LAB8000\MCS51\8031AH或A T89C51,晶体频率:6000000Hz。 8. 左击【执行】-全速运行,在实验箱上观察运行结果。

单片机中断实验报告

实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer1_init() 开始 设置显示初值启动定时器 判断是否到59 继续 是 否

{ TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int

实验3 外部中断实验报告

实验三定时中断实验 一、实验目的 1、掌握51单片机外部中断的应用。 2、掌握中断函数的写法。 3、掌握定时器的定时方法。 4、掌握LED数码管的显示。 二、实验内容 1、用外部中断0测量负跳变信号的累计数,同时在LED数码管上显示出来。 2、用外部中断改变流水灯的方式。 3、用定时器T1的方式2控制两个LED以不同周期闪烁。 使用定时器T1的方式2来控制P0、0、P0、1引脚的两个LED分别以1s与2s的周期闪烁。 三、实验仿真硬件图 在Proteus软件中建立如下图所示仿真模型并保存。 1、用外部中断0测量负跳变信号的累计数,同时在LED数码管上显示出来(用中断方式做计数器)。 2、用外部中断改变流水灯的方式。 中断前:开始时,P0、0~P0、7的8个灯依次点亮。 外部中断0:P0、0~P0、7的左右4个灯闪烁亮8次 外部中断1: P0、0~P0、7的8个灯间隔闪烁8次 改变中断优先级与保护现场,观察运行结果 四、编程提示

外部中断0请求 ______ INT,由P3、2管脚输入,通过IT0位来决定就是低电平有效还就是下 降沿有效。一旦输入信号有效,即向CPU申请中断,并建立IE0中断标志。 以外部中断0为例,开放中断源采用以下语句: EA=1; //开放中断总允许位 EX0=1; //开放外部中断0允许位 IT0=1; //置外部中断为边沿(下边沿)触发方式中断函数结构如下: void int_0() interrupt 0 // interrupt 0表示该函数为中断类型号0的中断函数{ } 同级自然优先级: 外部中断0→定时器T0中断→外部中断1→定时器T1中断→串行口中断。 中断优先级别的设定: 实验二要求: 初始状态为P0、0~P0、7的8个LED显示灯依次循环点亮;外部中断0服务程序为8个LED灯,左4个,右4个闪烁8次,外部中断1服务程序8个LED灯,间隔闪烁8次。 ⑴设定外部中断0为高优先级,先执行外部1中断,过程中用外部0中断来将其中断,反之不行。注意保护现场。 ⑵设定外部中断1为高优先级,先执行外部0中断,过程中用外部1中断来将其中断,反之不行。注意保护现场。 实验三(调试下列程序,在错误行后面注明错误及改正方法): #include #define uchar unsigned char; sbit D0=P1^0; sbit D1=P1^1; uchar a,b;

单片机 实验报告 外部中断应用

一、实验目的 1、学习外部中断技术的基本使用方法。 2、学习中断处理程序的编程方法。 二、实验环境 1、Lab6000通用微控制器实验系统。 2、计算机,W A VE 集成调试软件。 三、实验项目 用单次脉冲申请中断,在中断处理程序中对输出信号进行反转控制直流电机转、停。 四、涉及内容 中断服务程序的关键是: 1、保护进入中断时的状态,并在退出中断之前恢复进入时的状态。 2、必须在中断程序中设定是否允许中断重入,即设置EXO位。 3、选择相应的中断源,并设置中断屏蔽寄存器的相应位。 本实验使用了INTO中断。一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本实验的中断程序保护了PSW寄存器并且在退出前恢复了这个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本实验中没有涉及这种情况。 INTO(P3.2)接单次脉冲发生器。P1.0接继电器,以查看信号反转。 主程序框图外部中断子程序框图 五、实验步骤、记录和结果 实验电路连线 1、汇编语言 操作步骤如下: (1)创建一个项目目录:shiyan51。 (2)如实验一的七.2,修改编译器为汇编语言编译器。 (3)执行“新建文件”命令,在开发环境程序窗口中按汇编语言格式输入汇编语言源程序。将程序文件名取为shiyan51.asm保存到目录“shiyan51”。 Output equ P1.0 OutBuf equ 0 ljmp Start org 3 Interrupt0: push PSW ; 保护现场 cpl OutBuf ; 取反LED 连线连接孔1 连接孔2 1 继电器——输入P1.0 2 INT0 单脉冲—— 3 继电器——公共端+5V 4 继电器——常闭L0 5 继电器——常开L3 6 继电器——常开直流电机——至D/A 开始 设置初始状态 设置中断控制 寄存器 中断允许 中断入口保护现场状态位取反状态位输出恢复现场

中断实验报告

上机实验报告课程名称计算机接口与外设上机内容中断实验 学院计算机学院 专业计算机科学与技术班级 学号 学生姓名 指导教师吴以凡 完成日期2014-12-9

一、实验目的 1、掌握8259中断控制器的工作原理。 2、学会编写中断服务程序。 二、实验内容及成果展示 实验1:使用软中断 代码: start: M OV AX,DATA M OV DS,AX CLI M OV SI,0CH*4 M OV AX, OFFSET INTSERVICE ;中断入口偏移地址 M OV ES:[SI], AX M OV AX, SEG INTSERVICE ;中断入口的段地址 M OV ES:[SI+2], AX S TI ;开中断 M OV AL,CNT ; 初始CNT=1 M OV DX,0000H ; led的地址 O UT DX,AL ;开始第一个灯亮 LI: CALL INTSERVICE ;调用软件中断 C ALL DELAY ;延时 J MP LI ;中断服务程序---------------------------------- INTSERVICE PROC P USH DS M OV AL,CNT ;cnt=1; R OL AL,1 ;cnt=cnt<<1 M OV CNT,AL

M OV DX,0000H ;led=cnt<<1 O UT DX,AL P OP DS INTSERVICE ENDP ;------------------------------------------------- ;软件延时子程序---------------------------------- DELAY PROC P USH BX ;这里用到堆栈 P USH CX M OV BX,1 L P2:MOV CX,0 L P1:LOOP LP1 D EC BX J NZ LP2 P OP CX P OP BX R ET DELAY ENDP code ENDS END start实验结果: 实验2:使用1片8259A + 按钮硬件中断

单片机外部中断的使用

哈尔滨理工大学荣成学院 单片机原理及应用Protues 仿真实验 班级: 学号: 姓名: 日期:

实验三单片机外部中断的使用 一、实验名称:单片机外部中断的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4..实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 在Proteus 环境下建立如下仿真原理图,并保存为文件;

原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件;汇编语言参考程序如下:ORG 0000H

LJMP MAIN ORG H ;外部中断0程序入口地址LJMP EXINT0 ORG 0030H MAIN: MOV SP,#60H ;堆栈指针初始化 SETB ;设置外部中断 0 为边沿触发 SETB ;开外部中断0 SETB ;开CPU总中断MOV A,#01H LOOP: MOV P1,A RL A CALL DELAY SJMP LOOP DELAY: MOV R1,# ;延时250ms子程序DL1: MOV R2,# DL2: MOV R3,# DJNZ R3,$ DJNZ R2,DL2 DJNZ R1,DL1 ;延时子程序返回EXINT0: PUSH PUSH CLR RS1 SETB RS0 MOV R0,# LP: MOV P1,#0FFH CALL DELAY MOV P1,#00H CALL DELAY DJNZ R0,LP POP PSW POP ACC ;中断返回END 将以上程序补充完整,流水时间间隔,闪烁时间间隔为250ms。C51语言参考程序: #include #include #define uchar unsigned char #define uint unsigned int void delay_ms(uint x) { uint i; uchar j; for(i=0;i

计算机组成原理中断实验报告精编WORD版

计算机组成原理中断实验报告精编W O R D版 IBM system office room 【A0816H-A0912AAAHH-GX8Q8-GNTHHJ8】

北京建筑大学 2015/2016 学年第二学期 课程设计 课程名称计算机组成原理综合实验 设计题目微程序控制器设计与实现 系别电信学院计算机系 班级计141 学生姓名艾尼瓦尔·阿布力米提 学号 完成日期二〇一六年七月八日星期五 成绩 指导教师 (签名) 计算机组成综合实验任务书

?4、在原有指令集基础上自行设计或扩展4~8条指令。画出扩展指令的指令执行流程图; ?5、利用上端软件,把所编写的微程序控制器内容写入实验台中控制器中。 ?6、利用单拍测试控制器与编程的要求是否一致。如果有错误重新修改后再写入控制器中。 7、编写一段测试程序,测试控制器运行是否正确。 实验目的 1.融合贯通计算机组成原理课程,加深对计算机系统各模块的工作原理及相互联系(寄存器堆、运算器、存储器、控制台、微程序控制器)。 2.理解并掌握微程序控制器的设计方法和实现原理,具备初步的独立设计能力; 3.掌握较复杂微程序控制器的设计、调试等基本技能;提高综合运用所学理论知识独立分析和解决问题的能力。 实验电路 1. 微指令格式与微程序控制器电路 2.微程序控制器组成 仍然使用前面的CPU组成与机器指令执行实验的电路图,但本次实验加入中断系统。这是一个简单的中断系统模型,只支持单级中断、单个中断请求,有中断屏蔽功能,旨在说明最基本的原理。

中断屏蔽控制逻辑分别集成在2片GAL22V10(TIMER1 和TIMER2)中。其ABEL语言表达式如下: INTR1 := INTR; INTR1.CLK = CLK1; IE := CLR & INTS # CLR & IE & !INTC; IE.CLK= MF; INTQ = IE & INTR1; 其中,CLK1是TIMER1产生的时钟信号,它主要是作为W1—W4的时钟脉冲,这里作为INTR1的时钟信号,INTE的时钟信号是晶振产生的MF。INTS微指令位是INTS机器指令执行过程中从控制存储器读出的,INTC微指令位是INTC机器指令执行过程中从控制存储器读出的。INTE是中断允许标志,控制台有一个指示灯IE显示其状态,它为1时,允许中断,为0 时,禁止中断。当INTS = 1时,在下一个MF的上升沿IE变1,当INTC = 1时,在下一个MF的上升沿IE变0。CLR信号实际是控制台产生的复位信号CLR#。当CLR = 0时,在下一个CLK1的上升沿IE变0。当 CLR=1 且INTS = 0 且 INTC = 0时,IE保持不变。 INTR是外部中断源,接控制台按钮INTR。按一次INTR按钮,产生一个中断请求正脉冲INTR。INTR1是INTR经时钟CLK1同步后产生的,目的是保持INTR1与实验台的时序信号同步。INTR脉冲信号的上升沿代表有外部中断请求到达中断控制器。INTQ是中断屏蔽控制逻辑传递给CPU的中断信号,接到微程序控制器上。当收到INTR脉冲信号时,若中断允许位INTE=0,则中断被屏蔽,INTQ仍然为0;若INTE =1,则INTQ =1。

单片机外部中断实验(附C语言程序)复习进程

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能:(1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成)

C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序{ unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } Void main { EA=1; EX0=1; EX1=1 ; ITO=1 ; IT1=1 ; PX0=1; PX1=0; While(1) ; } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) {

单片机 P1口及外部中断 硬件实验报告

实验十一P1口及外部中断 一、实验目的 1.掌握利用MCS-51单片机P1口实现I/O的三种传送方式。 2.掌握MCS-51单片机外部中断源的原理和编程方法。 3.了解MCS-51单片机处理外部中断的全过程。 4.弄懂外部中断触发方式的选择。 二、实验要求 熟练掌握结合DP-51PROC单片机综合仿真实验仪和Kiel C51 集成开发环境进行仿真调试。 三、实验内容及实验电路 1、P1口无条件输出实验,电路图图3-1所示。 图3-1 P1口无条件输出 实验参考程序1:8个LED 灯同时闪亮。 ORG 8000H LJMP Main ORG 80F0H Main: MOV R7, #0 Loop: MOV R6, #0 DJNZ R6, $ DJNZ R6, $ DJNZ R6, $ DJNZ R6, $ DJNZ R7, Loop CPL P1.0 ; P 1 .0 取反

CPL P1.1 ; P 1 .1 取反 CPL P1.2 ; P 1 .2 取反 CPL P1.3 ; P 1 .3 取反 CPL P1.4 ; P 1 .4 取反 CPL P1.5 ; P 1 .5 取反 CPL P1.6 ; P 1 .6 取反 CPL P1.7 ; P 1 .7 取反 SJMP Main END 2、P1口条件输出实验,电路如图3-2所示。 图3-2 P1口条件输出 实验参考程序2: ORG 8000H LJMP Main ORG 8100H Main: JB P1.7,SETLED CLRLED: CLR P1.0 CLR P1.1 CLR P1.2 CLR P1.3 CLR P1.4 CLR P1.5 CLR P1.6 SJMP Main SETLED:

相关主题
文本预览
相关文档 最新文档