机电控制技术 单片机入门.ppt

上传人:laozhun 文档编号:2427243 上传时间:2023-02-18 格式:PPT 页数:165 大小:1.20MB
返回 下载 相关 举报
机电控制技术 单片机入门.ppt_第1页
第1页 / 共165页
机电控制技术 单片机入门.ppt_第2页
第2页 / 共165页
机电控制技术 单片机入门.ppt_第3页
第3页 / 共165页
机电控制技术 单片机入门.ppt_第4页
第4页 / 共165页
机电控制技术 单片机入门.ppt_第5页
第5页 / 共165页
点击查看更多>>
资源描述

《机电控制技术 单片机入门.ppt》由会员分享,可在线阅读,更多相关《机电控制技术 单片机入门.ppt(165页珍藏版)》请在三一办公上搜索。

1、控制理论基础(II),9.1 关于单片机,9.2 单片机介绍,9.3 单片机的特点,9.4 MCS51的内部资源,9.7.1电路搭建,9.5 单片机的内外结构,9.6 存储器结构和操作,9.7 一个简单电路分析实例,9.7.2 任务分析,9.8 单片机执行程序的过程,9.1 关于单片机,名称:Single Chip Microcomputer总体特点:抗干扰性强、硬件通用化、实 时控制、接口功能,灵活编程方便用途:机电控制的常用方案 方法:专门开发语言、需求决定(I/O,接口、容量、通讯等),如何学习,理解工作方式和特点熟悉并理解基本电路多实践:从简单到复杂基本技能,常用的控制方案设计,学习电

2、路控制的基础课程,9.2 单片机介绍,一、1、单片机的定义(全名为单片微型计算机、或微控制器):它是指在一块超大规模集成电路芯片上,集成了CPU、ROM、RAM、I/O接口、定时器、计数器、中断系统等功能部件的电子元件。就其组成结构而言,一块单片机就是一台计算机。2、单片机的种类:(70多个系列、500个机种)Intel MCS-48 MCS-51 MCS-96Motorla 6801 6802 6803Zilog super8Fairchild F8 3870Microchip PIC16xx,Intel单片机按功能可分8种类型,1、基本型(51子系列)8031(无片内ROM)8051(4K

3、ROM)8751(片内4KRAM);2、增大片内存储容量(52子系列)片内存储容量扩大一倍,定时器为3个、中断源6个;3、低功耗基本型:80C51/87C51/80C31,有三种功耗控制方式;4、A/D型 83C51GA、80C51GA/87C51GA带有8路8位A/D,半双工同步串行接口;,5、DMA型 83C452,它有两个DMA通道;6、多并行接口型83C451,增加2个8位的准双向口P4/P5和一个内部具有上拉电阻的8位双向口;7、可编程计数阵列型83C51FA,它有5个比较/捕捉模块、16位高速输出、8位脉冲宽度调制等功能;8、高级语言型 8052AH 片内固化有BASIC52解释程

4、序。,9.3 单片机的特点,体积小、重量轻、价格便宜、功耗小;可靠性高、抗干扰能力强;控制功能强、运算速度快;硬件通用化、应用灵活化;应用系统的研制周期短。,单片机的发展趋势,CPU的改进采用双CPU:Rockwell 公司的 R6500/21;增加数据总线宽度:NEC公司的PD7800(16位);采用流水线结构:TMS公司的TMS320,指令以队列形式出现在CPU中,从而有很高的运算速度;串行总线结构:菲利浦公司的MAB8420采用I2C总线和DDB总线。存储器的发展增大存储容量、片内EPROM开始 EEPROM化、编程保密化,9.4 MCS51的内部资源,8位的CPU 片内振荡器及时钟电路

5、32根I/O口线64K片外数据存储器 256内部数据寄存器64K的片外程序存储器(包括片内4K)具有2个优先级别的5个中断源结构有2个16位的定时器/计数器;一个全双工的串行口一个布尔处理器,9.5 单片机的内外结构,一、单片机的外部结构(封装)拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用一块DIP封装的89C51芯片。89C51的引脚排列,三总线结构地址总线数据总线控制总线,9.6 存储器结构和操作,程序存储器:存放指令、常数、表格等,片外程序存储器,1000H,FFFFH,片内程序存储器,片外程序存储器,0000H,0FFFH,EA=1,EA=0,特殊功能寄存器,数据缓冲区,位

6、寻址区,工作寄存器区,00H,1FH,20H,2FH,30H,7FH,80H,FFH,片内数据存储器,0000H,FFFFH,片外数据存储器,9.7 一个简单电路分析实例,9.7.1电路搭建1)电源单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。,2)振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按图1接上即可。,3)复位引脚:按图1中画法连好.单片机刚上电时,其内部各寄存器处于随机状态,在该脚输入24个时钟周期宽度以上的高电平后,将使单片机复位.4)/EA引脚:/E

7、A引脚接到正电源端时CPU从片内程序存储器0000H开始执行程序,当地址超过4K时,将自动执行片外程序存储器中的程序.,图1,R1,9.7.2 任务分析,要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?单片机上除了刚才用掉的几个引脚,还有很多个,将这个LED和1脚相连。(见图1,其中R1是限流电阻),按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此1脚我们要能够控制,也就是说,我们要能够让1引脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,设计51芯片的INTE

8、L公司已经起好了,叫它P1.0,这规定不可以由我们来更改。,让一个引脚输出高电平的指令是SETB,让一个引脚输出低电平的指令是CLR。因此,我们要P1.0输出高电平,只要写SETB P1.0,要P1.0输出低电平,只要写 CLR P1.0,现在我们已经有办法让计算机去将P1.0输出高或低电平了.但是我们怎样才能让计算机执行这条指令呢?,要解决这个问题,还得有几步要走。第一步,计算机看不懂SETB CLR之类的指令,我们得把指令翻译成计算机能懂的方式,再让计算机去读。计算机能懂什么呢?它只懂一样东西数字0和1。因此我们把SETB P1.0变为(D2H,90H),把CLR P1.0变为(C2H,9

9、0H),至于为什么是这两个数字,这也是由51芯片的设计者-INTEL规定的.,第二步,在得到这两个数字后,怎样让这两个数字进入单片机的内部呢?这要借助于一个硬件工具编程器。,我们将编程器与电脑连好,运行编程器的软件,然后在编缉区内写入(D2H,90H)见图2,写入,好,拿下片子,把片子插入做好的电路板,接通电源灯不亮?因为我们写进去的指令就是让 P1.0输出高电平,灯当然不亮。,现在我们再拨下这块芯片,重新放回到编程器上,将编缉区的内容改为(C2H,90H),也就是CLR P1.0,写片,拿下片子,把片子插进电路板,接电,好,灯亮了。,因为我们写入的就是让P1.0输出低电平的指令。这样我们看到

10、,硬件电路的连线没有做任何改变,只要改变写入单片机中的内容,就可以改变电路的输出效果。,单片机内部结构分析,我们来思考一个问题,当我们在编程器中把一条指令写进单片机内部,然后取下单片机,单片机就可以执行这条指令,那么这条指令一定保存在单片机的某个地方,并且这个地方在单片机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢?这个地方就是单片机内部的只读存储器即ROM(READ ONLY MEMORY)。,为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来这ROM是一种电可擦除的ROM,称为FLASH ROM,刚才我们是用的编程器,在特殊的条件下由外部设备对ROM进行写的操作,

11、在单片机正常工作条件下,只能从那面读,不能把数据写进去,所以我们还是把它称为ROM。,9.8 单片机执行程序的过程,分三个阶段:1)取指令阶段2)分析指令阶段3)执行指令阶段,1)取指令阶段,根据程序计数器PC中的值,从 程序存储器中取出现行指令,送到 指令寄存器.,2)分析指令阶段,将指令寄存器 中的指令操作码 取出,进行译码,分析其指令性质.如果指令需要操作数,寻找操作数的地址,即“寻址”。,3)执行指令阶段,取出操作数,按照操作码的性质进行操作.逐条指令地重复上述操作,直到遇到停机或等待指令.,This is End of Chapter 9,13.1 中断系统特点,13.2 定时器控制

12、寄存器TCON,13.3 中断的嵌套与优先级处理,13.4 中断的响应过程,13.5 中断请求源,13.7 中断系统结构,13.6 TCON 控制寄存器,13.9 外部中断(P3.2/P3.3),13.8 五个中断源的自然优先级与中断服务入口地址,13.10 定时器/计数器中断,13.11 串行口接收/发送中断,13.12 中断允许控制,继续:,13.13 中断优先级控制,13.14 例子,13.15 基本规则,13.16 注意的问题,5个中断源它们分别是:INT0、INT1、C0/T0、C1/T1、串行口中断;具有优先级管理功能,即可分为2个优先级,其中每个中断源的优先级可由程序指定;每个中

13、断源都有各自的中断标志位。,13.1 中断系统特点,外部中断请求标志位,IT0=0电平触发IT0=1边沿触发,IE1,IT1,IE0,IT0,TF1,TR1,TF0,TR0,13.2 定时器控制寄存器TCON,13.3 中断的嵌套与优先级处理,1 设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?2 又比如你正接电话,有人按门铃,你该怎样做呢?,13.4 中断的响应过程,当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去

14、,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。,计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。,1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。2、寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。,中断响应步骤:,3、保护现场,执行中断处理程序。4、恢复现场,中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。,中断处理过程一般分

15、为3阶段:中断响应、中断处理、中断返回。,中断申请,响应条件是否满足,中断是否受阻,断点地址压栈,中断地址入PC,EA=1IE=1,EA=0,Y,N,中断响应条件:EA=1并且中断源的中断允许,中断受阻的情况,1、同级或高级的中断已在进行中;2、当前的机器周期不是正在执行的指令的最后一个周期;3、正在执行的指令是返回指令或是对专用寄存器IE、IP进行读写的指令,只有在执行这些指令之后,至少在执行一条其它指令后,才会响应。,关中断,保护现场,开中断,中断服务,关中断,开中断,中断请求撤回,中断返回,恢复现场,中断地址弹出PC断点地址入PC,13.5 中断请求源,(1)外部中断请求源:即外中断0和

16、1,经由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中断有关的。IT0:INT0触发方式控制位,可由软件进和置位和复位IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同。,(2)内部中断请求源TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。TF1:与TF0类似。TI、RI:串行口发送、接收中断,由软件清除。,13.6 TCON

17、控制寄存器,13.7 中断系统结构,优先级:单片机采用了自然优先级和人工设置高、低优先级的策略,即可以由程序员设定那些中断是高优先级、哪些中断是低优先级,由于只有两级,必有一些中断处于同一级别,处于同一级别的,就由自然优先级确定。,13.8 五个中断源的自然优先级与中断服务入口地址,外中断0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串口:0023H它们的自然优先级由高到低排列。写到这里,大家应当明白,为什么前面有一些程序一始我们这样写:ORG0000HLJMPSTARTORG0030HSTART:,这样写的目的,就是为了让出中断源所占用的向量地址。当然,在程序中没

18、用中断时,直接从0000H开始写程序,在原理上并没有错,但在实际工作中最好不这样做。,13.9 外部中断(P3.2/P3.3),激活方式:电平触发(低电平有效)、边沿触发(下降沿有效);激活方式由特殊寄存器TCON的低4位决定:,IE1,IT1,IE0,IT0,中断标志,IT0=0电平触发IT0=1边沿触发,两种触发方式的区别,边沿触发方式:CPU响应中断后,硬件自动将标志位清零。电平触发方式:响应中断后,不能自动清除中断请求信号。因此要立即撤除INT0,INT1引脚上的低电平.,INT0,P1.0,Q,S,CLR,D,外接中断请求信号正脉冲,中断程序ANL P1,#0FEHORL P1,#0

19、1H,13.10 定时器/计数器中断,当C/T溢出时,由硬件自动置位TF0/TF1,CPU响应中断后,由硬件自动清除中断标志。另可由程序对TF0/TF1置位或清除。,13.11 串行口接收/发送中断,完成一帧信号的接收/发送时,由硬件自动置中断标志位(特殊寄存器SCON的RI/TI),CPU响应中断后,必须由软件清除。,13.12 中断允许控制寄存器IE,5个中断源的中断请求是否响应由特殊寄存器IE决定,其格式为:,EA,ES,ET1,EX1,ET0,EX0,总允许中断,串行口,定时计数,外部1,1中断允许、0中断禁止,13.13 中断优先级控制寄存器IP,PS,PT1,PX1,PT0,PX0

20、,1高优先级、0低优先级,开机时,每个中断都处于低优先级,我们可以用指令对优先级进行设置。,例1:设有如下要求,将T0、外中断1设为高优先级,其它为低优先级,求IP的值。IP的首3位没用,可任意取值,设为000,后面根据要求写就可以了XXX PS PT1 PX1 PT0 PX00 0 0 0 0 1 1 0因此,最终,IP的值就是06H。,13.14 例子,例2:在上例中,如果5个中断请求同时发生,求中断响应的次序。答:响应次序为:定时器0外中断1外中断0实时器1串行中断。,例3 如果我们要设置允许外中断1,定时器1中断允许,其它不允许,则IE可以为:,即8CH,当然,我们也可以用位操作指令S

21、ETBEASETBET1SETBEX1来实现它。,13.15 基本规则,同一级别的各种中断源同时请求中断时,CPU响应中断的顺序为:INT0、T0、INT1、T1、串行口;低优先级中断可被高优先级中断所中断;一种中断一旦被响应,与它同级的中断不能再响应;几个中断同时发生,CPU响应优先级最高的中断。,在下列三种情况之一时,CPU将封锁对中断的响应:1.CPU正在处理一个同级或更高级别的中断请求。2.现行的机器周期不是当前正执行指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,当前执行指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断。,3.当前

22、正执行的指令是返回指令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才响应中断。这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级,而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束,再执行一条指令才可以响应中断。,13.16 注意的问题,这里还有个问题,大家是否注意到,每个中断向量地址只间隔了8个单元,如0003000B,在如此少的空间中如何完成中断程序呢?很简单,你在中断处安排一个LJMP指令,不就可以把中断程序跳转到任何地方了吗?,一个完整的主程序看起来应该是这样的:,ORG0000HLJMPSTARTORG0003HLJ

23、MPINT0;转外中断0ORG000BHRETI;没有用定时器0中断,在此放一条RETI,万一“不小心“产生了中断,也不会有太大的后果。,中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。,CPU所做的保护工作是很有限的,只保护了一个地址,而其它的所有东西都不保护,所以如果你在主程序中用到了如A、PSW等,在中断程序中又要用它们,还要保证回到主程序后,这里面的数据还是没执行中断以前的数据,就得自己保护起来.,This is End of Chapter 11,11.1概述,11.2 指令分类,1

24、1.3 寻址方式,11.4 指令系统,11.5 数据传送类29条,11.6 算术操作类24条,11.7 逻辑运算类24条,11.8 控制转移指令17条,11.9 位操作指令17条,一台计算机所能执行的指令集合就是它的指令系统。重点掌握寻址方式指令分类,11.1概述,机器语言(指令的二进制编码表示)但机器语言具有程序长、不易书写、难于阅读和调试、容易出错等缺点,那么使用符号指令就显得十分必要,通常把表示指令的符号称之为助记符。,汇编语言而以助记符表示的指令就是计算机的汇编语言.一条指令通常由两部分组成,即操作码和操作数。操作码用来规定指令进行什么操作,而操作数则表示指令的操作的对象。单片机的指令

25、是不定长的,在MCS-51指令系统中,有一字节、二字节、三字节等不同长度的指令.,11.2 指令分类,MCS-51 单片机指令系统共有指令111条,分为五大类数据传送类:29条算术运算类:24条逻辑运算类:24条控制转移类:17条位操作类:17条,11.3 寻址方式,寻址的“址”是指操作数所在的单元地址。因此寻址就是如何确定操作数单元地址的问题。共有七种寻址方式寄存器寻址 MOV A,R2直接寻址 MOV A,3AH立即寻址 MOV A,#3AH寄存器间接寻址 MOV A,R0变址寻址 MOVC A,A+DPTR相对寻址 JC 03H位寻址 SETB 3DH,1立即寻址,指令码中直接含有所需地

26、址的操作数MOV A,#30HMOV DPTR,#3000H注意:#是唯一区别与地址的标志。,2直接寻址,指令码中含有操作数的地址,机器根据地址找到操作数MOV A,30H注意:若直接寻址的地址是SFR中的某一个时,可用名称符号MOV A,TH0MOV A,8CH,3寄存器寻址,所需的操作数在某个工作寄存器中(R0R7)INC R0注意:指令表中INC Rn,n取07,4寄存器间接寻址,指令码中含有操作数地址的寄存器号。实际上是二次寻址间接寻址采用Ri或DPTR,是区别寄存器寻址的标记若(RO)=30H,(30H)=0FFHMOV A,R0MOV A,R0,5相对寻址,指令码中含有相对地址的偏

27、移量MOV A,40H ADD A,#30HSJMP SOUT;PC=PC+2+rel。;。SOUT:MOV 50H,A,SJMP rel,(PC)=(PC)+2+rel例:835AH SJMP 35H目的地址=835AH+02H+35H=8391H例:835AH SJMP E7H目的地址=835AH+02H-19H=8343H-19H=-0001 1001=1110 0111(补码),6变址寻址,基地址寄存器和偏移量MOVC A,A+PCMOVC A,A+DPTR注意:变址寻址区是程序存储器而不是数据存储器。执行前,应预先在DPTR和A中存放地址,为指令执行提供条件。,7位寻址,指令中含有位

28、地址位地址和字节地址的区分通过指令区分:MOV A,20HMOV C,20H,可供位寻址的区域片内RAM的20H2FH为位寻址空间(007FH)某些SFR:地址能被8整除的SFR,共11个。位地址的表示方法MOV C,ACC.7MOV 20H,C MOV 24H.0,C,11.4 指令系统,MCS-51汇编语言是用42种操作码助记符描述33种操作功能,一种功能可能有几种助记符,与寻址方式结合共产生111条指令。数据传送类:29条算术运算类:24条逻辑运算类:24条控制转移类:17条位操作类:17条,11.5 数据传送类29条,传送数据可在ACC,R0R7,内部RAM,外部RAM间进行,其中A,

29、R0R7的操作最多传送类指令不影响PSW(除P位)数据传送指令表,续表,例1 已知(70H)=60H,(60H)=20H,分析如下程序.,MOV R0,#70H;(R0)=#70HMOV A,R0;(A)=#60HMOV R1,A;(R1)=#60H MOV 40H,R1;(40H)=#20HMOV R0,R1;(60H)=#60H,例2 查表指令举例1,ORG 8000H8000H:MOV A,#40H8002H:MOVC A,A+PC;(8003H+40H-PC);(44H-A)ORG 8040HDB 41H 42H 43H 44H,查表指令举例2,ORG 8000HMOV A,#03HM

30、OV DPTR,#8040HMOVC A,A+DPTR;A=?(44H)ORG 8040HDB 41H 42H 43H 44H,例3 分析如下程序执行完成后A,R0,PC的内容.1010H:02H1011H:04H1012H:06H1013H:08H1000H:MOV A,#0DH;0DH-A1002H:MOVC A,A+PC;(0DH+1003H)-A1003H:MOV R0,A;A-R0,A=02H,R0=02H,PC=1004H,例4.将累加器A中的低4位数据传送到数据存储器3000H单元中去.,MOV DPTR,#3000HANL A,#0FHMOVX DPTR,A,数据传送类指令小结

31、,内部RAM的数据传送方式,11.6 算术操作类24条,加、减、乘、除、增1、减1影响PSW中的CY、AC、OV、P不带进位加法4带进位加法4带借位减法4加1指令5减1指令4十进制调整指令1乘除法指令2 算术操作指令,加、减法指令(ADD ADDC SUBB INC DEC),无符号数和有符号数由用户自己决定均以ACC作为目的操作数带符号数运算时,必须检查溢出位OV若进行不带进位的减法时,用CLR C,将进位位清零即可。,DA A为十进制调整指令,紧跟加法指令ADD或ADDC之后,对BCD码加法运算进行修正.,1)BCD 码:000010012)计算机内是4位2进制数是逢16进位,不符合十进制

32、的要求.3)例如 0101+1000=1101 不是BCD码 如果1101+0110=0001 0011则变为BCD码.4)在加法指令后直接 加上指令 DA A,计算机的硬件自动进行加6运算,乘除法指令,只能进行无符号的乘除法虽影响OV,但意义不同MUL AB;BA,OV=1表示乘积大于FFHDIV AB;AB,0V=1,B=0,除法无意义,举例,MOV A,#5AHADD A,#6B H0101101001101011(+-11000101CY=?AC=?OV=?,11.7 逻辑运算类24条,读-修改-写指令对数据进行逻辑处理模拟各种硬件电路的逻辑功能逻辑与ANL逻辑或ORL逻辑异或XRL逻

33、辑移位 RR RRC RL RLC累加器清零与取反 CLR CPL,例:,A=7AH=0111 1010,CY=1RLC A1111 0101=F5H,CY=0,P=0,带进位移位和不带进位移位,例:M1和M1+1单元存有16位二进制数,试编程将其扩大二倍,程序,CLR CMOV R1,#M1MOV A,R1RLC AMOV R1,AINC R1MOV A,R1RLC AMOV R1,A,11.8 控制转移指令17条,无条件转移绝对转移LJMP、AJMP短转移SJMP间接转移JMP A+DPTR有条件转移JZ、CJNE、DJNZ子程序调用与返回ACALL、LCALL、RET中断返回RETI,R

34、ET 空操作NOP,举例:把从40H单元开始的10个单元中的内容相加.,MOV R2,#0AH MOV R0,#40H CLR ALOOP:ADD A,R0 INC R0 DJNZ R2,LOOP MOV SUM,A,11.9位操作指令17条,位传送MOV BIT,BIT(错误)位逻辑操作与ANL、或ORL、取反CPL位条件转移JC、JNC、JB、JNB、JBC位置位,清零(SETB、CLR),例1,例 1 内部数据存储器的60H、61H单元中连续存放着4位BCD码。试编写一段程序将这4位BCD码倒序排列,程序,MOV R0,#60HMOV R1,#61HMOV A,R0SWAP AXCH A

35、,R1SWAP AMOV R0,A,例2,已知片内RAM 50H单元中存放数值AAH,设堆栈指针为30H,把此数值压入堆栈,然后再弹出到40H单元中.,MOV SP,#30H;30H-SPPUSH 50H;SP+1-SP,(50H)-(31H)POP 40H;(31H)-(40H),SP-1-SP,例3,试编写计算1234H+0FE7H的程序,将和的高8位存入41H单元,低8位存入40H单元.,MOV A,#34H;34H-AADD A,#0E7H;A+E7H-AMOV 40H,A;A-(40H)MOV A,#12H;12H-AADDC A,#0FH;A+0FH+CY-AMOV 41H,A;A

36、-(41H),例4,试编写计算17H*68H 的程序,将乘积的高8位存入31H单元,低8位存入30H单元.,MOV A,#17H;17H-AMOV B,#68H;68H-BMUL AB;A*B-BAMOV 30H,A;A-(30H)MOV 31H,B;B-(31H),This is End of Chapter 10,12.1 中断系统特点,12.2 定时器控制寄存器TCON,12.3 中断的嵌套与优先级处理,12.4 中断的响应过程,12.5 中断请求源,12.7 中断系统结构,12.6 TCON 控制寄存器,12.9 外部中断(P3.2/P3.3),12.8 五个中断源的自然优先级与中断服

37、务入口地址,12.10 定时器/计数器中断,12.11 串行口接收/发送中断,12.12 中断允许控制,继续:,12.13 中断优先级控制,12.14 例子,12.15 基本规则,12.16 注意的问题,5个中断源它们分别是:INT0、INT1、C0/T0、C1/T1、串行口中断;具有优先级管理功能,即可分为2个优先级,其中每个中断源的优先级可由程序指定;每个中断源都有各自的中断标志位。,12.1 中断系统特点,IT0=0电平触发IT0=1边沿触发,12.2 定时器控制寄存器TCON,12.3 中断的嵌套与优先级处理,1 设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?

38、2 又比如你正接电话,有人按门铃,你该怎样做呢?,12.4 中断的响应过程,当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。,计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。,1、保护断点,即保存下一将要执行的指令的地址,就是把这个

39、地址送入堆栈。2、寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。,中断响应步骤:,3、保护现场,执行中断处理程序。4、恢复现场,中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。,中断处理过程一般分为3阶段:中断响应、中断处理、中断返回。其流程图如下:,中断申请,响应条件是否满足,中断是否受阻,断点地址压栈,中断地址入PC,EA=1IE=1,EA=0,Y,N,中断响应条件:EA=1并且中断源的中断允许,中断受阻的情况,1、同级或高级的中断已在进行中;2、当前的机器周期不是正在执行的指令的最后一个周期;3、正在执行

40、的指令是返回指令或是对专用寄存器IE、IP进行读写的指令,只有在执行这些指令之后,至少在执行一条其它指令后,才会响应。,12.5 中断请求源,(1)外部中断请求源:即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中断有关的。IT0:INT0触发方式控制位,可由软件进和置位和复位IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同。,(2)内部中断请求源TF0:定时器T0的溢出中断标

41、记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。TF1:与TF0类似。TI、RI:串行口发送、接收中断,由软件清除。,12.6 TCON 控制寄存器,12.7 中断系统结构,优先级:单片机采用了自然优先级和人工设置高、低优先级的策略,即可以由程序员设定那些中断是高优先级、哪些中断是低优先级,由于只有两级,必有一些中断处于同一级别,处于同一级别的,就由自然优先级确定。,12.8 五个中断源的自然优先级与中断服务入口地址,外中断0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串口:0023H它们的自然优先级由高到低排列。写到这里,大家

42、应当明白,为什么前面有一些程序一始我们这样写:ORG0000HLJMPSTARTORG0030HSTART:,这样写的目的,就是为了让出中断源所占用的向量地址。当然,在程序中没用中断时,直接从0000H开始写程序,在原理上并没有错,但在实际工作中最好不这样做。,12.9 外部中断(P3.2/P3.3),激活方式:电平触发(低电平有效)、边沿触发(下降沿有效);激活方式由特殊寄存器TCON的低4位决定:,IE1,IT1,IE0,IT0,中断标志,IT0=0电平触发IT0=1边沿触发,两种触发方式的区别,边沿触发方式:CPU响应中断后,硬件自动将标志位清零。电平触发方式:响应中断后,不能自动清除中

43、断请求信号。因此要立即撤除INT0,INT1引脚上的低电平.,INT0,P1.0,Q,S,CLR,D,外接中断请求信号正脉冲,中断程序ANL P1,#0FEHORL P1,#01H,12.10 定时器/计数器中断,当C/T溢出时,由硬件自动置位TF0/TF1,CPU响应中断后,由硬件自动清除中断标志。另可由程序对TF0/TF1置位或清除。,12.11 串行口接收/发送中断,完成一帧信号的接收/发送时,由硬件自动置中断标志位(特殊寄存器SCON的RI/TI),CPU响应中断后,必须由软件清除。,12.12 中断允许控制寄存器IE,5个中断源的中断请求是否响应由特殊寄存器IE决定,其格式为:,EA

44、,ES,ET1,EX1,ET0,EX0,总允许中断,串行口,定时计数,外部1,1中断允许、0中断禁止,12.13 中断优先级控制寄存器IP,PS,PT1,PX1,PT0,PX0,1高优先级、0低优先级,开机时,每个中断都处于低优先级,我们可以用指令对优先级进行设置。,例1:设有如下要求,将T0、外中断1设为高优先级,其它为低优先级,求IP的值。IP的首3位没用,可任意取值,设为000,后面根据要求写就可以了XXX PS PT1 PX1 PT0 PX00 0 0 0 0 1 1 0因此,最终,IP的值就是06H。,12.14 例子,例2:在上例中,如果5个中断请求同时发生,求中断响应的次序。答:

45、响应次序为:定时器0外中断1外中断0实时器1串行中断。,例3 如果我们要设置允许外中断1,定时器1中断允许,其它不允许,则IE可以为:,即8CH,当然,我们也可以用位操作指令SETBEASETBET1SETBEX1来实现它。,12.15 基本规则,同一级别的各种中断源同时请求中断时,CPU响应中断的顺序为:INT0、T0、INT1、T1、串行口;低优先级中断可被高优先级中断所中断;一种中断一旦被响应,与它同级的中断不能再响应;几个中断同时发生,CPU响应优先级最高的中断。,在下列三种情况之一时,CPU将封锁对中断的响应:1.CPU正在处理一个同级或更高级别的中断请求。2.现行的机器周期不是当前

46、正执行指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,当前执行指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断。,3.当前正执行的指令是返回指令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才响应中断。这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级,而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束,再执行一条指令才可以响应中断。,12.16 注意的问题,这里还有个问题,大家是否注意到,每个中断向量地址只间隔了8个单元,如0003000B,在如此少的空间中如何完成中断程序

47、呢?很简单,你在中断处安排一个LJMP指令,不就可以把中断程序跳转到任何地方了吗?,一个完整的主程序看起来应该是这样的:,ORG0000HLJMPSTARTORG0003HLJMPINT0;转外中断0ORG000BHRETI;没有用定时器0中断,在此放一条RETI,万一“不小心“产生了中断,也不会有太大的后果。,中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。,CPU所做的保护工作是很有限的,只保护了一个地址,而其它的所有东西都不保护,所以如果你在主程序中用到了如A、PSW等,在中断程序中又要用它们,还要保证回到主程序后,这里面的数据还是没执行中断以前的数据,就得自己保护起来.,This is End of Chapter 12,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号