当前位置:文档之家› 子程序及中断实验

子程序及中断实验

子程序及中断实验
子程序及中断实验

成绩:计算机原理实验室实验报告

课程:汇编语言与微机原理

姓名:

专业:网络工程

学号:

日期:2016年12月9日

太原工业学院

计算机工程系

实验五:子程序及中断实验

实验环境PC机+Win 2007+emu8086+proteus仿真器实验日期2016.12.9 一.实验内容

实验目的:

实现子程序和中断服务子程序的设计

编写主程序实现子程序和中断服务子程序的调用

实验内容:

编写子程序设置40H中断为自定义中断服务子程序

编写中断服务子程序实现AX=AX+BX或功能自拟。

编写主程序调用子程序和中断

二.理论分析或算法分析

1.中断向量表

表的地址位于内存的00000H~003FFH,大小为1KB,用于存放256个中断的中断服务程序的入口地址;每个入口占用4 Bytes,低字为段内偏移,高字为段基址。中断向量表如下图所示:

内部中断服务程序

编写内部中断服务程序与编写子程序类似,利用过程定义伪指令PROC/ENDP 结构实现,最后用IRET指令中断返回;主程序利用INT n指令调用中断服务程序,调用前需要设置中断向量。

中断服务程序的装载方法

将已经编写好的中断服务程序的入口地址写入中断向量表中。注意:向量表所在的段地址=0;若中断类型号为n,则新偏移地址写入4×n处,新段地址写入4×n+2处即可,直接写入法或利用系统功能调用都可实现地址写入CPU执行INT N指令的过程

CPU取出INT N指令,经指令译码获知这是一条中断指令。N就是该软件中断的中断向量码。执行中断指令,首先自动将PSW、CS和IP压入堆栈保护起来,并关中断。然后,将中断向量码N乘4得到中断向量表偏移地址(段地址为0000H),从该地址开始的顺序两个单元的内容送IP,下两个单元的内容送CS。即找到服务程序入口地址,进而转向中断服务程序。服务结束后通过IRET返回断点继续执行下面的指令。

三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)源代码

mov ax, 1

mov bx, 2

lp1:code segment

assume cs:code, ds:code

st:

mov ax, code

mov ds, ax

xor ax, ax

mov es, ax

mov di, 40H*4

cli

mov ax, es:[di]

mov old, ax

mov ax, es:[di+2]

mov old+2, ax

mov ax, offset newint40

mov es:[di], ax

mov ax, seg newint40

mov es:[di+2], ax

sti

int 40h

jmp lp1

newint40 proc far

add ax, bx

mov num, ax

iret

newint40 endp

old dw ?, ?

num dw 0

code ends

end st

四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)

五.结论

.通过本次实验,是我对子程序和中断服务子程序的语句结构,中断向量表结构、中断服务程序链的实现过程有了更多的认识,通过部分中断命令有了直观的演示,是我对其有了更深的理解!

在编写单片机的程序中中断服务程序中可以定义变量如果

在编写单片机的程序中,中断服务程序中可以定义变量,如果希望下一次再进入中断的时候还可以保留变量原来的值,就需要把它设置为static型的。比如,定义一个bit型变量作为某种判断的标志。关于好不好的问题,以我现有的知识,好像是解决不了的,很抱歉 一个中断的处理过程大概是这样的: 1、现行指令结束,且没有更紧急的服务请求。 2、关CPU中断,CPU不能再响应其他任何中断源的中断请求。 3、保存中断点,通常是指保存程序计数器PC中的内容,把它压入到系统堆栈中,以便在终端服务完成后返回到原来的程序中去。 4、撤销设备的中断服务请求,如果这个中断源的中断请求不撤销的话,那么在开CPU中断后,它必然将再次请求终端服务。 5、保存硬件现场。 6、识别中断源。 7、改变设备的屏蔽状态。 8、转向中断服务程序入口,一般还要在中断服务程序中通过软件才能找到具体中断源的中断服务程序入口。 9、保存软件现场,主要指保存将要被中断服务程序破坏的通用寄存器中的内容等。 10、开CPU中断,CPU可以响应其他更高级中断源的终端服务请求,中断源之间可以实现中断嵌套。 11、执行中断服务程序。 12、关CPU中断,CPU不响应任何中断源的中断服务请求。在下一次开CPU中断之前,正在运行的程序不允许被中断。 13、恢复软件现场,恢复被中断服务程序破坏的通用寄存器中的内容等。 14、恢复屏蔽状态。 15、恢复硬件现场,主要指恢复处理机状态字PSW及堆栈指针SP等中的内容,准备返回中断点。 16、开CPU中断。 17、返回到中断点。 其中红字的部分一般用硬件实现,蓝字的部分一般用软件实现,其他可以用硬件也可以用软件实现。 从上面这个过程似乎可以得到,在执行中断服务程序之前,很多东西都被保护起来了,所以执行中断程序的时候不必担心破坏什么东西。我们可以对全局变量进行操作,也可以定义一个新的变量,这只是占用了一定的存储空间和时间的问题。 恩,我也不知道自己理解的对不对,毕竟计算机系统结构是很复杂的哈,还希望大家帮忙理解一哈

微机原理实验4——子程序的定义与调用

班级:计科1202班姓名:陈秉耀学号:201216010106 实验4——子程序的定义与调用 1、实验目的 掌握子程序编写和调用; 掌握子程序的参数传递和返回值的获取方法; 2、实验内容 实验2(2):“调用DOS中断,完成字符串的以下输入和输出操作。具体要求是:①调用INT 21H的AH=09H子功能输出提示信息“Input String:”,②调用INT 21H的AH=0AH 子功能输入一个字符串,③输出回车(ASCII码为0DH)、换行(ASCII码为0AH),④将输入字符逐一改大写后输出。 设计四个子程序,分别对应上面每一小步子功能,在主程序调用。 ============================================================================ ==== 实验报告 ============================================================================ ==== DATAS SEGMENT ;此处输入数据段代码 keynum =255 string db keynum;定义键盘需要的缓冲区 db 0 db keynum dup(0) string1 db'Input String',"$" DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 call dp1 call dp2 call dp3 call dp4 MOV AH,4CH INT 21H ;输出提示信息Input String dp1 proc

中断

填空题 (1)51系列单片机5个中断源的中断入口地址分别是INT0:;INTl:;T0:;T1:;串行口:; (2)在CPU未执行同级或更高优先级中断服务程序的情况下,中断响应等待时间最少需要个机器周期,最长需要个机器周期。 (3)中断嵌套与子程序嵌套的区别在于:一是子程序嵌套是在程序中事先安排好的;而中断嵌套是:二是子程序嵌套无次序限制,而中断嵌套只允许。 (4)CPU未执行中断程序,中断响应时间最短需个机器周期,最长需个机器周期. 选择(1)CPU响应中断后,必须用软件清除中断请求标志的有( )。 A. INT0/INT1采用电平触发方式B.INT0/INT1采用边沿触发方式 C.定时/计数器T0/T1中断D.串行口中断TI/RI (2)下列中断优先顺序排列,不可能实现的有( )。 A.T1、T0、。INT0、INT1、串行口B.INT0、T1、T0、INT1、串行口C.INT0、INT1、串行口、T0、T1 D.INT1、串行口、INT0、T0、T1 提示:将中断请求排序分成两部分,如果每部分都满足同级优先次序,则设置能实现,否则设置不能实现。 判断对错 (1)不同中断源之间可以互相中断。( ) (2)不同优先级的中断源之间可以互相中断。( ) (3)INT0、INT1、T0、串行口、T1中断优先排列顺序不能实现。( ) (4)T0、Tl、INT0、INT1、串行口中断优先排列顺序能实现。( ) (5)串行口、TO、INT0、INT1、T1中断优先排列顺序不能实现。( ) (6)串行口、INT0、T0、INTl、T1中断优先排列顺序能实现。( ) (7)INT0、INT1、串行口、T0、T1中断优先排列顺序不能实现。( ) (8)INT0、T1、INT1、T0、串行口中断优先排列顺序能实现。( ) 简答 (1)编写中断程序时,通常需要在中断入口地址区间设置一条跳转指令,跳转到中断服务程序的实际入口处。为什么要这样做? (2)什么叫中断嵌套?中断嵌套有什么限制?中断嵌套与子程序嵌套有什么区别? (3)在51系列单片机5个中断源中,中断请求标志是如何清除的? (4)在5l系列单片机中,哪几个特殊功能寄存器与中断控制有关? (5)中断源中断优先级别设置能否实现,取决于什么因素?并说明理由。 (6)51系列单片机中断优先级和中断优先权有什么区别?如何设置中断优先级? (7)在5l系列单片机中,中断是如何嵌套的? (8)在5l系列单片机中,如果CU正在执行RETI或访问IE、IP指令,则中断不能立即响应,为什么? (9)在51系列单片机中,外中断的触发方式有哪几种?如果采用电平触发方式,需要注意什么?

单片机_C语言函数_中断函数(中断服务程序)

单片机_C语言函数_中断函数(中断服务程序) 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。 (1)中断源:中断请求信号的来源。(8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))(2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程序,并在执行完之后返回被中断程序继续执行。期间涉及到CPU响应中断的条件,现场保护,现场恢复。 (3)优先级控制:中断优先级的控制就形成了中断嵌套(8051允许有两级的中断嵌套,优先权顺序为INT0,T0,INT1,T1,串行口),同一个优先级的中断,还存在优先权的高低。优先级是可以编程的,而优先权是固定的。 80C51的原则是①同优先级,先响应高优先权②低优先级能被高优先级中断③正在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。 80C51的中断系统涉及到的中断控制有中断请求,中断允许,中断优先级控制 (1)3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1 (2)中断控制寄存器:定时和外中断控制寄存器TCON(包括T0、T1,INT0、INT1),串行控制寄存器SCON,中断允许寄存器IE,中断优先级寄存器IP 具体的是什么,包括哪些标志位,在这里不讲了,所有书上面都会讲。 在这里我们讲下注意的事项 (1)CPU响应中断后,TF0(T0中断标志位)和TF1由硬件自动清0。 (2)CPU响应中断后,在边沿触发方式下,IE0(外部中断INT0请求标志位)和IE1由硬件自动清零;在电平触发方式下,不能自动清楚IE0和IE1。所以在中断返回前必须撤出INT0和INT1引脚的低电平,否则就会出现一次中断被CPU多次响应。 (3)串口中断中,CPU响应中断后,TI(串行口发送中断请求标志位)和RI(接收中断请求标志位)必须由软件清零。 (4)单片机复位后,TCON,SCON给位清零。 C51语言允许用户自己写中断服务子程序(中断函数) 首先来了解程序的格式: void 函数名() interrupt m [using n] {} 关键字 interrupt m [using n] 表示这是一个中断函数 m为中断源的编号,有五个中断源,取值为0,1,2,3,4,中断编号会告诉编译器中断程序的入口地址,执行该程序时,这个地址会传个程序计数器PC,于是CPU开始从这里一条一条的执行程序指令。 n为单片机工作寄存器组(又称通用寄存器组)编号,共四组,取值为0,1,2,3 中断号中断源 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1中断 4 串行口中断 (在上一篇文章中讲到的ROM前43个存储单元就是他们,这5个中断源的中断入口地址为: 这40个地址用来存放中断处理程序的地址单元,每一个类中断的存储单元只有8B,显然不

实验八、九 子程序、中断程序实验

实验八子程序实验 一、实验目的 1、掌握全局、局部变量的定义与作用; 2、熟悉无参子程序和有参子程序的建立和调用方法 3、进一步熟悉常用功能指令(加、减、数据类型转换、循环等(另:自学内容已经布置:数学运算指令和数据转换指令) 二、实验设备 TKPLC-1实验实训装置一台,装有STEP7软件的计算机一台,西门子编程电缆一根、连接导线若干。 三、实验内容与步骤 1、不带参数子程序调用例子:设置存储器位或字节的几种方法(注意符号的定义与使用,其它功能指令的学习包含在子程序和中断程序实验中。下同) 本程序描述了用一定值存入预定的存储器位或字节,以及清除存储区内容的几种方法 采用下列指令: FILL 设置一个或几个字 FOR...NEXT FOR...NEXT循环 R 对一位或几位置0 输入以下子程序和主程序,注意体会各指令作用及符号的使用。 子程序0功能:如果输入I0.0=1,则把VW200中值复制到VW204至VW216

子程序1功能:当输入I0.1=1时,把几个初始数复制到变量存储区。循环次数取决于VW10中的首次循环数和VW0中的最后一次循环数。当前循环次数存储在内存字VW20中,首次计数值(50)存储在累加器AC0中,计数值缓冲区首址(& VB100)存储在累加器AC1中,AC1为计数值缓冲区指针,每循环一次的功能:AC0的计数值存入AC1指针所指向的内存单元,AC1指针加2个字节,指向下一个内存字,AC0的计数值加4,直至最后一次循环。

子程序2的功能,使V100.0开始的176个位复位,V204.0开始的112个位复位。

2、带参数子程序的调用例子:求变量区和。 局部变量设置表: 子程序功能:求VW100开始的10个数据字的和。先将整形数转为双整型数,再加,指针值每次增2,循环10次。注意体会各指令作用。

中断服务程序流程图

第一讲: 第六章I/O接口原理-接口、端口、编址 回顾:微机系统的层次结构,CPU、主机、接口电路及外部设备之间的结构关联,输入/输出的一般概念。 重点和纲要:微机系统主机与外部设备之间的数据传送,包括I/O端口的寻址方式,输入/输出的传送控制方式。 讲授内容: 6. 1 输入/输出数据的传输控制方式 一、输入/输出的一般概念 1.引言 输入/输出是微机系统与外部设备进行信息交换的过程。输入/输出设备称为外部设备,与存储器相比,外部设备有其本身的特点,存储器较为标准,而外部设备则比较复杂,性能的离散性比较大,不同的外部设备,其结构方式不同,有机械式、电动式、电子式等;输入/输出的信号类型也不相同,有数字信号,也有模拟信号;有电信号,也有非电信号;输入/输出信息的速率也相差很大。因此,CPU与外部设备之间的信息交换技术比较复杂。 CPU与外设之间的信息交换,是通过它们之间接口电路中的I/O端口来进行的,由于同一个外部设备与CPU之间所要传送的信息类型不同,方向不同,作用也不一样(例如数据信息、状态信息、控制信息、输入/输出等),所以接口电路中可以设置多个端口来分别处理这些不同的信息。 2.输入/输出端口的寻址方式 微机系统采用总线结构形式,即通过一组总线来连接组成系统的各个功能部件(包括CPU、内存、I/O端口),CPU、内存、I/O端口之间的信息交换都是通过总线来进行的,如何区分不同的内存单元和I/O端口,是输入/输出寻址方式所要讨论解决的问题。

根据微机系统的不同,输入/输出的寻址方式通常有两种形式:(1).存储器对应的输入、输出寻址方式 这种方式又称为存储器统一编址寻址方式或存储器映象寻址方式。 方法:把外设的一个端口与存储器的一个单元作同等对待,每一个I/O端口都有一个确定的端口地址,CPU与I/O端口之间的信息交换,与存储单元的读写过程一样,内存单元与I/O端口的不同,只在于它们具有不同的的地址。优点: ①CPU对I/O端口的读/写操作可以使用全部存储器的读/写操作指令,也可 以用对存储器的不同寻址方式来对I/O端口中的信息,直接进行算术、逻辑运算及循环、移位等操作。 ②内存与外设地址的分配,可以用统一的分布图。 ③不需要专门的输入、输出操作指令。 缺点: ①内存与I/O端口统一编址时,在地址总线根数一定的情况下,使系统中 实际可以直 接寻址的内存单元数减少。 ②一般情况下,系统中I/O端口数远小于内存单元数,所以在用直接寻址方 式来寻址这些端口时,要表示一个端口地址,必须用与表示内存单元地址相同的字节数,使得指令代码较长,相应地读/写执行时间也较长,这对提高系统的运行速度是不利的。 Mortorola公司的M6800CPU等均采用这种寻址I/O端口的方式。 3. CPU与外设之间所传送的信息类型 CPU与I/O端口之间所交换的信息,可以有下列几种类型: ①数据信息:包括数字量、模拟量、开关量等,可以输入、也可以输出 ②状态信息:这是I/O端口送给CPU的有关本端口所对应的外设当前状态 的信息。供CPU进行分析、判断、决策。 ③控制信息:这是CPU送给I/O端口的控制命令,使相应的外部设备完成 特定的操作。 数据信息、状态信息和控制信息是不同类型的信息,它们所起的作用也不一样。但在8086/8088微机系统中,这三种不同类型的信息的输入、输出过程是相同的。为了加以区分,可以使它们具有不同的端口地址,在端口地址相同的情况下,可以规定操作的顺序,或者在输入/输出的数据中设置特征位。

计算机组成原理 中断实验

实验五中断实验 实验地点:格致A315 实验日期:2016年12月29日 一、实验目的 学习和掌握中断产生、响应、处理等技术; 二、实验说明及内容 说明: 1.要求中断隐指令中执行关中断功能,如果用户中断服务程序允许被中断,必须在中断服务程序中执行EI开中断命令。 2.教学机的中断系统共支持三级中断,由三个无锁按键确定从右到左依次为一、二、三级中断,对应的INT2、INT1、INT0的编码分别是01、10、11,优先级也依次升高。这决定了它们的中断向量(即中断响应后,转去执行的程序地址)为XXX4、XXX8、XXXC;可以看到,每级中断实际可用的空间只有四个字节,故这个空间一般只存放一条转移指令,而真正的用户中断服务程序则存放在转移指令所指向的地址。 3.用户需扩展中断隐指令、开中断指令、关中断指令、中断返回指令及其节拍。内容: 1.扩展中断隐指令。 2.扩展开中断指令EI、关中断指令DI、中断返回指令IRET。 3.确定中断向量表地址。中断向量表是以XXX4H为首地址的一段内存区。高12位由用户通过置中断向量用的插针(在三个无锁按键下方)确定。三级中断对应的中断向量为XXX4H、XXX8H、XXXCH。当有中断请求且被响应后,将执行存放在该中断的中断向量所指向的内存区的指令。 4.填写中断向量表。在上述的XXX4H、XXX8H、XXXCH地址写入三条JR OFFSET转移指令,OFFSET分别对应三段中断服务程序的相对地址。但在本仿真终端中输入时,用户不需要计算偏移量,直接输入要转向的绝对地址即可。 5.编写中断服务程序。中断服务程序可以放在中断向量表之后,中断服务程序可实现在程序正常运行时在计算机屏幕上显示与优先级相对应的不同字符; 6.编写主程序。可编写一死循环程序,等待中断;

计算机组成原理中断实验报告

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

指令执行流程图; ?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。

三菱FX系列中断指令与中断程序

三菱FX系列中断指令与中断程序 主讲:雷老师 湖北祥辉电气自动化培训中心 https://www.doczj.com/doc/769483799.html, 三菱FX系列PLC的中断指令[IRET、El、DI(FNC03、FNC04、FNC05)] 1.中断指令的使用说明 (1)IRET:中断子程序返回主程序;EI:允许中断;DI:禁止中断。图6-19所示为中断指令使用说明。EI~DI为允许中断区间,当中断条件出现在主程序此区间内则转向执行有中断标号的子程序。 (2)中断子程序开始有中断标号,由IRET返回。中断子程序一般出现在主程序后面。中断标号必须对应允许中断的条件。 在中断条件0~8中,0~5表示与输入条件X0~X5对应,在图6-19中中断标号1001表示X0为1在上升沿执行中断子程序I,I101表示X1为1在上升沿执行子程序Ⅱ;6~8为定时器中断条件(标号),如I610表示指定由定时器6每计时10ms执行一次中断子程序。同理1899表示由定时器8每计时99ms执行一次中断子程序。 (3)中断子程序可嵌套最多二级,多个中断信号同时出现,中断标号低的有优先权。 (4)对中断标号为I00□~I50□的输入中断,对应M8050~M8055为1时中断被禁止。对中断标号为I6□□~I8□□的定时器中断,对应M8056~M8058为1时中断被禁止。 (5)在特殊场合主程序设计中采用中断指令,可以有目的预先应付突发事件。中断指令也适用于一些必须定时监控诊断的主程序中。 (6)中断要用EI允许中断指令和中断返回IRET,中断中需要使用计时器的话,请使用T192-T199和T246-T249 2.应用举例 (1)外部输入中断子程序。图6-20所示为一外部输入中断子程序。在主程序执行时,当特殊辅助继电器M8050=0时,标号I001的中断子程序允许执行。当PLC外部输入信号X0有上升沿信号时,执行中断程序一次,执行完毕返回主程序。Y10由M8013驱动每秒内一次,而Y0输出是当X0在上升沿脉冲时,驱动其为“1”信号,此时Y11输出就由M8013当时状态所决定。若X10=1,则M8050=1,I001中断子程序禁止执行。 湖北祥辉电气自动化培训中心https://www.doczj.com/doc/769483799.html,

51单片机串行口中断服务程序

51单片机串行口中断服务程序 ---------------------------------------------------------------------------- //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理 //编程:聂小猛。该资料来自“51单片机世界”https://www.doczj.com/doc/769483799.html,/~dz2000,欢迎访问。 //出入均设有缓冲区,大小可任意设置。 //可供使用的函数名: //char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。 //getline(char idata *line, unsigned char n); 获取一行数据回车结束,已处理backspce和delete,必须定义最大输入字符数 //putinbuf(uchar c);模拟接收到一个数据 //putbyte(char c);放入一个字节到发送缓冲区 //putbytes(unsigned char *outplace,j);放一串数据到发送缓冲区,自定义长度 //putstring(unsigned char code *puts);发送一个字符串到串口 //puthex(unsigned char c);发送一个字节的hex码,分成两个字节发。 //putchar(uchar c,uchar j);发送一个字节数据的asc码表达方式,需要定义小数点的位置 //putint(uint ui,uchar j);发送一个整型数据的asc码表达方式,需要定义小数点的位置 //CR;发送一个回车换行 //************************************************************************* #include //该头文件包括了51,52,80320的特殊寄存器,用在51,52上也可 #define uchar unsigned char #define uint unsigned int #define OLEN 64 /* size of serial transmission buffer */ idata unsigned char outbuf[OLEN]; /* storage for transmission buffer */ unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置 unsigned char idata *putlast=outbuf; //最后放入发送缓冲区的字节位置 #define ILEN 2 /* size of serial receiving buffer */ idata unsigned char inbuf[ILEN]; unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置 unsigned char idata *getlast=inbuf; //最后取走的字节位置 bit outbufsign; //输出缓冲区非空标志有=1 bit inbufsign; //接收缓冲区非空标志有=1 bit inbufful; //输入缓冲区满标志满=1 #define CR putstring("\r\n") //CR=回车换行 //***************************** //放入一个字节到发送缓冲区 putbyte(char c) {uchar i,j; ES=0; /*暂停串行中断,以免数据比较时出错? */ if (outlast==putlast ) { i=(0-TH1); do{i--;j=36; do {j--;}while(j!=0);

Vxworks中断服务程序解析

Vxworks中断服务程序解析 中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。为及时响应外部中断,防止中断丢失.中断服务程序应该尽量的小,只把最必要的任务放在中断服务程序里面执行。一般在系统启动,硬件设备成功初始化之后将ISR与中断向量挂上:也可以在系统启动后的任何时刻挂中断向量。调试中经常采用后一种方式。在VxWorks中有两个不同的函数可提供挂中断:intConnect和pciIntConnect。两者的区别是intConnect使用的中断向量是独占的,pcilntConnect则可在各个不同的ISR之间共享中断向量。实际上pcilntConnect 内部调用了 intConnect函数,在内部使用一个链表来管理多个不同的ISR。pcilntConnect 要求每次进入ISR都要检查硬件的寄存器,证实中断的确是由ISR服务的硬件产生。如果硬件的寄存器表明该硬件并未产生中断,则ISR立即退出,以让挂在同一个中断向量上的其它ISR有机会检查是否有中断产生。pcilntLib.c中的代码清楚的说明了这个问题:void pciInt (int irq ){ PCLlNT RTN *pRtn; for (pRm = (PCI_INT_RTN*)DLL_FIRST(&pcilntList[irq]); pRtn!=NULL; pRtn =(PCI_INT_RTN*)DLL_NEXT(&pRtn->node)) (*pRtn->routine) (pRtn->parameter); } 当PCI总线上有中断发生时,系统调用void pcilnt(int irq)函数,再由pciInt使用内部的链表来依次调用挂在该中断上的ISR。如果某个ISR不能正常退出,就会影响到其它ISR的运行。在调试时为了检查中断向量是否已经和ISR可靠的连接上,可以在命令行上或程序中直接调用pciInt来查看ISR是否被触发。在硬件确定的情况下,可以小心设计保证各个硬件使用不同的中断,这样对PCI上的设备也可直接使用intConnect来挂中断。 需要说明的是ISR挂上中断向量的过程不是简单的在向量表中设置中断向量值。VxWorks 除了设置中断向量值以外,还在与中断向量相连的ISR加上了一层薄薄的包装,包括IsR执行前保存寄存器值.设置堆栈以及IsR执行后恢复寄存器和堆栈。在中断频繁的场合,系统中中断堆栈有可能被耗尽而溢出。为了避免上述情况发生,必须修改系统的中断堆栈大小,即在config.h中加入以下代码: #define INCLUDE_KERNEL #define ISR_STACK_SIZE 0xl000 //表示系统中中断堆栈的大小为4k 由于中断处理程序的特殊性,中断处理程序中不能使用可能导致阻塞的函数,如printf,semTake等,具体不可使用的函数列表可以在<>中查到。有时候为了调试方便,希望在ISR中打印一些信息,系统提供了一个与prinf等价的函数sysLog,该函数可接受 7个参数。它是非阻塞的。比较而言,prinf函数要在打印任务完成后才返回,sysLog只把打印任务放到系统的打印队列中就返回。在ISR中虽然不可以使用semTake,但可以使用semGive(互斥类型的除外)。一般使用semTake和semGive在ISR和普通程序间通信:当一个中断产生,ISR 完成必要的任务后,调用semGive通知另外一个使用semTake等待ISR信号的任务,该任务收到semGive释放的信号后,继续完成ISR中不便处理的任务。

基与89C51单片机外部中断实验

实验六外部中断实验一 一、实验要求 1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2.P1口上拉接8个LED; 3.在Keil软件中编写程序,对LED显示进行控制,显示方式有两种:(1)0、7亮,1、 6亮,2、5亮,3、4亮,0、7亮循环;(2))3、4亮,2、5亮,1、6亮,0、7亮, 3、4亮循环。 4.在P3.2连接一个按键,当按键弹起时引脚为高电平,当按键按下时引脚为低时平 5.编写程序:系统对LED显示进行控制,一开始显示方式为(1),当按下P3.2连接 的按键时,系统在(1)和(2)之间切换显示方式 二、实验目的 1.学习端口输入输出的高级应用 2.掌握LED查表显示法 3.掌握外部中断的工作原理 4.掌握外部中断程序设计 三.实验说明 (条理清晰,含程序的一些功能分析计算) 1.程序中void my_int(void) interrupt 0 using 1 { flag=!flag;} //中断子程序是中断子程序,就是按键按下中断一次。 2.以下是灯亮的方式改变,即flag取反一次就改变一次。通过i++或i—实现 变化。 while(1) { P1=LED[i]; //在P1口显示灯亮的方式 delay_ms(500); //延时0.05s if(flag) //判断P3^2开关是否按下 {i++; if(i>=4) //如果灯显示从两边到中间要在回到两边 i=0;} else{i--; if(i<0)//同上 i=3;} 四、硬件原理图及程序设计 (一)硬件原理图设计

(二)程序流程图设计 是 开始 定义变量 i=0;flag=1; P0=LED[i]; Flag ? i++; 否 i--; P3.3按下时进行中 断 Flag=flag!;

单片机外部中断详解及程序

单片机外部中断详解及程序 单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。 实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。电路结构和接线不变,仅把程序改为下面的形式。 #include ;

unsigned int t=500; //定义一个全局变量t,并设定初始值为500次 //===========延时子函数,在8MHz晶振时约 1ms============= void delay_ms(unsigned int k) { unsigned int i,j; for(i=0;i

习题(中断与接口及答案)

中断与接口及答案 一.单项选择题 1. 已知MCS-51单片机系统晶振频率为12MHZ,SMOD=1,串行口工作于方式2的波特率为()。A. 3750K B. 1875K C. 2400K D. 1200K 2. MCS-51单片机T0作为计数器工作于不受外部信号INTO控制,T1作为定时器,T0工作于方式0,T1工作于方式1,其方式控制字的内容为()。 A. 00H B. 14H C. 17H D. 80H 3. 控制定时器工作方式的寄存器是()。 A. TCON B. PCON C. SCON D. TMOD 4. MCS-51单片机的中断允许触发器内容为83H,CPU将响应的中断请求是()。 A. INTO,INT1 B. T0, T1 C. T1, 串行接口 D. INTO,T0 5. 设定时器/计数器T0工作于方式3,则TH0作为一个独立的8位定时器,它的运行由控制位()。 A. GATE B. INTO C. TR0 D. TR1 6. 当MCS-51进行多机通信时,串行口的工作方式应选择()。 A.方式0 B.方式1 C. 方式2或方式3 D. 方式2 7. 8031单片机的串行口的中断程序入口地址为()。 A.001BH B. 0023H C. 000BH D. 0003H 8. 已知单片机系统的fosc=6MHZ,执行下列延时程序的时间为()。 DY2:MOV R6,#2 DLP1:MOV R7,#250 DLP2:DJNZ R7,DLP2 DJNZ R6,DLP1 RET A.1ms B. 1.5ms C. 2ms D. 4ms 9. 串行口中断入口地址是()。 A. 0003H B. 000BH C. 0013H D. 0023H 10. 若MCS-51单片机的晶振频率为24MHZ,则其内部的定时器/计数利用计数器对外部输入脉冲的最高计数频率是()。 A. 1MHZ B. 6MHZ C. 12MHZ D. 24MHZ 11. MCS-51串行口工作于方式2时,传送的一帧信息为()。 A. 8位 B. 16位 C. 11位 D. 12位 12. MCS-51单片机有()内部中断源。 A. 2个 B. 3个 C. 4个 D. 5个 13. T1作为计数器,工作于方式2,不需门控位参于控制,其控制字为()。 A. 60H B. 06H C. 66H D. 00H 14. 已知(60H)=23H,(61H)=61H,运行下列程序62H内容为()。 CLR C MOV A,#9AH SUBB A,60H ADD A,61H DA A MOV 62H,A A. 38H B. D8H C. DBH D. 3EH

定时中断T0服务程序参考框图

软件程序: ORG 0000H LJMP MAIN ORG 000BH LJMP PIT0 ORG 001BH LJMP PIT1 ORG 0100H MAIN: MOV SP,#FH ;设堆栈指针 MOV SCON,#00H ;设置串行口为方式0 MOV TMOD,#11H ;T0和T1初始化为方式1 MOV TH0, #3CH ;置时间常数,T0和T1定时100ms MOV TL0, #OB0H MOV TH1, #3CH MOV TL1, #0B0H MOV 50H, #96H ;T0中断次数计数单元 MOV 51H,#14H ;T1中断次数计数单元 MOV R1, #00H MOV R2, #00H MOV R0, #40H ;显示缓冲单元起始地址 DISP0:MOV @R0, #00H ;显示缓冲单元清零 INC R0 CJNE R0, #4CH,DISP0 MOV 44H,#01H ;设置通道号的显示缓冲单元 MOV 48H,#02H MOV R7,#40H ;置当前通道显示缓冲单元首址 MOV 53H,#40H SETB ETO ;开中断 SETB ET1 SETB EA SETB TR0 ;启动定时器 SETB TR1 LP: MOV R7, 53H ;调显示子程序 ACALL DISP AJMP JP 定时器TO中断服务程序 PIT0: MOV TH0, #3CH ;重置时间常数 MOV TL0, #OBOH DJNZ 50H,#96H PUSH ACC PUSH 03H ACALL WDXJ ;调温度巡检子程序 POP 03H POP ACC

DH0: RET1 定时器T1中断服务程序 PIT1: MOV TH1,#3CH ;重置时间常数 MOV TL0, #OBOH DJNZ 51H,DH1 ;计数20次即定时2S MOV 51H,#14H INC R2 CJNE R2,#03H,CNL0 ;根据R2中的内容确定显示缓冲区首址 MOV R2,#00H CNL0: CJNE R2,#00H,CNL1 MOV 53H,#40H SJMP DH1 CNL1: CJNE R2,#01H,CNL2 MOV 53H,#40H SJMP DH1 CNL2: MOV 53H,#48H DH1: RETI 显示子程序 DISP: CLR P3.7 ;输出锁存 MOV R3,#01H ;置显示字位码 MOV DPTR,#TAB DISP1:MOV A,R3 MOV SBUF,A ;字位码送串行口 JNB T1,$ ;等待串行转送结束 CLR T1 ;清串行中断标志 MOV A,R7 MOV R0,A MOV A,@RO ;取代显示的数据 MOVC A,@R0 ;查表求字段码 MOV SBUF, A ;字段码送串行口, JNB T1,$ ;等待串行中断标志 SETB P3.7 ;允许输出显示 ACALL DEL ;调延时子程序 MOV A,R3 JB ACC.3,DISP2 ;4位显示完否 RL A MOV R3,A INC R7 CLR P3.7 ;输出锁存 AJNP DISP1 DISP2:RET TAB : DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH DEL: PUSH 07H ;延时子程序

嵌入式-中断实验

实验五中断控制实验 (一)实验目的 了解中断的作用; 掌握嵌入式系统中断的处理流程; 掌握ARM中断编程。 (二)实验设备 计算机;ARM硬件仿真器;ARM开发板 (三)实验硬件设置 在做实验之前,先将开发板电源接好,将仿真器的USB连线与电脑相连,通电,然后按核心板的复位键。 (四)实验原理 1. 中断的基本概念 CPU与外设之间传输数据的控制方式通常有三种:查询方式、中断方式和DMA方式。DMA 方式将在后续实验中说明。查询方式的优点是硬件开销小,使用起来比较简单。但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了CPU的利用率。为了解决这个矛盾,通常采用中断传送方式:即当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器; 或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU再返回并继续执行原来被中断的主程序。这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高。能够向CPU发出中断请求的设备或事件称为中断源。系统引入中断机制后,CPU与外设(甚至多个外设)处于“并行”工作状态,便于实现信息的实时处理和系统的故障处理。中断方式的原理示意图如下所示。 图5-7 中断处理示意图 1)中断响应 中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。 CPU响应中断是有条件的,如内部允许中断、中断未被屏蔽、当前指令执行完等。 2)中断服务子程序 CPU响应中断以后,就会中止当前的程序,转去执行一个中断服务子程序,以完成为相应设备的服务。中断服务子程序的一般结构如下图所示。

中断习题和参考题参考答案(课后)

中断习题和参考题 1、什么是中断向量?中断向量表是什么?非屏蔽中断的类型为多少?8086 中断系统优先级顺序怎样? ①所谓中断响量,实际上就是中断处理子程序的入口地址,每个中断类型对应一个中断响量 ②中断向量按照中断类型的顺序在内存0段0单元开始有规则排列的一张表 ③类型02H ④内部中断>非屏蔽中断>可屏蔽中断>单步中断 2、8259的全嵌套和特殊全嵌套方式有何异同?优先级自动循环是什么?什么特殊屏蔽方式?如何设置成该方式? ①全嵌套方式是8259A最常用的工作方式,只有在单片情况下,在全嵌套方式中,中断请求按优先级0-7进行处理,0级中断的优先级最高。特殊全嵌套方式和全嵌套方式基本相同,只有一点不同,就是在特殊全嵌套方式下,还可满足同级中断打断同级中断,从而实现一种对同级中断请求的特殊嵌套,而在全嵌套方式中,只有当更高级的中断到时,才会进行嵌套。 ②优先级自动循环方式一般在系统中多个中断源优先级相等的场合。在这种方式下,优先级队列是在变化的,一个设备受到中断服务以后,它的优先级自动降为最低。 ③仅仅禁止同级中断嵌套,开放高级中断和低级中断④两步:1步设置OCW 3 , 设置成特殊屏蔽方式,2步设置OCW 1 屏蔽某级中断。 3、8259有几种中断结束方式?应用场合如何? 1.中断自动结束方式,不需要设置中断结束命令,在单片系统中且不会出现中断嵌套时用。 2.一般中断结束方式,在全嵌套方式下用。 3.特殊中断结束方式,在任何场合均可使用。 4、8259的ICW 2 与中断类型码有什么关系?说明类型码为30H,36H,38H的异同。 ①高五位相同,低三位不同(中断类型码的低三位和引脚的编码有关,ICW2的低三位无意义) ②30H,36H高五位相同,ICW 2=30H, 30H为8259A IR 对应的中断类型码, 36H为8259A IR 对应的中断类型码。 38H ICW 2=38H 38H为8259A IR 对应的中断类型码

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