收藏 分销(赏)

学习情境7编辑、创建元件和中断系统.doc

上传人:仙人****88 文档编号:7377958 上传时间:2025-01-01 格式:DOC 页数:28 大小:8.78MB 下载积分:10 金币
下载 相关 举报
学习情境7编辑、创建元件和中断系统.doc_第1页
第1页 / 共28页
学习情境7编辑、创建元件和中断系统.doc_第2页
第2页 / 共28页


点击查看更多>>
资源描述
学习情境7 编辑、创建元件和中断系统 知识点: 1.了解原理图元件库编辑器设计环境 2了解已有元器件及元件库的有关信息 3.掌握制作新元器件的方法; 4.掌握编辑元件库中已有元件的方法; 5.掌握利用定时器中断方式完成定时、中断服务程序的执行过程; 6.掌握80C51单片机中断系统及功能。 技能点: 1.运用Protel 99 SE 的原理图元件编辑器创建具有自己特色的元件库和元件; 2.能按照格式编写外部中断的服务程序; 3.会编写定时/计数器中断的服务程序。 学习情境目标 本学习情境能运用Protel 99 SE 原理图库编辑器编辑创建元件库,基本掌握单片机中断系统的结构和功能,学会能用定时器中断方式来完成定时和计数并熟练编写相关程序。 任务一 编辑、创建元件 任务目标 元件库是设计原理图的基本单元,如同盖房子的砖瓦一样。尽管Protel 99 SE软件内置元件库几乎包括了所有电子元器件,但是由于电子器件发展迅猛,有时在内置元件库中无法找到需要的元器件,这时就需要用户建立满足自己需求的元件库及元件。 本次任务目标: (1)设置元件库编辑器设计环境; (2)建立一个新元件库mySchlib1.lib,其中包括多个自创的元件,如图7.1、图7.2; (3)将Miscellaneous Device元件库中已有元件(如图7.3),编辑修改成图7.4所示的多路输出变压器。 图7.1目标元件(1) 图7.2目标元件(2) 任务分析 有三种途径可以获得所需的元件库:Protel 99 SE内置元件库(如Sim.ddb、Miscellaneous Devices.ddb等)、第三方提供的元件库(通过Internet网上不定期从各大公司网站上下载)、用户自定义的元件库。本次任务即为第三种途径。 每个元器件均由三部分组成,即外形、引脚和相关信息。如电阻的外形为长方形,其功能由两个引脚实现;74LS138(三—八线译码器)的外形也为长方形,其功能由16个引脚实现,其中16脚接电源正极、8脚接地。 图7.3 原始元件 图7.4目标元件(3) 任务实施过程 1、启动元件库编辑器。 在当前设计管理器环境下,执行菜单命令File/New…,进入“New Document”对话框,如图7.5所示。选择原理图元件库编辑器图标,双击该图标或单击OK按钮,系统在当前设计管理器中创建一个新元件库文件,修改文件名为:mySchlib1.lib,然后双击元件库mySchlib1.lib文件图标,进入原理图元件库编辑器工作界面,如图7.6所示 。 图7.5 “New Document”对话框 图7.6 元件库编辑器工作界面 2、元件库编辑器环境设置 (1)编辑区调整。元件库编辑器的编辑区有一个十字坐标轴,将元件编辑区划分为四个象限,即右上角为第一象限,左上角为第二象限,左下角为第三象限,右下角为第四象限。一般元器件的编辑在第四象限进行,将光标对准第四象限,用Page Up键将窗口放大到可以清楚地看到可视栅格。 (2)打开元件库管理器。点击View/Design Manager可打开设计元件库管理器,如图3-7所示。单击图中Browse SchLib标签,可调出元件库管理器,有四个区域:Components(元件)域 、Group(组)域 、Pins(引脚)域 、Mode(模式)域。 图7.7 元件库管理器 Components元件区域:主要功能是查找、选择元件。当打开一个元件库时,元件列表中显示本元件库内所有元件名称。取用某一元件时,只需将光标移动到该元件名称上,单击Place按钮或直接双击该元件名称即取出该元件。 ●Mask:设置筛选元件的条件,“*”表示列出库中所有元件,其下方显示库中满足条件的所有元件名称。 ●“<<” :选取元件库中第一个元件。 ●“>>”:选取元件库中最后一个元件。 ●“>” :选取当前元件的后一个元件。 ●“<” :选取当前元件的前一个元件。 ●Place:将所选择元件放置到电路图中。 ●Find:搜索所需元件或元件库。 ●Part:用分数来表示内含多功能模块的元件(即复合封装元件),分子为元件当前功能模块号,分母为元件内含功能模块总数。 Group区域:主要功能是添加/删除元件集的元件,可对其进行描述,并可对已用该元件的电路原理图进行刷新。 注意:元件集是指共用元件图形符号的元件,如7400元件集含有74LS00、7400、74ALS00等元件,它们都是非门元件,引脚排列和引脚名都完全一致,它们之间可以相互代替使用。 ●Add:添加指定元件到当前元件集中。 ●Del:从当前元件集中删除指定元件。 ●Description:对当前元件集描述,如默认编号、封装名、所在库等信息。 ●Update Schematics:更新电路中有关该元件的信息。 Pins区域:主要功能是显示当前元件的引脚信息,如引脚名称和状态等。 ●Sort by Name:指定按名称排列显示。 ●Hidden Pins:设置是否在元件符中显示隐含引脚。 Mode 区域:主要功能是指定元件模式, 默认Normal模式。 (3)个性化环境设置。执行菜单命令Options/ Preferences… ,进入图7.8所示对话框,将Pin Number Margin值改为10。 图7.8 参数设置对话框 执行菜单命令Options/Document Options…,调出图7.9所示对话框,设置图纸为A4、水平放置。 图7.9 库编辑器工作参数对话框 3、绘制新元件 (1)绘制74LS138(如图7.1): 步骤1:绘制元件外框。执行菜单命令Place/Rectangle,或SchLibDrawing Tools中按钮,一个矩形方块跟着鼠标移动,将方块移到第四象限,使其左上角与坐标原点(X:0,Y:0)重合,单击鼠标左键将矩形方块的左上角固定,拖动鼠标确定矩形为60mil×90mil,如图3-10所示。 步骤2:放置引脚。执行菜单命令Place/Pins,或SchLibDrawing Tools上按钮,鼠标带动一端像火柴头的一个引脚移动,放置引脚到适当位置,单击鼠标确定。依次将16个引脚放置完成,如图7.11所示。 注意:放置引脚时可按Space键调整引脚角度,引脚的火柴头必须向外放置。 图7.10绘制元件外框 图7.11 放置引脚 步骤3:修改各引脚属性。对图7.11中引脚0左键双击(或选中引脚后按Tab键),调出其引脚属性对话框,修改各项值如图7.12所示,引脚名(Name)改为A,引脚号(Number)改为1,放置方向改为1800,引脚电气类型(Electrical Type)为Input型,引脚长(Pin Length)改为20,其它引脚修改时参照如下进行。 ● 引脚1 Name为A、Orientation为1800、Electrical Type为Input、Pin Length为20。 ● 引脚2 Name为B,Orientation为1800、Electrical Type为Input、Pin Length为20。 ● 引脚3 Name为C,Orientation为1800、Electrical Type为Input、Pin Length为20。。 ● 引脚4 Name为G\2A,Orientation为1800、Electrical Type为IO、Pin Length为20。 ● 引脚5 Name为G\2B,Orientation为1800、Electrical Type为IO、Pin Length为20。 ● 引脚6 Name为G1,Orientation为1800、Electrical Type为IO、Pin Length为20。 ● 引脚7 Name为Y\7\,Orientation为00、Electrical Type为Output、Pin Length为20。 ● 引脚8 Name为GND,Orientation为00、Electrical Type为Power、Hidden为√、Pin Length为20。 ●引脚9 Name为Y\6\,Orientation为00、Electrical Type为Output、Pin Length为20。 ●引脚10 Name为Y\5\,Orientation为00、Electrical Type为Output、Pin Length为20。 ●引脚11 Name为Y\4\,Orientation为00、Electrical Type为Output、Pin Length为20。 ●引脚12 Name为Y\3\,Orientation为00、Electrical Type为Output、Pin Length为20。 ●引脚13 Name为Y\2\,Orientation为00、Electrical Type为Output、Pin Length为20。 ●引脚14 Name为Y\1\,Orientation为00、Electrical Type为Output、Pin Length为20。 ●引脚15 Name为Y\0\,Orientation为00、Electrical Type为Output、Pin Length为20。 ●引脚16 Name为VCC,Orientation为00、Electrical Type为Power、Hidden为√、Pin Length为20。 图7.12设置引脚属性对话框 图7.13 引脚电气类型选择 技巧1:当需要输入字符上带有一横的字符时,可以使用“字符\”来实现。如在引脚名处输入“G\2A” 来实现2A、输入“Y\7\” 来实现等。 技巧2:引脚电气类型(Electrical Type)共有如图7.13所示的八种,读者应结合前面学过的《电路基础》、《模拟电路》、《数字电路》等课程知识来选取每个引脚的电气类型:输入型Input、输入输出型IO、 输出型Output、开路集电极型OpenCollector、无源型Passive、高阻型HiZ、发射极型Emitter、电源型Power。 步骤4:给元件命名。执行菜单命令Tools/Rename Component…,调出元件更名对话框如图7.14所示。填写“74LS138”后,点击OK即可。 步骤5:填写元件相关信息描述。执行菜单命令Tools/Description…,调出元件描述对话框如图7.15所示。填写默认编号(Default Designator)为“U?”、默认封装1(Footprint 1)为“DIP16”后,点击OK即可。 至此,mySchlib1.lib库中已有第一个元器件74LS138。 图7.14 给新元件命名 图7.15 填写元件相关描述 (2)绘制多功能模块元件74LS112(如图7.2)。 步骤1: 执行菜单命令Tools/New Component,调出图7.14的新元件名填写对话框,输入元件名为74LS112,点击OK关闭对话框。 步骤2:绘制外框、放置引脚。同绘制74LS138的外框方法一样,在打开的空白图纸的第四象限绘制出一个60mil×60mil的矩形,并放置引脚,如图7.16所示。 步骤3:修改各引脚属性。依次双击各个引脚(或选中引脚后按Tab键),调出其引脚属性对话框修改各项值,如图7.17是第一个引脚修改的对话框。第一个功能模块绘制完后如图7.18所示。 图7.16 绘制外框、放置引脚 图7.18 第一个功能模块绘制完成 步骤4:产生元件第二个功能模块。执行菜单命令Tools/New Part,元件库管理器的上半部分变为如图7.19所示,同时编辑区打开一张新空白图纸,用于绘制元件的第二模块,Part区域已经变为2/2。 步骤5:回到已画好的第一功能模块,单击主工具栏中按钮,将已绘制好的第一功能模块(图7.18)全部选定,执行Edit/Copy命令,选择左上脚为参考点,复制第一功能模块。 步骤6:执行Edit/Paste命令,将复制内容粘贴到Part值为2/2(即第二功能模块)的元件库编辑图纸中,修改第二功能模块的引脚属性,如图7.20所示。 步骤7:隐藏电源正、负引脚。将第一模块、第二模块中的VCC、GND属性对话框调出,在其Hidden项后打上√即可。 步骤8:填写元件相关描述。执行菜单命令Tools/Description…,填写默认编号为“U?”、默认封装1为“DIP16”。至此,mySchlib1.lib库中又有一个新元器件74LS112制作完成。 4、编辑已有元件库中元件 (1)执行菜单命令Tools/New Component,调出7.15所示的新元件名填写对话框,输入元件名为“多路输出变压器”,点击OK关闭对话框。 (2)打开软件自带元件库。执行菜单命令Files/Open…,在路径C:\Program Files\Design Explorer 99 SE\Library\Sch中找到Miscellaneous Devices.lib元件库,并双击其名打开该库,找到需要修改的元器件TRANS5,如图7.3所示,将其复制到上述(1)中的“多路输出变压器”元件的图纸中。 (3)去掉图7.9中Snap的√,将变压器磁棒加长,利用复制、剪切、粘贴、移动等功能,将图7.3修改为图7.21。 图7.17 修改各个引脚属性 图7.19 元件库管理器的上半部分 图7.20 第二功能模块 图7.21 绘制好的多路输出变压器 (4)重新加上图7.9中Snap的√,利用功能按照图7.4所示添加其它引脚,修改相关引脚属性:所有引脚名、引脚号码不显示,其电气类型均为Output,Pin Length均为20。 (5)填写元件相关描述。执行菜单命令Tools/Description…,填写默认编号为“T?”。 最后自创元件库mySchlib1.lib中包含了三个元器件,如图7.22所示。 图7.22 元件库mySchlib1.lib中包含三个元器件 图7.23 添加自创元件库mySchlib1.lib 5、保存及调用自创元件库 (1)执行菜单命令File/Save,保存自创元件库myschlib1.lib文件,注意保存的路径及文件名,本例为D:\电信05308王芳\Mydesign2.ddb。 (2)回到原理图编辑环境,执行菜单命令Design/Add/Remove Library,添加自创的元件库mySchlib1.lib所在数据库MyDesign2.ddb,如图7.23所示。 (3) 和其它元件库一样使用自创元件库mySchlib1.lib及其库中元件,如图7.24所示。 图7.24 调用自创元件库mySchlib1.lib中元件 实训练习 [实训题1] 在继电器控制系统中,经常需要实训图7.1所示的14个元件,试建立元件库ZJ1.lib,并画出这些元件。 实训图7.1 [实训题2] 用实训题1中元件画实训图7.2所示继电器控制电路图。 实训图7.2 [实训题3] 试建立元件库ZJ2.lib,其中包含以下四个元件:D(如实训图7.3)、74183B(元件外形尺寸为100mil×60mil,引脚长为30mil,A、B、Cn为输入引脚,S、Cn+1为输出引脚,如实训图7.4)、7406(有六个功能模块,如实训图7.5)、54ALS520(如实训图7.6)。 实训图7.3 实训图7.4 实训图7.5 实训图7.6 任务二 监控彩灯 任务目标 用按键(采用外部中断方式)控制彩灯的运行。通过按动按键,彩灯在三种闪亮方式(左移、右移和自定义花样)之间切换。通过用外部中断的方式对彩灯控制的实现,学会使用单片机的外部中断实现各种控制功能,逐步掌握中断相关知识和技能。电路如图6.16所示。 任务描述 一旦按下P3.2所接按键后,P3.2口线上会出现这样两个变化,第一,口线上出现由高到低的变化,即出现下降沿。第二,P3.2按住后口线保持低电平直到松开键为止。由按键控制彩灯分别按三种规律变化。 任务程序分析 监控彩灯是用按键控制彩灯的显示规律的变化。对按键的处理有两种方式,一种方法是不断查询按键,有按键按下时就进行消去抖动处理,判断是否有按键按下,这种方法在按键查询期间单片机不能做任何其它操作。第二种方法是每隔一段时间,抽样检测一次,对按键进行判别处理,对于时间较短的脉冲输入方式可能无效,会造成漏检。为解决这两种方法的缺陷,常采用单片机的外部中断方式实现对中断的处理。 采用中断函数控制彩灯的显示,中断函数与主程序之间的运行,相当于两个程序并行运行,具体的实现方法和实现程序也是多种多样的,如图7.25所示的框图就是其中的一种方法。 图7.25 键控彩灯程序框图 a) 主程序运行框图 b) 中断函数程序框图 源程序 #include “reg51.h” #define uchar unsigned char uchar flag; uchar light,assum; void delay05s(void) //延时0.5s { unsigned char i,j,k; for(i=5;i>0;i--) for(j=200;j>0;j--) for(k=250;k>0;k--); } void delay10ms(void) //延时10ms { unsigned char i,k; for(i=20;i>0;i--) for(k=250;k>0;k--); } void left() //左移显示 { light=light<<1; if(light==0) light=0x01; P1=~light; } void right() //右移显示 { light=light>>1; if(light==0) light=0x80; P1=~light; } void assume() { /*定义花样显示*/ uchar code dispcode[8]={0x7e,0xbd,0xe7,0xdb,0x7e,0xff}; if(assum==7) assum=0; //指向下一个花样数据 else assum++; P1=dispcode[assum]; //输出花样数据 } void main() { IT0=1; //外部中断0设置为下降沿触发 EX0=1; //允许外部中断0产生中断 EA=1; //中断总允许位设置,允许各中断申请 flag=1; light=0x01; assum=0; while(1) { switch(flag) { case 1:left();break; case 2:right();break; case 3:assume();break; } delay05s(); } } void int_0() interrupt 0 { delay10ms(); if(INT0==0) { flag++; if(flag>3) flag=1; } } 任务实施 1.利用proteus仿真软件绘制电路原理图 2. C51程序的编译 按照情景一Keil C51编译软件的操作步骤对源程序进行编译和调试。 3.执行程序观察效果 将编译成功后的.HEX文件加载到CPU执行程序并按动按钮观察效果。 任务三 输出100Hz的方波 图7.26 100Hz的方波 任务目标 使用AT89C51单片机,利用定时中断实现从P2.0输出100Hz的方波。 通过本任务学会利用单片机输出指定周期的脉冲。单片机输出的不同频率的方波,既可以作为其它电路的信号源,也可直接趋动音响,发出对应的声音,作为报警器、简易音乐等信号的提供者。电路如图7.26所示。 任务程序分析 从P2.0输出100Hz的方波,实际上就是要求从P2.0输出周期为5ms的方波。就是在单片机中实现5ms的定时,每次定时时间到时,将P2.0电平改变就可以了。一个引脚电平的改变,使用取反指令就可以完成,具体的指令如“P2.0=~P2.0;”。 使用单片机内部的定时/计数器进行5ms的定时,需要对定时/计数器进行初始化。启动定时器之后,计数器自动计数,达到5ms后,计数器出现计数溢出,产生中断,进行中断服务程序。 采用定时中断时,单片机可以执行正常的程序,由硬件进行定时,只有当定时时间到时,才中断正在执行的主程序,转去执行中断服务程序,中断服务程序执行完成后,自动回到主程序的中断点继续执行被中断的程序。相对于指令延时的定时方式,采用中断可以极大地提高单片机的利用率。 源程序 #include "reg51.h" #define uchar unsigned char sbit clk=P2^0; //定义输出引脚 void main() { TMOD=0x01; //设置定时器T0工作于方式1 TH0=(65536-500)/256; //高8位的初始值 TL0=(65536-5000)%256; //低8位的初始值 ET0=1; //允许定时器0产生中断 EA=1; TR0=1; //开始计数 while(1) { ; } } void time0() interrupt 1 { TH0=(65536-5000)/256; //重装初始值 TL0=(65536-5000)%256; clk=~clk; } 任务实施 1.利用proteus仿真软件绘制电路原理图 绘制原理图时的添加虚拟示波器。 2. C51程序的编译 按照情景一Keil C51编译软件的操作步骤对源程序进行编译和调试。 3.执行程序观察效果 将编译成功后的.HEX文件加载到CPU执行程序观察示波器输出的波形图。 相关知识 1. 80C51中断系统概述 计算机工作过程中,由于系统内、外某种原因而发生的随机事件,计算机必须尽快中止正在运行的原程序,转向相应的处理程序为其服务,待处理完毕,再返回去执行被中止的原程序,这个过程就是中断。引起中断的原因或设备称为中断源。一个计算机系统的中断源会有多个,用来管理这些中断的逻辑称为中断系统。 采用中断的优点有: (1)分时操作 中断解决了快速的CPU与慢速外设、定时/计数器及串行口之间的“定时”矛盾。例如:在CPU启动定时器之后,就可以继续执行主程序,同时定时器也在工作。当定时器溢出便向CPU发中断请求,CPU响应中断(中止正在运行的主程序)转去执行定时器服务程序,中断服务结束后,又返回主程序继续运行,这样CPU可以命令定时器、串行口以及外设同时工作,使CPU高效而有秩序地工作。 (2)定时处理 中断系统使CPU能及时处理实时控制中许多随机参数和信息。实时控制现场的各种随机信号在任一时刻均可向CPU发出中断请求,要求CPU给予服务,有了中断系统便可及时地处理这些瞬间变化的现场信息,使CPU具有随机应变的能力。 (3)故障处理 中断系统还可以使CPU处理系统中出现的故障。例如:电源的突变、运算溢出、通信出错等。有了中断系统,计算机都可自动解决,不必人工干预或停机,提高了系统的可靠性。 由此可见,良好的中断系统,不仅可扩大其应用范围,也是鉴别计算机性能的重要标志。 2.80C51中断系统的总体结构 80C51中断系统的总体结构如图7.27所示: 图7.27 80C51中断系统内部结构示意图 3.中断的一般功能 (1)中断的屏蔽与开放 也称为关中断和开中断,这是CPU能否接收中断请求的关键。只有在开中断的情况下,CPU才能响应中断源的中断请求。中断的关闭或开放可由指令控制。 (2)中断响应 图7.28 中断响应过程流程图 在开中断的情况下,若有中断请求信号,CPU便可从主程序转去执行中断服务子程序,以进行中断服务,同时也像转子程序一样保护主程序的断点地址,使断点地址自动入栈,以便执行完中断服务程序后可以返回主程序继续执行。中断系统要能确定各个中断源的中断服务子程序的入口地址,如图7.28所示。 (3)中断排队 在中断开放的情况下,如果有几个中断同时发生,究竟首先响应哪一个中断,这就有一个中断优先级排排队问题。计算机应该根据中断源的优先级首先响应优先级较高的中断请求。这也是中断系统管理的任务之一。 (4)中断嵌套 当CPU在执行某一个中断处理程序时,若有一优先级更高的中断源请求服务,这CPU应该能挂起正在运行的低优先级中断处理程序,响应这个高优先级中断。在高优先级中断处理完后能返回低优先级中断,继续执行原来的中断处理程序,这个过程就是中断嵌套,如图7.29所示。 图7.29中断嵌套流程图 4. 中断源和中断标志 1)中断源 80C51单片机设置了5个中断(52系列有6个),外部有2个中断请求输入:(P3.2)、(P3.3);内部有3个中断请求:定时/计数器T0、T1和片内串行口。当系统产生中断时,5个中断请求标志分别由特殊功能寄存器TCON和SCON的相应位来锁存。 2)中断标志 有关TCON的每一位在情境6中已介绍。 下面介绍串行口控制寄存器SCON(存放串行口中断标志) SCON为串行口控制寄存器,当串行口发生中断请求时,其低两位锁存串行口的发送中断和接受中断,其格式如下: TI RI TI:串行口发送中断标志 当CPU向串行口的发送数据缓冲器SBUF写入一个数据时,发送器就开始发送,当发送完一帧数据后,由硬件置“1”TI,表示串行口正在向CPU请求中断。值得注意的是当CPU响应中断,转向串行口中断服务时,硬件不能自动清“0”TI标志,而必须在中断服务程序中由指令清“0”。 RI:串行口接收中断标志。 若串行口接收器允许接收,当接收器接收到一帧数据后,RI置“1”,表示串行口接收器正在向CPU请求中断,同样RI必须在用户中断服务程序中由指令清“0”。 80C51复位后,SCON被清除。 5.中断允许寄存器IE和中断优先级寄存器IP 如前所述,通过对触发方式选择位IT0、IT1的编程,可以选择外部中断输入信号、的触发方式是低电平有效还是边沿触发有效。那么也可以通过对特殊功能寄存器IE的编程,以选择哪几个中断是被禁止的或允许的;而这些被允许的中断又可以通过对中断优先级寄存器IP的编程以定义为高优先级或低优先级。这样便可以通过有关的控制寄存器的有关位,加强对中断的合理控制,使系统高效而有秩序地工作。 下面分别对IE和IP作具体介绍。 1)中断允许寄存器IE(存放中断允许字) EA / / ES ET1 EX1 ET0 EX0 EA:CPU中断允许位。EA=1,CPU开中断;EA=0,CPU禁止所有中断。 ES:串行口中断允许位。ES=1,开放串行口中断;ES=0,禁止串行口中断。 ET1:定时/计数器T1溢出中断允许位。ET1=1,开T1中断;ET1=0,禁止T1中断。 EX1:外部中断INT1允许位。EX1=1,开中断;EX1=0,禁止中断。 ET0:定时/计数器T0溢出中断允许位。ET0=1,开T0中断;ET0=0,禁止T0中断。 EX0:外部中断允许位。EX0=1,开中断;EX0=0,禁止中断。 80C51复位时,IE被清除,与对中断进行管理必须对IE编程,这样用户稳操开中断或关中断的控制权。 2)中断优先级寄存器IP(存放中断优先字) MCS-51的中断分两个优先级,对于每一个中断源都可通过对IP编程以定义为高优先级或低优先级中断,以便实现二级中断嵌套。IP的各位定义如下: / / / PS PT1 PX1 PT0 PX0 PT2:定时/计数器T2优先级设定位。PT2=1,T2设定为高优先级;PT2=0,T2设定为低优先级。 PS:串行口优先级设定位。PS=1,串行口设定为高优先级;PS=0,穿行口设定为低优先级。 PT1:定时/计数器T1优先级设定位。PT1=1,T1设定为高优先级;PT1=0,T1设定为低优先级。 PX1:外部中断优先级设定位。PX1=1,设定为高优先级;PX1=0,设定为低优先级 PT0:定时/计数器T0优先级设定位。PT0=1,T0设定为高优先级;PT0=0,T0设定为低优先级。 PX0:外部中断优先级设定位。PX0=1,设定为高优先级;PX0=0,设定为低优先级。 80C51复位后,IP被清除,即中断源均定义为低优先级中断。与确定各中断的优先级,必须由用户对IP编程,这样,中断优先级的设置权就交给了用户。若要改变各中断源在系统中的优先级,则可随时由指令来修改IP内容。 3)中断优先级结构 对IP寄存器的编程可把5个中断规定为高低优先级,它们遵循两个基本规则: ①一个正在执行的低级中断服务程序,能被高优先级中断请求所中断,但不能被同优先级中断请求所中断。 ②一个正在执行的高优先级中断服务程序,不能被任何中断请求所中断。返回主程序后要再执行一条指令才能响应新的中断请求。 为了实现这两个规则,中断系统内部设置了两个不可寻址的“优先级状态”触发器。当其中一个状态为“1”时,表示正在执行高优先级中断服务,它禁止所有其它中断,只有在高级中断服务返回(执行RETI指令)时,被清“0”,表示可响应其他中断。当另一个状态为“1”时,表示正在执行低优先级中断服务程序,它屏蔽其它同级中断请求,但不能屏蔽高由优先级请求。在中断服务返回时(执行RETI指令)时,被清“0”。 80C51有5个中断源,但只有两个优先级,必然会有几个中断请求源处于同样的优先级。当CPU同时收到几个同优先级中断请求,80C51内部有一个硬件查询逻辑,它的查询顺序是: CPU将根据查询顺序来响应这些中断请求。 6.中断响应过程 80C51单片机CPU在每一个机器周期顺序查询每一个中断源,在机器周期的S5P2状态采样并按优先级处理所有被激活的中断请求,若没有被下述条件所阻止,将在下一个机器周期的S1状态响应最高级中断请求。 (1)CPU正在处理同级或高优先级中断; (2)现行的机器周期不是所执行指令的最后一个机器周期; (3)正在执行的指令是RETI或者访问IE或IP(即在CPU执行RETI或访问IE、IP的指令后,至少需要再执行一条指令才会响应新的中断请求) 若存在上述任一种情况,中断将暂时受阻,若不存在上述情况,将在紧跟的下一个机器周期执行这个中断。 CPU响应中断时,首先要完成这样几件工作:其一先置位相应的“优先级状态”触发器(该触发器指出CPU当前处理的中断优先级别),以阻断同级或低级中断请求;其二,自动清除相应的中断标志(TI或RI除外);其三,自动保护断点,将现行程序计数器PC内容压入堆栈,并根据中断源把相应的矢量单元地址装入PC中。这些矢量地址是: 中断源 矢量地址 外部中断 0003H 定时/计数器T0溢出 000BH 外部中断 0013H 定时/计数器T1溢出 001BH 串行口 0023H 7.中断程序的编制 1)首先必须对中断系统进行初始化,包括: l 开中断,即设定IE寄存器。 如任务中: ET0=1; //允许定时器0产生中断 EA=1; //开总中断 l 设定中断优先级,即设置IP寄存器。 l 如果是外部中断,还必须设定中断响应方式,即设定IT0、IT1位。 如任务中IT0=1; //外部中断0设置为下降沿触发 l 如果是计数、定时中断必须先设定定时、计数的初始值。 如任务中:TH0=(65536-500)/256; //高8位的初始值 TL0=(65536-5000)%256; //低8位的初始值 l 初始化结束后,对于定时、计数器而言,还应该记得启动定时或计数,即设定TR0、TR1位。串口接收中断,要记得允许接收位REN应该设置。 如任务中:TR0=1 2)中断初始化结束后,就可以编制主程序的其它部分及中断服务程序,编制中断服务程序时注意C51中的中断服务程序的格式: 函数类型 函数名(参数) interrupt 中断号 [using 寄存器组号] 其中,函数类型和参数都取为void。 实战训练 1.利用P3.3上的按键实现外部中断1,完成任务2的功能。 2.利用定时器T1定时10ms,采用定时中断方式控制P2.0引脚输出50Hz方波,编写程序实现。 3.利用T0或T1定时0.5s延时,采用定时中断方式控制控制P1口8个灯同时亮或暗。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服