《工业信号的检查与控制》电子教案_第1页
《工业信号的检查与控制》电子教案_第2页
《工业信号的检查与控制》电子教案_第3页
《工业信号的检查与控制》电子教案_第4页
《工业信号的检查与控制》电子教案_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一次课(4课时):【课程引入】1、课程定位:(重要)本门课程是电气自动化专业针对电气设备维护能力进行培养的一门专业学习领域核心课程。主要培养学生的各类传感器的使用与维护能力、信号的采集与处理能力、电子线路的安装与调试能力以及单片机控制与工程应用能力。2、单片机和传感器的应用:(广泛)1)现代生活生产中单片机和传感器的应用:(视频“我机器人”)2)大学生创新中单片机和传感器的应用:(创新的相关视频)3)电子设计竞赛中单片机和传感器的应用:(20XX年电子设计大赛题)3、单片机与传感器技术的就业前景:(前途)4、学习资源:(条件)1)实验实训室等硬件环境:单片机实训室、传感器实训室,测控网络实验室2)虚拟的软件仿真平台:keil汇编语言环境、proteus仿真环境。3)网络平台:传感器网站,各种公开的单片机学习网站。【课程要求】1、课程教学的主要形式:分组教学,讲、学、练、评一体,实物与虚拟交替进行。2、达到的教学目标:1)每个团队能够独立的设计一个小型的测控系统(单物理量测量)、包括硬件、软件及最终的调试。2)每个团队具有总结汇报团队所作工作,让人全面了解的能力。同时每个团队也必须达到作为一个专业团队全面认识,公正认识其他团队成果的能力。3)每位同学能够达到利用汇编语言进行程序编写的能力、能够掌握检测常见物理量的一般方法。4)每个人能够达到利用网络和资源查询自己需要的测控相关知识的能力,可以实现自身的持续发展。3、课程考核:1)主动学习能力考核:主要采用实践考评和卷面考评相结合,各占总成绩的20%。2)团队合作能力考核:包括任务的接受、任务的分工、任务的完成、任务的总结及呈现,主要采用过程考核的方式,根据每次任务完成的情况给予评价,占总成绩的50%。3)良好的职业素养的考核:主要包括出勤,卫生等个人素质表现,占总成绩的10%4、课程内容:为了达到本课程的目标,本课程分七个小的项目和一个综合设计项目来开展,其中前六个项目主要是老师在带领同学学习单片机和传感器的基础知识的同时由简到难递进式锻炼同学对给定的项目和任务的设计、实践、调试、总结的能力。每个项目占大约三次到两次课的内容。第七个小的项目主要由学生主导,教师为辅共同来进行设计的演练。最后一个综合设计项目基本以学生为主,教师只提供技术指导和参与最终评价。【分组】2人一小组,4到6人一大组【本次课程开始】项目一:设计单片机最小系统本项目要求在学习单片机基本硬件、软件知识的基础上首先在PROTEUS软件中完成单片机最小系统的绘制与最小软件系统的联调,最终根据仿真实验的结果分组利用实物搭建出实际的单片机最小控制电路,并进行程序加载和调试,从而达到初步实现单片机控制电路的能力。本项目的完成分三个小的任务来完成。本次课我们完成第一个任务即可:任务1-1绘制单片机硬件最小系统1、任务要求:在熟悉单片机硬件基本结构及单片机仿真软件PROTEUS的基础上,设计并绘制出单片机硬件最小系统图。2、任务资讯:1、什么是单片机:2、AT89S51单片机内部结构包含哪几个部分?其引脚共有多少,各具有什么功能?3、单片机硬件系统包含哪些部分?每部分有什么功能?4、PROTEUS仿真软件中常用元件的名称?如何绘制单片机控制电路图?三、任务实施1、写出单片机最小系统中使用到的元件在PROTEUS软件中的元件名称。项目1认识单片机任务1.1开发软件的应用1、PROTUES软件的应用二、单片机仿真实例运行PROTUES软件进入下界面:1、放置元件单击“P”按钮,出现挑选元件对话框在对话框的KEYWORDS中输入要挑选的元件,如输入“AT89C51”则出现如下界面,选择该单片机,点击“任务1.2让单片机动起来理论知识:1.2.1微型计算机中数的表示方法本次课要点:原码、反码、补码的求法数制之间的转换原则〖新课内容:〗一、计算机中数的表示计算机只识别和处理数字信息,数字是以二进制数表示的;它易于物理实现,同时,资料存储、传送和处理简单可靠;运算规则简单,使逻辑电路的设计、分析、综合、方便,使计算器具有逻辑性。(一)数制及数制之间的转换1、各种进位计数及其表示方法数字符号:0、1、2、……9——数码。数码的个数——基数。进位规则:逢十进一例如,十进制数,10个数码;采用“逢十进一”30681=3×104+0×103+6×102+8×101+1×100例如,二进制数,2个数码,采用“逢二进一”(11010100)2=1×27+1×26+0×25+1×24+0×23+1×22+0×21+0×20总之,N进制数,N个数码,“逢N进一”二进制数与十六进制数的相互转换a)二进制转换十六进制:规律是:以小数点为界限,分别往前往后每四位二进制数一组进行分组,(整数部分不够的位直接在高位补0,小数部分不够的位在往其低位补0),之后把每一组转换成对应得到十六进制数码即可。b)十六进制转换二进制:规律是:上述转换的“逆”,即把每位十六进制数码都转换成对应四位二进制数,按照十六进制数正常的顺序排列即可。c)十进制转换十六进制:方法:可以先转换成二进制数,在转换成十六进制数(较简单些)。有符号数表示方法1、机器数与真值机器只认识二进制数:0、1。这是因为,电路状态常有两个,如通、断;高电平、低电平;…可用0、1表示。这种0、1、0、1…1在机器中的表现形式——机器数。一般为8位。机器数有:无符号数:00000000B、……11111111B即00H~FFH带符号数:+1010110B、-1101001真值符号位和数值位:计算机中通常都是用最高位来表示一个数的符号。并且分别用“0”和“1”表示正和负。有符号数有三种表示方法。原码、反码和补码。a)、原码(PrimaryCode)正数的原码与原来的数相同。负数的原码符号位“置1”,数值位不变。举例(略:+5、-5、+0、-0);原码数的范围:-127~+127b)、反码(DiminishedRadixComplement)正数的反码与原来的数相同。负数的反码符号位“置1”,数值位按位取反得到。举例(略:+5、-5、+0、-0);反码数的范围:-127~+127c)、补码(ComplementaryCode)正数的补码与原来的数相同。负数的补码由它的绝对值求反加1后得到,符号位“置1”。举例(略:+5、-5、0);数的范围:-128~+1271.2.280C51单片机内部结构及引脚功能本次课要点:A、80C51内部结构有几部分B、80C51引脚功能,主要包含几个组成部分〖新课内容:〗一.80C51内部BUS内部BUS内中断振荡器OSC程序存储器4KBROM数据存储器128BRAM2×16位定时器/计数器80C51CPU可编程并行口可编程串行口外中断一个8位的CPU一个片内振荡器及时钟电路4KBROM(不同型号内容不同,看书P4)128B内部RAM可寻址64KB的外部ROM和外部RAM的控制电路两个16位定时器/计数器(Timer/Counter)21个特殊功能寄存器(SpecialFunctionRegister)4个8位并行(Parallel)I/O口一个串行口(Series)5个中断源(Interrupt)这些我们称为单片机的资源(Souce),单片机的应用就是怎么充分合理地利用这些资源,来解决实际中的问题。二.80C51单片机的CPUMCS-51的CPU包括两部分:运算部件和控制器。1、运算部件运算部件组成:包括算术逻辑部件ALU、布尔处理器、累加器A、寄存器B、暂存器以及程序状态字寄存器PSW等。累加器A:是一个8位的累加器(也可以写为ACC),绝大部分运算和操作都同A有关。寄存器B:是专为执行乘法和除法操作而设置的,一般情况下也可以作为暂存器使用。2.控制器(Controler)控制器是单片机的神经中枢,以振荡器的频率位基准,产生CPU时序,对指令(Command)进行译码,然后发出各种控制信号,实现各种操作。三、80C51单片机的引脚及其功能P2.0P2.0P2口P2.7P0口VSSP3口RSTP1口P0.7EAVCCP0.040393231282180C51、87C5180C3118910171819201.电源(1)VCC(40)——芯片电源,接+5V;(4.5~5.5)(2)VSS(20)——电源地。2.时钟引脚XTAL1(18)、XTAL2(19)——外接晶体振荡或外接脉冲。(P42)3.控制线RST(9)——复位引脚。(Reset),高电平有效。EA——片内外ROM选择EA=1,选择片内ROM;EA=0,选择片外ROM。★注意★:控制信号线写法上的差别。有“非”表示低电平起作用,反之是高电平起作用。4.I/O口线P0口:8位双向I/O口。在访问外部存储器时,P0口可用于分时传送低8位地址总线和8位数据总线。能驱动8个LSTTL门。P1口:8位准双向I/O口(“准双向”是指该口内部有固定的上拉电阻)。能驱动4个LSTTL门。P2口:8位准双向I/O口。在访问外部存储器时,P2口可用于高8位地址总线。能驱动4个LSTTL门。P3口:8位准双向I/O口。能驱动4个LSTTL门。P3口还有第二功能。1.2.3MCS-51单片机最小应用系统--------以AT89C51为例〖课前复习:〗1、清零、取反指令的功能2、P0~P3口作为一般的输入\输出口使用的注意事项本次课要点:学会画最小硬件系统2、掌握最小软件系统〖新课内容:〗一、最小硬件系统1、最小硬件系统的组成所谓最小硬件系统是指单片机能工作所必须具备的硬件条件,它包括四个部分:1)电源芯片接上5V电源,即40脚接5V电源的正,20脚接地。2)时钟电路18、19脚接晶体振荡器和电容构成时钟电路,如图所示。3)程序存储器选择EA89C51片内有EEPROM,EA接“正”。4)复位电路8.2KRST8.2KRSTVCC+5V+5V+5V4031AT89C5119181920EA10μF6MHz20P2、介绍几个概念时钟周期:系统晶振频率的倒数状态周期:2倍的时钟周期★机器周期:12倍的时钟周期指令周期:指CPU执行一条指令占用的时间指令字节:指令占用存储空间的长度3、MCS-51复位的条件及复位后状态复位条件:在9引脚上加两个机器周期以上的高电平复位后状态◆复位后PC值为0000,程序从头运行◆大部分的SFR被置为0◆P0~P3口被置为FFH◆SP被置为07H4、如何检查最小硬件系统◆有无+5V电源◆31引脚是否为+5V◆9引脚正常工作应为低电平◆时钟引脚电压用数字表测量18、19引脚电压约为1.7V~2.9V之间用模拟表测量18引脚电压约为1.7V~2.9V之间19引脚电压只有零点几伏习题:1、单片机有哪些主要的内部资源?2、绘制出单片机最小硬件电路(以AT89S51为例)3、单片机复位条件?4、理解时钟频率、时钟周期、机器周期、指令周期和指令字节的概念。5、说出AT89S51单片机系统复位后片内各寄存器的状态。1.2.4AT89S51单片机的存储器配置方式采用哈佛结构,程序存储器和数据存储器是分开的,它们有各自的寻址系统、控制信号和功能,并且有不同的操作指令。程序存储器主要用来存放程序和表格常数,数据存储器主要用来存放程序运行的数据和结果。AT89S51单片机的组织结构可以分为三个不同的存储空间:☆64KB的程序存储器(ROM),包括片内4KBROM和片外60KBROM☆64KB的外部数据存储器(外RAM)☆256B内部数据存储器(内RAM),分高128B和低128B。这三种不同的存储器在物理结构上是相互独立的,但编址有重叠,CPU是怎么处理的?它是通过不同的指令和控制信号来对其实现读、写功能操作的。用MOVC指令访问ROM空间,用MOV指令访问内部RAM,用MOVX指令访问外部RAM。0000H0000H0FFFH0000H0FFFH1000HFFFFH外部ROM(60KB)内部ROM(4KB)EA=1外部ROM(4KB)EA=080H7FHFFH00HFFFFH0000H特殊功能寄存器(21个)内部RAM(128)外部RAM(64KB)图1-3AT89S51存储空间配置图表1-1AT89S51单片机内RAM结构表地址区域功能名称数据操作方式30H~7FH堆栈与数据缓冲区8位整体操作20H~2FH位寻址区8位整体操作或位操作00H~1FH18H~1FH工作寄存器3区8位整体操作10H~17H工作寄存器2区08H~0FH工作寄存器1区00H~07H工作寄存器0区下面介绍几个常见的特殊功能寄存器,其余的在后面相关项目中再介绍。A.累加器Acc累加器Acc是MCS-51系列单片机中最为常见的寄存器,许多指令的操作数取自于Acc许多运算的结果存放在Acc中。乘除法指令必须通过Acc进行,累加器Acc的助记符为A。在汇编语言指令中Acc简写为A。B.寄存器B乘除法指令都要用到寄存器B,B也可以作为一般的寄存器使用。C.程序状态字寄存器PSWPSW反映的是程序运行的状态,用于存放相关标志位。对其操作时,既可字节操作也可位操作。各位的意义如下:(1)Cy-----进位标志。累加器A在执行加减运算时,如果最高位有进位或借位,单片机会自动将Cy置1,否则清0。另外Cy还是位操作累加器,指令助记符为C。(2)AC----辅助进位标志。累加器A在执行加减运算时,如果低半字节Acc.3向高半字节Acc.4有进位或借位,单片机会自动将AC置1,否则清0。(3)RS1、RS0-----工作寄存器区选择控制位。工作寄存器区分为4个区,但每次能处于当前工作的寄存器区只能有一个。可以通过设置RS1、RS0这两位的值来选择处于当前工作状态的工作寄存器区。RS1、RS0=00——0区(00H~07H)RS1、RS0=01——1区(08H~0FH)RS1、RS0=10——2区(10H~17H)RS1、RS0=11——3区(18H~1FH)(4)OV-----有符号数运算时的溢出标志(5)P-----奇偶标志。表示累加器A中“1”的个数的奇偶性。如果A中“1”的个数为奇数,单片机会自动将P置1,否则清0。(6)F0、F1-----用户标志。与位寻址区的位地址功能相同,区别在于位寻址区内的位只有位地址,而F0、F1有3中表示方法:位地址D5H、D1H,位编号PSW.5、PSW.1和位定义名F0、F1。习题:说出AT89S51单片机内部128RAM的分区及其作用.如何区分位地址和字节地址?实践操作:任务要求:在PROTUES软件中绘制出AT89S51单片机的最小硬件电路,用P1.0引脚控制一发光二极管,调试给出的程序,使该二极管间隔亮灭,并不断循环。(列出所需器件清单,课外焊接该电路。项目2单片机流水灯控制任务2.1MCS-51的指令格式与常用符号〖课前复习:〗内部128RAM的分区及其作用如何区分位地址和字节地址本次课要点:1、80C51单片机的指令格式2、内部RAM间的数据传送和位操作〖新课内容:〗80C51单片机的指令格式[标号:]操作码[(目的操作数),(源操作数)][;注释]⑴标号:指令地址的符号表达形式。①一般用英文字母和数字组成,但是必须以字母开头。②系统的保留字不能作标号。例如:Acc、PSW,B等等③标号必须用冒号“:”与操作码分隔④标号是可以选择的⑵操作码:表示指令的操作功能。①操作码是表示指令功能的助记符,它代表了指令 的操作功能。例如:MOV数据传送指令的操作码ADD加法运算指令的操作码②操作码是指令的必需部分,是指令的核心,不可缺少。⑶操作数:参加操作的数据或数据地址①操作数可分为目的操作数和源操作数。②操作数可用二进制数、十进制数或十六进制数表示。③操作数的个数可以是0~3个。④第1个操作数与操作码之间用空格分隔,⑤操作数与 操作数之间用逗号“,”隔开。⑷注释:指令功能说明。①注释是可以选择的,是为便于阅读,对指令功能作的说明和注解。②注释必须以“;”开始。二、指令中部分常用的符号Ri:工作寄存器R0和工作寄存器R1,i=0或1Rn:工作寄存器R0~R7,n=0~7@Ri:寄存器R0和R1间接寻址8位的存储单元。Direct:8位直接地址,内部RAM的地址或SFR的地址。#data8:8位的立即数。数的范围为0~255。Bit:位地址。片内RAM和SFR中的可寻址位。#data16:16位立即数addr16:16位目的地址,用于LJMP和LCALL指令。addr11:11位目的地址,用于AJMP和ACALL指令。rel:带符号的8位偏移地址,用于SJMP和转移指令。addr16、addr11、rel三个符号在具体的指令中都表现为标号的形式。DPTR:数据指针,特殊功能寄存器。DPTR是DPH、DPL的组合,DPTR存放的是16位数据,其中的高8位就是DPH中的内容,低8位就是DPL中的内容。任务2.1最小软件系统汇编:把汇编程序翻译成目标程序(机器语言)的过程叫汇编。分类:手动汇编和机器汇编MOVA,#30H对应的机器语言为74H30H伪指令:在汇编过程中起控制作用,但自身不产生机器码,不属于MCS-51指令系统,而仅仅是为汇编服务的指令。RG(起始伪指令)(Origination)格式:ORG16位地址功能:规定它下面的程序的起始地址。也就是在汇编时将它下面的程序翻译成机器码时,这些机器码在程序存储器中存放的起始地址为ORG指令指定的16位地址。注意:◆一个程序中可以有多个ORG伪指令◆ORG后面的16位地址顺序是从小到大的顺序◆两条ORG指令之间存放的指令不能超过他们之间的地址范围END(结束伪指令)格式:END功能:是汇编语言程序结束标志。在END之后的指令,汇编程序不再翻译,因此,一个源程序只有一个END指令而且必须有一个,并且放在源程序的最后。注意:◆END必须放在程序的最后◆在程序中只能有一个有效的END3、无条件转移指令LJMPaddr16;长转移指令,可转移到64KB空间内的任意位置。AJMPaddr11;短转移指令,转移范围是与PC值同一2KB,可以向前或向后,超出程序汇编时将出错。(最好不用)SJMPrel;相对转移指令,转移范围是PC前后-128B~+127B,也不能超出范围。SJMP$=H:SJMPH单片机最小软件系统单片机的最小软件系统,也称为程序的一般结构。下面是满足最小软件系统要求的一个典型例子: ORG0000H;汇编程序开头 LJMPSETUP;跳过中断入口地址 ......;中断入口地址区 ORG0030HSETUP: ......;初始化区MAIN: ......;主程序区 LJMPMAIN;主程序循环执行 ......;子程序和中断服务程序区 END;程序结束汇编语言程序的从结构上分为6个部分:汇编程序开头、中断入口地址区、初始化区、主程序区、子程序和中断服务程序区以及程序结束。在我们编写程序时,只要将有关的程序嵌入到相应的区域即可。指令学习:(1)起始伪指令ORG(Origination)格式:ORG16位地址功能:规定它下面的程序的起始地址。也就是在汇编时将它下面的程序翻译成机器码时,这些机器码在程序存储器中存放的起始地址为ORG指令指定的16位地址。(2)结束伪指令END格式:END功能:汇编语言源程序的结束标志。在END后面的指令,汇编程序不再处理。(3)无条件转移指令:LJMPaddr16习题:1、写出汇编语言程序的一般结构。任务2.3内部RAM间的数据传送和位操作操作码:MOV(即Move的缩写)以累加器A为目的字节的传送指令。MOV A,Rn ;MOV A,direct ;MOV A,@Ri ;MOV A,#data ;以Rn为目的字节的传送指令MOV Rn,A ;MOV Rn,direct ;MOV Rn,#data ;以直接地址为目的字节的传送指令MOV direct,A ;MOV direct,Rn ;MOV direct,#data ;MOV direct1,direct2 ;MOV direct,@Ri ;以寄存器间接地址为目的字节的传送指令MOV @Ri,A ;MOV @Ri,direct;(direct:直接的)MOV @Ri,#data ;#data#datadirectACC@RiRnI/O口结构及工作原理〖课前复习:〗80C51的指令格式、常用符号对内部RAM的数据传送指令本次课要点:1、I/O口作为输入输出口的注意事项。2、如何区别bit和direct?〖新课内容:〗P0口结构及工作原理VV2内部总线写锁存器读锁存器读引脚DQP0.X锁存器CLKQABMUX&P0.X引脚地址/数据控制VCCV1P0口有两种功能,一个是作为通用的I/O口;另一个是作为地址/数据总线(Bus),用于扩展外部的ROM和RAM,我们以后再研究。(1)P0口用作输出口:控制线上信号为0,电子开关与B接通。同时与门输出为0,V1截止。由于V1截止,输出级处于开漏状态,用作输出口时,需外接上拉电阻。如果没有上拉电阻,在输出高电平时,V1、V2都截止,输出引脚悬空,不能输出高电平。用作输入口时,也就是要把引脚上的信号读进来。我们看一下,假设V2导通,这时不管外电路施加什么电平,都被V2短路,读进来的始终是低电平。因此要想把它作为输入口,必须保证V2截止,要使V2截止,需先向该端口写入“1”,这点要特别注意。P0口的每一位可任意作为输入或输出。既可以用数据传送指令来整体操作,也可用位操作指令一位一位地操作。带负载能力:8个LSTTL电平(0.36毫安/20微安)。操作举例(略)。V内部总线V内部总线写锁存器读锁存器读引脚DQP1.X锁存器CLKQP1.X引脚VCCR作为输出口时,不需外接上拉电阻。作为输入口时也要先向该端口锁存器写入“1”,然后再读。每位也可分别用作输入或输出。带负载能力:4个LSTTL门电路。3.P2口结构(同P1口)4.P3口结构(同P1口)小结:1、P0口用作输出口时,需外接上拉电阻。而P1~P3口不要接上拉电阻2、P0~P3口作为输入口使用,都要先向该端口锁存器写入“1”3、P0~P3口每位也可分别用作输入或输出。4、对口的操作,对字节操作用数据传送指令,对位操作用位操作指令。5、带负载能力P0口带8个LSTTL门电路,而P1~P3口能带4个LSTTL门电路二、介绍几个指令清零与取反指令CLRA;对累加器清零CPLA;将累加器中的内容按位取反注意:清零和取反指令只能对A操作如果要对内部RAM的某个单元清零,只能用MOV30H,#02、位操作指令1)、位传送指令MOV C,bit ;C即PSW中的CyMOV bit,C ;bit为可寻址位2)、位修正指令CLR C ;CLR bit ;清零CPL C ;CPL bit 取反;SETB C ;SETB bit ;置13)bit的形式bit可以是位编号、位地址、位定义名三种形式中的任何一种三、例题设内部RAM中各单元的内容均为FFH,执行下列程序后,写出单元内容发生变化的单元,并写出具体内容。SETBRS0CLRRS1MOVR1,#55HCLRRS0MOVR1,#0AAHMOVA,#40HMOVR0,#30HMOV@R0,AMOVR1,AMOV@R1,#20HMOV20H,#0SETB07HCPL08HCLR70HMOV60H.,#1如果(60H)=总结:如何区别bit和direct?一般在MOV后面,指的是direct,除了指令中含有C时,则指bit在SETBCLRCPL后都指bitCLRA,CPLA这两条指令是对8位数据的操作任务2.3循环彩灯控制一、硬件电路在最小硬件系统基础上,用P1口作输出,用低电平驱动LED发光管,LED发光条件是:电压1.8V左右,电流8~10mA。为满足要求,电路中串接限流电阻,经计算取360Ω。电路如图所示。360360Ω+5V8.2KRSTVCC+5V+5V+5V403189C51189181920EA10μF6MHz20P二、软件设计软件设计是在最小软件系统基础上,根据所要求的显示方式,用位操作指令CLRP1.X/SETBP1.X,对某位口操作,也可用数据传送指令MOVP1,#DATA,对多位口同时操作。如:设计一个由8个小灯构成的循环彩灯,要求8个小灯依次亮灭,然后重复循环程序为:ORG0000HLJMPSETUPORG0030HSETUP: CLRP1.0MOVR2,#80HDEL1:MOVR7MOVR2,#80HDEL1:MOVR7,#0FFHDEL2:DJNZR7,DEL2DJNZR2,DEL1 CLRP1.1SETBP1.1MOVR2,#80HDEL1:MOVR7MOVR2,#80HDEL1:MOVR7,#0FFHDEL2:DJNZR7,DEL2DJNZR2,DEL1SETBP1.2 CLRP1.3SETBP1.3 ……… SETBP1.7LJMPSETUPENDDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1RET三、引出指令1、NOP空操作指令2、循环转移指令DJNZRn,rel;先执行RnRn-1,然后判断,若Rn=0,则程序顺序执行,否则就转移,转移到rel处,转移范围为-128B~+127B。DJNZdirect,rel;同上面类似。用和返回指令LCALLaddr16;长调用指令,调用子程序,子程序可在64KB空间内任意位置,同LJMP指令。ACALLaddr11;断调用指令,调用子程序,同LJMP指令。RET;调用返回指令,子程序结束后,执行该指令程序将返回到调用子程序处继续向下执行。上面的程序也可写成:ORG0000HLJMPSETUPORG0030HSETUP: CLRP1.0LCALLDELAYSETBP1.0 CLRP1.1LCALLDELAYSETBP1.1 CLRP1.2SETBP1.2 CLRP1.3SETBP1.3 ……… SETBP1.7LJMPSETUPDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1RETEND注意:书写子程序时的注意事项书写子程序一定要有名称(标号)书写子程序一定要有RET返回指令参数的传递子程序和主程序间的关系如下图所示:子程序2子程序2断点主程序子程序1断点断点主程序子程序思考题:在循环彩灯硬件电路的基础上,设计一个循环彩灯程序,使小灯依次点亮后熄灭,再从头开始,重复8次。

任务2.4指令和程序设计(一)〖课前复习:〗1、循环转移指令的功能2、子程序书写的注意事项〖新课内容:〗一、程序:指令的有序集合要求:1、实现预定的功能2、所占用的空间字节最少3、程序执行的时间最短二、程序设计的方法1、分析问题、确定算法2、画程序流程图3、设计源程序三、程序的一般结构:ORG0000HLJMPSETUP……;中断入地址……;ORG0030HSETUP:……;初始化……MAIN:……;主程序……LJMPMAIN……;子程序和中断服务程序……END四、程序设计的方法1、顺序程序设计顺序程序是指按顺序依次执行的程序,把完成一系列操作的指令按操作的顺序组成指令序列。这样的程序很简单也称简单程序或直线程序。如上讲循环彩灯的第一个程序就是顺序程序。2、循环程序设计循环程序一般包括以下几部分:1)循环初值在进入循环之前,要对循环中需要使用的寄存器或存储器赋予规定的初值,主要是循环次数。2)循环体循环程序中要反复执行的部分,是循环结构中的主要部分。3)循环修改每执行一次循环,就要对有关参数修改,为进入下一次循环做准备。4)循环控制在程序中根据循环计数器的值或其他条件,控制循环是否应该结束。它有两种结构形式:置初值循环控制置初值循环控制循环体循环修改NY退出Y置初值循环控制循环修改循环体N退出例、将0~15共16个立即数传送到内部RAM30H开始的单元用顺序程序设计源程序为:ORG0000HLJMPSETUPOGR0030HSETUP:MOV30H,#0MOV30H,#1MOV30H,#2MOV30H,#3MOV30H,#4MOV30H,#5……………….………………..MOV30H,#15SJMP$END引出指令1、加1指令INCA;(A)(A)+1,以下类同。INCRnINCdirectINC@RiINCDPTR例1、设(R0)=7FH;(7EH)=40H执行:INC@R0INCR0INC@R0后,(R0)=7FH;(7EH)=00H;(7FH)=41H.2、减1指令DECA;(A)(A)-1 ,以下类同。DECRnDEC@RiDECdirect例5、设(R0)=7FH,在内RAM中,(7EH)=00H,(7FH)=40H执行:DEC@R0DECR0DEC@R0结果为:(R0)=7EH,(7EH)=0FFH,(7FH)=3FH。用循环程序设计源程序为:ORG0000HLJMPSETUPOGR0030HSETUP:MOVR7,#16MOVR0,#30HMOVA,#0AA:MOV@R0,AINCAINCR0DJNZR7,AASJMP$END

任务2.5指令和程序设计(二)〖课前复习:〗1、程序的一般结构2、循序程序设计的步骤3、DJNZ、INC、DEC指令的功能〖新课内容:〗例题:首先分析前面讲过的循环彩灯程序ORG0000HLJMPSETUPORG0030HSETUP: CLRP1.0;MOVP1,#11111110BLCALLDELAYSETBP1.0 CLRP1.1;MOVP1,#11111101BLCALLDELAYSETBP1.1 CLRP1.2;MOVP1,#11111011BSETBP1.2 CLRP1.3SETBP1.3;总结出这样的规律:最低位的0依次左移了一位 ……… SETBP1.7LJMPSETUPDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1RETEND一、引出指令1.循环移位指令(1)RLA;循环左移AA7A0(2)RRA;循环右移AA7A0(3)RLCA;带进位位的循环左移AA7A0Cy(4)RRCA;带进位位的循环右移AA7A0Cy注意:左移相当于乘以2右移相当于除以2下面我们利用上面的循环移位指令设计前面讲过的循环彩灯程序。 ORG0000H LJMPSETUP ORG0030HSETUP:MOVA,#0FEHMAIN: MOVP1,A LCALLDELAY RLA SJMPMAINDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1 RET END用循环移位指令一个循环彩灯程序,要求:8个小灯依次点亮,然后全部熄灭,然后重复循环。程序如下: ORG0000H LJMPSETUP ORG0030HSETUP: MOVA,#0FEHMAIN: MOVP1,A LCALLDELAY CLRC RLCA SJMPMAINDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1 RET可以看出,循环程序所用指令条数要少,占内部ROM字节较少,在程序中应尽可能编写循环程序。循环程序可以用不同的指令编写,关键选用合适的控制退出或条件判断退出。2、比较转移指令CJNEA,direct,rel;(C:Compare,J:Jump,N:No,E:Equle)若A=(direct),则程序顺序执行,且Cy=0。否则程序转移,转移到标号指示的地方。若A>(direct),Cy=0,若A<(direct),Cy=1。CJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel其余三条指令功能与第一条类似。例题:设内部RAM30H~3FH单元中有一组数据,编程求出数值等于55H的个数,并把结果存放在50H单元中二、分支程序设计在一些情况下,常需要根据不同的条件处理不同的工作,这种程序结构称为分支程序结构。例:编制一个循环彩灯程序,要求根据R5中内容的不同分别执行各自的程序,R5=0、1、2。 CJNER5,#0,DIS0 CJNER5,#1,DIS1 CJNER5,#2,DIS2STOP: SJMPSTOPDIS0: …… LJMPSTOPDIS1: …… LJMPSTOPDIS2: …… LJMPSTOP

任务2.6指令和程序设计(三)〖课前复习:〗1、循环移位指令的功能2、比较转移指令的功能〖新课内容:〗提出控制要求:在单片机的P1.0引脚上接一按键,当键按下时引脚为低电平,未按下为高电平,P2口接有8个发光二极管,要求编程实现按一次键依次点亮一个发光管,每次只有一个发光管亮。指令学习:一、条件转移指令(一)判A转移指令JZrel;(J:JumpZ:Zero)判断累加器A中的内容,看其是否为0,为0就转移,转移到标号指示的地方。JNZrel(N:No);与上面的指令功能类似,A中不为0转移。(二)判位(bit)转移指令1.JBbit,rel;对可位寻址的位进行判别,该位为1转移,转移到标号指示的地方。2.JNBbit,rel;对可位寻址的位进行判别,该位为0转移,转移到标号指示的地方。JBCbit,rel;对可位寻址的位进行判别,该位为1转移,转移到标号指示的地方,并且将该位清0。(三)判进位位Cy转移指令1.JCrel;对进位Cy进行判别,C=1转移,转移到标号指示的地方。2.JNCrel;与上条指令功能相同,C=0转移。例题:编程求20H单元中含有‘1’的个数,并将结果存到21H单元中分析问题:20H单元地址07H06H05H04H03H02H01H00H位地址ORG0000H LJMPSETUP ORG0030HSETUP:MOV21H,#0JNB00H,AA1INC21HAA2:JNB01H,AA3INC21H。。。。。。。。。。。 SJMP$ END思考题:利用循环程序实现上个题目的功能。二、程序书写的两种形式完整格式:如上面的程序就是完整格式子程序形式:AA:MOV21H,#0JNB00H,AA1INC21HAA2:JNB01H,AA3INC21H。。。。。。。。。。。RET三、堆栈操作指令1、堆栈的概念2、堆栈的原则:“先进后出,后进先出”3、堆栈指针:SP系统复位后,SP=07H,并且SP始终指向栈顶的4、堆栈的操作指令PUSHdirect;SP——SP+1,(SP)——(direct)PUSH为压栈指令,是将指定的直接地址direct中的内容压入堆栈。分两步进行,先将堆栈指针SP的内容加1,指向堆栈顶的一个空单元,然后将direct中的内容送入该空单元中。POPdirect;(SP)——(direct),SP——SP-1POP为出栈指令,是将当前堆栈指针SP所指示的单元内容弹出到指定的direct中,然后将SP减1。操作过程与PUSH相反。注意:由于堆栈操作只能以直接寻址的方式来操作,所以不能以累加器A或工作寄存器Rn作操作数,若要把A中的数送入堆栈,应用PUSHACC,这里的ACC表示累加器A的直接地址是E0H。注意:1对累加器A的压栈PUSHA╳PUSHACC√2、工作寄存器的压栈PUSHR0╳PUSH00H(0区工作)√PUSH08H(1区工作)√3、SP的值一般设置在数据缓冲区即30H~7FH小结:1、掌握堆栈操作的原则以及堆栈操作指令的功能2、掌握条件转移指令的转移条件

任务2.7指令和程序设计(四)〖课前复习:〗1堆栈操作的原则2、条件转移指令的功能〖新课内容:〗一、指令介绍交换指令:1.XCHA,Rn;2.XCHA,direct;3.XCHA,@Ri;4.XCHDA,@Ri;5.SWAPA;A中内容的高4位和低4位交换不带进位加法指令:ADDA,Rn;(Add:);(A)(A)+(Rn)以下类同。ADDA,directADDA,#dataADDA,@Ri★加法指令应用时,必须把一个加数放在累加器A中,并且结果也放到A中带进位加法指令:ADDCA,Rn;(A)(A)+(Rn)+(C),以下类同。ADDCA,directADDCA,#dataADDCA,@Ri例:两个16位无符号数相加R0R1+R2R3R6R4R5程序如下:AA:MOVA,R1ADDA,R3MOVR5,AMOVA,R0ADDCA,R2MOVR4,ACLRAADDCA,#0MOVR6,ARET例:已知R0中有一个用原码表示的数据,试求其补码结果仍然存放在R0中分析问题:给出一个二进制数,补码的求法,要考虑给出的数据是正数还是负数,正数的补码等原码,负数的补码在反码的基础上加1程序如下:AA:MOVA,R0JNBACC.7,BBCPLAADDA,#1SETBACC.7MOVR0,ABB:RET带进位减法指令:1.SUBBA,Rn;(SUB:Subtract);(A)(A)-(Rn)-(C),以下类同。2.SUBBA,direct3.SUBBA,#data4.SUBBA,@Ri★减法运算时,被减数一定放在累加器A中指令减法指令前,必须对Cy清0,用CLRC注意:INCA指令和ADDA,#1指令DECA指令和SUBBA,#1指令加1减1指令和加减法中的加1和减1指令是有区别的,主要是加1减1指令不影响标志位,特别是不影响进位标志Cy。而加减法运算中的加1和减1指令影响标志位。BCD码调整指令DAA对加法运算结果进行BCD码调整,主要用于BCD码加法运算,注意不能对BCD码减法运算结果进行调整。注意:DA指令只能跟在加法指令后面使用;调整前参与运算的两数是BCD码数;DA指令不能与减法指令配对使用,但可以实现对A中压缩BCD操作。乘法和除法指令乘法指令MULAB;(Multiplie)该条指令的功能是将两个8位无符号数相乘,两个无符号数分别存放在A和B中,乘积为16位,低8位存放在A中,高8位存放在B中。除法指令DIVAB;(Devided)该条指令的功能是将两个8位无符号数相除,被除数存放在A中,除数存放在B中,指令执行后,商存放A中,余数存放B中。注意:乘除法指令的执行周期为4个机器周期,参加运算的无符号数必须存放在A和B中,只有8位的乘除法指令。例:R1/R0R2分析问题:除法指令可以用减法来实现10/310–3=7……….17–3=4…………1和即为商4–3=1…………11<3……………余数程序如下:AA:MOVR2,#0BB:MOVA,R1CLRCSUBBA,R0;可以放在下面的位置MOVR1,AJCCCINCR2MOVR1,ASJMPBBCC:RET

任务2.8指令和程序设计(五)〖课前复习:〗1、加减法指令的功能及其注意事项2、乘除法指令的功能〖新课内容:〗一、指令介绍逻辑“与”运算指令ANLA,Rn(AndLogic)ANLA,@RiANLA,#dataANLA,directANLdirect,AANLdirect,#data这些指令的功能是将源操作数和目的操作数按位相与,结果送回目的操作数中。逻辑“或”运算1.ORLA,Rn;(OrLogic)2.ORLA,@Ri3.ORLA,#data4.ORLA,direct5.ORLdirect,A6.ORLdirect,#data这些指令的功能是将源操作数和目的操作数按位相或,结果送回目的操作数中。逻辑“异或”运算1.XRLA,Rn2.XRLA,@Ri3.XRLA,#data4.XRLA,direct5.XRLdirect,A6.XRLdirect,#data这些指令的功能是将源操作数和目的操作数按位相异或,结果送回目的操作数中。例:已知一单字节数存放在R0中,要求将其转换成十进制数存放在R1R2R3中分析问题:单字节数的范围:0~255例254属于上面的范围254/100商2R154/10商4R2余数5R3程序如下:AA:MOVA,R0MOVB,#100DIVABMOVR1,AMOVA,BMOVB,#10DIVABMOVR2,AMOVR3,BRET例:已知一单字节数存放在R0中,要求将其转换成十进制数存放在R1R2中程序如下:AA:MOVA,R0MOVB,#100DIVABMOVR1,AMOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR2,ARET例:已知三位BCD码表示的十进制数存放在R0R1R2中,要求将其转换成二进制数,存放在R2R3中。同学们考虑这个问题如何解决,如果把上个题目改成已知三位BCD码表示的十进制数存放在R0R12中,要求将其转换成二进制数,存放在R2R3中。问题又如何解决呢?小结:1、掌握与指令的功能及应用2、巩固SWAP指令的应用项目3数码管显示广告牌一、任务要求利用单片机控制数码管,实现静态显示和动态扫描显示。二、任务资讯1、数码管及其使用。2、单片机并行I/O口的应用。3、循环程序、查表程序和子程序的设计与调试。LED数码管及其显示方式一、LED数码管外型和引脚abcabcdefgdpcomabcdefgdp共阳型+5Vcom共阴型共阴型LED数码管如上图所示。正面为一个矩形,上面有七个笔画组成的8和圆点表示的小数点,共计8个,分别用a、b、c、d、e、f、g、dp代表各个笔画的名称,故又称为8“段”数码管,每一个段内部都有一个LED发光管和他们对应。上下两头各有5个引脚。其中有8个引脚分别和a、b、c、d、e、f、g、dp对应,两头中间引脚内部是相连的,接的是8个LED的公共端(Commonality)(即数码管的“位”),用COM表示。内部结构内部结构分为共阳型和共阴型,如上面图所示。LED数码管的编码(Code)方式从LED的内部结构看,要点亮它,跟我们前面讲的8个循环彩灯相似,8个小灯亮的方式不同,在数码管上显示不同的字符。一般用8位二进制数代表每个段。A为低位,Dp为高位,即:D7D6D5D4D3D2D1D0dpgfedcba如要显示0,就须把对应的a、b、c、d、e、f段的LED点亮,如果用正逻辑表示,即1亮0灭,显示0要求段的数据为3FH,同样显示其他字符也有对应数据表示。也就是显示字符的编码。下面为数码管的正逻辑编码:0:3FH;1:06H;2:5BH;3:4FH;4:66H;5:6DH;6:7DH7:07H;8:7FH;9:6FH。注意:共阴型数码管于正逻辑编码方式一致,共阳型数码管恰好相反。二、LED数码管静态显示方式LED数码管显示电路在单片机系统中分为静态(StaticStage)显示和动态(DynamicStage)显示。1.特点:(1)静态显示时数码管的段需要一个8位I/O口控制。(2)数码管的位:接“电源”或接“地”(3)静态显示方式,编程简单,但占用的I/O口线较多,dp390dp390Ω+5VP0P2最小系统P1P3a第一位第二位第四位第三位下面是其应用的例子:2.硬件电路(共阳型)P1口的数码管是完整电路,其余口为示意电路。显示程序(在四个数码管上分别显示0、1、2、3) ORG0000H LJMPSETUP ORG0030HSETUP: MOVA,#3FH CPLA MOVP1,A MOVA,#06H CPLA MOVP3,A MOVA,#5BH CPLA MOVP0,A MOVA,#4FH CPLA MOVP2,A SJMPSETUP END三、LED数码管动态显示方式1.特点:(1)将所有数码管的所有相同的段连接在一起,8个段共8组,由一个8位的I/O口控制。(2)每一个数码管的公共端由一位I/O口控制。通过分时向段送数据和位控制信号,使各数码管轮流显示,这种数码管显示方式就称为动态扫描(Scan)电路。(3)动态显示方式,编程相对复杂,但占用的I/O口线较少。adpadp最小系统P2············+5V+5V硬件电路(共阳型)段数据由P0口输出,外接上拉电阻,位由P2.0~P2.3输出,用低电平驱动三极管,三极管输出接数码管的公共端。三、任务实施1、用单片机控制一位数码管,依次显示数字0~9。(1)设计出硬件电路(在PROTUES软件中画出下面电路)(3)用汇编语言编写控制程序,并在KEIL软件中进行调试ORG0000HSTART:MOVR1,#00HNEXT:MOVA,R1MOVDPTR,#TABMOVCA,@A+DPTRMOVP0,ALCALLDELAYINCR1CJNER1,#10,NEXTLJMPSTART;延时1S的延时子程序DELAY:MOVR5,#20D2:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1DJNZR5,D2RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND2、用单片机控制四位数码管,稳定显示数字“0(1)设计出硬件电路(在PROTUES软件中画出下面电路)(3)用汇编语言编写控制程序,并在KEIL软件中进行调试。(数码管为共阳型)ORG0000HLJMPSETUPORG0030HSETUP:MOV70H,#0MOV71H,#1MOV72H,#2MOV73H,#3MOVDPTR,#TABMAIN:LCALLDISLJMPMAINDIS:MOVA,70HMOVCA,@A+DPTRMOVP0,ACLRP2.0LCALLDELSETBP2.0MOVA,71HMOVCA,@A+DPTRMOVP0,ACLRP2.1LCALLDELSETBP2.1MOVA,72HMOVCA,@A+DPTRMOVP0,ACLRP2.2LCALLDELSETBP2.2MOVA,73HMOVCA,@A+DPTRMOVP0,ACLRP2.3LCALLDELSETBP2.3RETDEL:MOVR7,#80HDJNZR7,$RETTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND项目4简易秒表的设计一、任务要求本项目制作一个简易秒表,利用LED数码管显示时间。用两位数码管动态显示时间,时间范围为0-60秒。扩展功能:用三个独立式按键实现秒表的启动、停止和复位功能。(选做)二、任务资讯1、单片机并行I/O口的应用。2、数码管显示,键盘控制技术应用。3、中断系统的应用。4、定时计数器的使用。5、综合应用程序的设计与调试。MCS-51中断系统中断(Interrupt)概述中断的概念所谓中断是指CPU正在处理某件事时,外部发生了某一事件(如定时器溢出),请求(Requle)CPU迅速处理(Process),CPU暂时中断当前的工作,转入处理所发生的事件,处理完毕后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,产生中断的请求源称为中断源。2.中断的调用过程现行程序现行程序中断服务程序现行程序中断服务程序现行程序现行程序现行程序二、与中断系统有关的SFR定时/计数器控制寄存器TCON(88H)IE1IT1IE0IT08BH8AH89H88HTCON(TimeControl)的字节地址为88H,表明该寄存器的每一位可位寻址。其中:IT0:外部中断0的触发方式选择位,当IT0=0时为电平触发(LeverTriggering),IT0=1时为边沿触发(EdgeTriggering)。IE0:为外部中断0的标志位。IT1:同IT0类似。IE1:同IE0类似。CPU是怎么知道中断请求的尼?CPU会在每个机器周期的S5P2采样外部中断引脚,根据以下两种情况置中断标志:当IT0=0时,CPU查到外引脚为低电平,置“1”中断标志,外引脚为高电平时清“0”中断标志。当IT0=1时,CPU是根据前后两次检查外引脚的情况判断是否有中断请求,当前一次为高,后一次为低,置“1”中断标志。其他情况不置中断标志。CPU响应(Respond)中断,转向执行中断服务程序时会自动由硬件清“0”中断允许控制寄存器IE(A8H)IE的地址末位为8,说明它也可位寻址。EAESET1EX1ET0EX0AFHACHABHAAHA9HA8HEA:所有中断总的控制位。(E:EnableA:All)ES:串行口中断允许位。(E:EnableS:Series)ET1:定时/计数器1中断允许位。EX1:外部中断1中断允许位。ET0:定时/计数器0中断允许位。EX0:外部中断0中断允许位。中断优先级控制寄存器IP(I:Interrupt,P:Priority)(B8H)也可位寻址。PSPT1PX1PT0PX0BCHBBHBAHB9HB8H通过对相应位设置可以改变该中断的优先级。MCS-51中断系统只有两级优先级,在同优先级内中断的优先顺序为:外部中断0、T0、外部中断1、T1、串行口。低级中断可以被高级中断所打断。MCS-51中断嵌套如下图所示:高级中断程序低级中断程序主程序高级中断程序低级中断程序主程序三、中断的处理过程中断的处理过程包括:中断请求、中断响应、中断服务和中断返回。1、中断请求当某个中断源要求CPU服务时,必须发出中断请求信号。内部中断源和外部中断源请求的方式不同。若是外部中断源,需要将请求信号加到该中断的外部引脚上,CPU会在执行指令的每个机器周期内检查外部中断引脚,有请求信号时置“1”该中断标志位。分为两种情况。具体上面已详细讲过。若是内部中断源,CPU内部的硬件电路会自动置位该中断标志位,具体内容我们学习定时器和串行口时再讲。2、中断响应有了中断请求,CPU也不一定会响应该中断,要响应中断还必须满足一定的条件。中断响应的条件如下:该中断已“开中断”。此时CPU没有响应同级或更高级中断。当前正处在所执行指令的最后一个机器周期。正在执行的指令不是RETI或是访问IE、IP的指令。满足上述条件CPU就会响应该中断,响应中断,在执行中断服务程序前还要执行以下几项操作:保护断点(Breakpoint)地址,将断点地址压入堆栈。撤消(Cancel)该中断源的中断请求标志(串行口除外)。关闭(Close)同级中断。将该中断源的入口地址送入PC。执行以上几项操作后就进入执行中断服务程序。3、中断服务保护现场(把断点地址信息压入堆栈保护)中断服务程序主体恢复现场4、中断返回中断服务内容完成,现场恢复,就可以回到原来被打断的地方继续运行。这个过程通过执行RETI指令自动完成,主要做下面两项工作。恢复断点地址。将响应中断时压入堆栈的断点地址弹出,送入PC。开放同级中断四、外部中断的应用外部中断应用需要注意以下几个问题:1、硬件上要把中断请求信号加到中断引脚上。2、软件上做三项工作提供中断入口地址中断的初始化(方式选择、开中断)编写具体的中断服务程序。下面以一个具体的事例说明外部中断的应用。我们以前做过的循环彩灯,现在要求通过按一个按钮,每按一次彩灯移一位。SS10K1K+5V360Ω最小系统P3.2+5V上图为电路图。按钮信号加到中断0的引脚P3.2,当S不按下时,P3.2引脚为高电平,按下为低电平,在按键的过程中P3.2引脚产生中断请求信号。中断触发方式用边沿触发,程序如下: ORG0000H LJMPSETUP ORG0003H LJMPINT0P ORG0030HSETUP:MOVA,#0FEH SETBIT0 SETBEX0 SETBEAMAIN:SJMPMAININT0P:MOVP1,A RLA RETI END定时/计数器概述〖课前复习:〗1、外部中断的应用步骤〖新课内容:〗定时/计数器概述80C51有两个16位的定时/计数器,T0和T1。本质上讲都是计数器。对外部事件脉冲计数就作为计数器使用对内部的机器周期计数就作为定时器使用。(对外部脉冲计数时,信号脉冲应加到相应的外引脚上T0(P3.4),T1(P3.5))他们都是加法计数器,计满后就会溢出(Overflow),溢出时产生中断标志。二、与定时/计数器有关的SFR1.定时/计数器工作方式控制寄存器TMOD(T:Timer,M:Mode)(89H)GATEC/TM1M0GATEC/TM1M0高4位控制T1低4位控制T0TMOD不可位寻址,高4位和低4位分别控制T1和T0。(1)M1M0——工作方式选择位。M1M0方式功能00方式013位的计数器01方式116位的计数器10方式28位的计数器,初值自动重装11方式3两个8位的计数器,仅适用T0(2)C/T——计数/定时方式选择位。C/T=1,为计数工作方式,对外部事件脉冲计数,作为计数器用(负跳变有效)。C/T=0,为定时工作方式,对内部机器脉冲计数,作定时器用。(3)GATE——门控位。一般取GATE=0,在后面的定时器工作方式结构中分析原因。TCON:定时/计数器控制寄存器(88H)TF1TR1TF0TR0IE1IT1IE0IT08FH8EH8DH8CH8BH8AH89H88HTCON可位寻址。低4位我们在中断部分已讲过,不再重复。高4位的功能与定时器有关,含义如下:TF0:定时/计数器T0溢出标志。(T:Timer,F:Flag)TR0:定时/计数器T0运行控制位。(T:Timer,R:Run)TR0=1,T0运行TR0=0,T0停止TF1:功能与TF0相同。TR1:功能与TR0相同。3.计数寄存器TH0、TL0是T0的两个8位计数器,TH1、TL1是T1的两个8位计数器,并且高8位数存放在TH中,低8位数存放在TL中。三、定时/计数器的工作方式1.方式0(自学)控制1控制1OSC÷12+TL0TH0(8)(8)TF0T0TR0INT0GATEC/T0中断当M1M0=01时,定时/计数器工作在方式1,逻辑结构如上图所示。内部为16位计数器,有TL0作低8位和TH0作8位,16位计满溢出,溢出置位TF0。最大计数值为216=65536。原理分析总结:GATE=0,TR0=1,控制开关闭合,开始计数。GATE=1,同时TR=1INT0=1时,才开始运行。总上分析,得出取GATE=03.方式2自动重装自动重装控制1OSC÷12+TL0(8)TF0T0TR0INT0GATEC/T0中断TH0(8) 当M1M0=10时,定时/计数器工作在方式2,逻辑结构如上图所示。定时/计数器工作为8位,能自动恢复定时/计数器初值。即用TL0计数,计满溢出时自动将TH0中的值送入TL0,自动恢复初值。计数的最大值为256。初值的计算方法例用定时器T0产生1ms的定时,系统的fosc=12MHZ分析:机器周期=1us要产生1ms的定时,要数1ms/1us=1000个机器周期的脉冲,那么数机器周期的方法有两种方法10001000065536初值(1)从0开始计数,计到1000即可,但是总要去看什么时候到1000?(2)从某个平台(初值)开始计数,计满刚好溢出,产生中断标志,请求中断具体计算:65536-1ms/1us=65536-1000=64536转换后存到计数寄存器中即可。四、定时/计数器的应用步骤1、初始化选择工作模式MOVTMOD,……..计数器付初值MOVTH0,……..MOVTL0,………..启动计数器SETBTR0开中断SETBET0SETBEA2、提供中断入口地址3、编写中断服务程序。(1)保护现场、恢复现场(2)重新赋初值(方式2除外)例:设计一程序,在P1.0引脚上输出周期为2ms方波。fOSC=6MHz.分析:要在P1.0引脚上输出方波,只要在P1.0引脚上交替输出高电平和低电平即可,用定时/计数器产生1ms定时,定时到改变输出信号。计算1ms定时的计数初值,1ms需要数500机器周期。初值=65536-500=6503665036/256得整数部分为254,余数为12。程序如下: ORG0000H LJMPSETUP ORG000BH ② LJMPINET0P ORG0030HSETUP: MOVTMOD,#01 MOVTH0,#254 ① MOVTL0,#12 SETBTR0 SETBET0 SETBEAMAIN: SJMP$INET0P: CLRTR0 MOVTH0,#254 MOVTL0,#12 ③ SETBTR0 CPLP1.0 RETI END从方式0和方式1的应用看,方式1比方式0有优点,计数范围大,初值计算不须换算,使用方便,建议采用。例:设计一程序,在P1.0引脚上输出400us方波。fOSC=6MHz.用方式2实现分析:由于400us需要计数200个机器脉冲数,而8位计数器就能计数256,因此用方式2可以实现。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论