单片机讲义2012.doc_第1页
单片机讲义2012.doc_第2页
单片机讲义2012.doc_第3页
单片机讲义2012.doc_第4页
单片机讲义2012.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

单片机应用实训讲义广东顺德梁銶琚职业技术学校 梁军勇 编2013.7第一部分 单片机基础知识第一节 单片机概述单片机单片微型计算机(Single-Chip Microcomputer,简写SCM),另一种说法是微控制器件(Micro Control Unit,简写MCU)。一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。MCS51是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL公司开发生产的。第二节 MCS-51单片机1、MCS-51单片机组成MCS-51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等一台计算机所需要的基本功能部件。其基本结构框图如图1-1所示。图1-1 51单片机组成框图(1)中央处理单元CPU(8位):用于数据处理、位操作(位测试、置位、复位)(2)只读存储器ROM(4KB或8KB):用于永久性存储应用程序,掩膜ROM、EPROM、EEPROM(3)随机存取存取器RAM(128B 或256B):用于程序运行中存储工作变量和数据(4)并行输入/输出口I / O(32线):4个8位并行I/O口P0、P1、P2、P3口,用作系统总线、扩展外存、I/O接口芯片(5)串行输入/输出口:1个全双工的异步串行口;用于串行通信(6)定时/计数器T:2 个或三个16位定时器/计数器;它与CPU之间各自独立工作,当它计数满时向CPU中断(7)时钟电路:振荡频率fOSC在1.212Mhz; 分为内部振荡器、外接振荡电路(8)中断系统:5源中断、2个中断优先级;可编程进行控制。2、MCS-51系列单片机的引脚及其功能MCS-51是标准的40引脚双列直插式集成电路芯片,引脚排列请参见图1-2。P0.0 P0.7: P0口8位双向口线。P1.0 P1.7 :P1口8位双向口线。P2.0 P2.7 :P2口8位双向口线。P3.0 P3.7 :P3口8位双向口线。 ALE:地址锁存控制信号。在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。 :外部程序存储器读选通信号。在读外部ROM时,有效(低电平),以实现外部ROM单元的读操作。图1-2 51单片机引脚排列图 :访问程序存储控制信号。当信号为低电平时,对ROM的读操作限定在外部程序存储器;当信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。 RST:复位信号。当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。 XTAL1和XTAL2:外接晶体引线端。当使用芯片内部时钟时,此两引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。 VSS:地线。 VCC:+5 V电源。 P3口线的第二功能。P3的8条口线都定义有第二功能第三节 单片机最简系统除了给电源引脚VCC和VSS接入直流电源外,单片机必须具备以下条件才能正常工作。1、复位电路通过某种方式,使单片机内各寄存器的值变为初始状态的操作称为复位。复位电路如图1-3所示,在时钟电路工作后,在RESET(图中为RST)端持续给出2个机器周期(24个振荡周期)的高电平就可完成复位操作。复位方式有两种:上电复位和开关复位。图a是上电复位电路。在通电瞬间,在RC电路充电过程中,RST端出现正脉冲,从而使单片机复位。C和R的值随时钟频率变化而变化,可由实验调整,当采用6MHz时钟时,C=22F,R=1K。图b为开关复位电路。当采用6MHz,C=22F,R1=200, R2=1K。在实际的应用系统中,有些外围芯片也需复位,如果复位电平与单片机的复位要求一致,则可与之相连。图1-3 51单片机复位电路2、振荡电路MCS-51单片机芯片内部没有一个反向放大器所构成的振荡器,XTAL1和XTAL2分别为振荡电路的输入端和输出端,时钟可以由内部或外部产生,如图1-4所示。图1-4 51单片机振荡电路内部时钟电路如图a所示,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶振频率可以在1.2MHz到12MHz之间选择,通常选择为6MHz,C1、C2电容取5pF30pF,电容的大小可起频率微调的作用。外部时钟电路如图b所示,XTAL1接地,XTAL2接外部振荡器械,对外部振荡器信号无特殊要求,只需保证脉冲宽度,一般频率为低于12MHz的方波信号。3、/Vpp:访问内部程序存储器的控制信号当=1时,CPU从片内ROM读取指令;=0时,CPU从片外ROM读取指令。一般情况下将其接高电平。51单片机最简系统如图1-5所示,包括电源端(20,40),上电复位(9),内部时钟(18,19),/Vpp=1(31)从片内ROM读取指令。图1-5 51单片机最简系统第二部分 开发软件第一节 uVision2 集成开发环境Keil是目前流行的单片机编程软件,界面如图2-1所示。图2-1 KEIL界面这里将一步一步的进行描述,从而指引你如何去创建一个简单的uVision2项目。1、启动uVision2并创建一个项目:ProjectNew Project我们建议你为每个项目建一个单独的文件夹。你可以在弹出的对话框中点击新建文件夹的图标来得到一个空的文件夹,然后选择子文件夹并键入项目的名称。弹出对话框中显示的是器件数据库。你只要选择所需要的MCU(AT89C51)就可以了。2、新建一个ASM源文件:File-New你可以用菜单选项来新建一个源文件。这将打开一个空的编辑窗口让你输入你的源代码。当你把此文件另存为*.ASM的文件后,uVision2将高亮显示汇编语言语法字符。3、关联项目文件和ASM文件一旦你创建了源文件,你就可以把它加入到你的项目中。右击Project窗口 Files页中的文件组来弹出快捷菜单,菜单中的Add Files选项打开一个标准的文件对话框,从对话框中选择你刚刚生成的文件。4、为目标设置工具选项uVision2 允许你为你的目标硬件设置选项。Options for Target对话框可以通过工具条图标打开。下面为一些相关的的设置:OutputCreate HEX File:uVision2每进行一次Build都生成HEX文件。5、编译项目并生成HEX文件通常情况下,在Options Target对话框中的设置已经足够使你开始一个新的应用。通过单击工具条上的Build目标的图标,你可以编译所有的源文件并生成应用。当你的应用中有语法错误时,uVision2将在Output Window Build页显示这些错误和告警信息。双击一个信息将打开此信息对应的文件并定位到语法错误处。第二节 仿真软件ProteusProteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,界面如图2-2所示。图2-2 proteus界面操作要点:1、放置元件左击挑选元件按钮P,弹出“PICK DEVICES”对话框。根据电路图拾取元件。2、元件位置的调整和参数的修改大部分元件可用左键选中元件(为红色),拖动改变其位置,但对于按键类元件,则可先右键选中,再左键拖动改变位置。选中元件中单击左键修改元件参数,右键可进行旋转操作。双击右键则删除该元件。3、放置电源端如图2-3所示,按下端口图标后,选择POWER和GROUND即可。图2-3 端口操作界面3、连线电路连线采用自动连线的形式,所以首先确定编辑窗口上方的自动连线图标为按下状态,再单击两个需连线的端口即可。4、仿真图2-4 单片机仿真设置单片机仿真时,需加载KEIL软件生成的HEX文件,双击单片机芯片,操作界面如图2-4所示:在打开文件图标中选中KEIL软件生成的HEX文件,在Clock Frequency输入晶振的频率。操作仿真按钮运行仿真。在界面下面的状态栏显示运行时间。附:实训仿真电路图和元件列表,由于软件默认单片机是处于工作状态,所以最简系统要求中的端口可以不接。元件名类子类备注数量参数At89c51microprocessors8051 family51单片机1ResresistorsGeneric电阻8330RespackresistorsResistor packs排阻11Kledoptoelectronicsleds发光二极管8红黄绿7segoptoelectronics7segment display四位数码管1共阴ButtonSwitchs&relaysSwitchs按键4SwitchSwitchs&relaysSwitchs开关4第三部分 单片机实训(交通灯系统设计)项目一 控制交通灯(LED)一、项目描述实现单片机对发光二极管点亮和熄灭控制。二、知识点1、硬件知识:简单的发光二极管电路设计;图3-1 简单发光二极管电路单片机吸入电流较大,电路设计如图3-1所示,发光二极管的正极接到高电平+5V,要使发光二极管点亮,端口P1.7的电位必须为低电平,即“0”;同理,要熄灭发光二极管,端口P1.7的电位必须为高电平,即“”。2、单片机知识(1)位和字节位:在单片机中一根线我们称它为一位,它有两种状态:0或1,分别对应电平的高或低,它是单片机最基本的数量,单位用BIT来表示。字节:8位我们把它称为一个字节,用BYTE表示。(2)输入输出(I/O)口MCS-51共有4个8位的并行I/O口,分别记作P0、P1、P2、P3。每个口都包含一个锁存器、一个输出驱动器和输入缓冲器,除P0口外,其余内部均接有上拉电阻。实际上,它们已被归入专用寄存器之列,并且具有字节寻址和位寻址功能。图3-2 51单片机引脚原理图 在访问片外扩展存储器时,低8位地址和数据由P0口分时传送,高8位地址由P2口传送。在无片外扩展存储器的系统中,这4个口的每一位均可作为双向的I/O端口使用。3、相关指令:SETB、CLR、MOV、SJMP(LJMP、AJMP)。三、程序编写基础MCS-51指令系统中每一条指令都是用意义明确的助记符来表示的,这种上指令的助记符、符号地址、标号等书写的程序称为汇编语言程序。汇编语言程序设计是开发计算机应用系统的基本功。计算机只认识机器指令(二进制编码),因此应用系统中必须把汇编语言源程序通过程序翻译成机器语言程序(目标程序),计算机才能执行,这个翻译过程称为汇编。1、伪指令汇编程序在汇编过程中,必须要提供一些专门的指令,这些指令在汇编时并不产生目标代码,不影响程序的执行,所以称为伪指令。下面介绍几种常用的伪指令。起始伪指令ORG结束伪指令END定义字节伪指令DB定义数据字伪指令DW等值伪指令EQU定义存储区伪指令DS位地址符伪指令BIT表示目前的地址伪指令$2、80C51汇编语言的语句结构标号: 操作码(指令) 操作数 ;注释例 START: MOV A,20H ;A(20H)标号可可无,由用户自定义,名称须由字母开头,但不能与指令或伪指令相同。3、标点符号使用规则:(1)标号后面为冒号。(2)指令(蓝色字体)后为空格;(3)操作数间用逗号隔开;(4)注释前加分号;4、数字要求#后数字代表数字,默认为10进制,如#12;二进制加后缀B,例#11010011B;16进制加后缀H,16进制数若是字母开头,需加0,如#0F6H,#34H。3、流程图在编写计算机程序时,可以将解决问题的方法和步骤用一些代表不同的操作的图形框来描述,然后用带有箭头的细线将这些图形框连接起来,表示某一事件的执行过程。这样的图形叫流程图,也称框图。流程图是描述算法的很好的工具,传统的流程图由下图的种基本图形框组成。起止框:表示程序的开始或结束。表示程序开始是只有一个出口,表示程序结束时只有一个入口。矩形框:也称功能框,表示计算或处理等基本操作,它有一个入口和一个出口。判断框:用来判断给出的条件是否成立,根据判断的结果决定程序的流向。一般只有一个入口和两个出口。流线:表示程序的流向。连接点:表示相关两框的连接处,圆圈内数字相同表示连接在一起。用这些图形框和流线组成的流程图描述算法,形象直观,简单方便,是初学者学习程序设计的好帮手。项目二测试交通灯一、项目描述:用一个开关控制交通灯,当开关闭合时,交通灯全亮;当开关断开时,交通灯全部熄灭,用来检测交通灯(LED)是否正常。二、知识点图3-3 简单开关电路1、简单的开关电路;如图3-3所示,当开关断开时,该端口一直处于高电平状态,当开关闭合时,此时端口接地,端口由高电平变为低电平,开关按键可长时间保留两种状态。单片机通过检测高电低电平的变化即可判断按钮是否按下。2、相关指令:MOV DIRECT,#DATA,LJMP(AJMP),JNB(JB)。三、流程图如图3-4所示,一个开关可实现两种状态控制,当端口为0时,即开关闭合时,LED亮,反之,LED灭。四、程序编写尝试分别用JNB和JB指令完成程序编写。图3-4 测试交通灯流程图五、思考如何实现更多的状态控制呢?项目三 手动控制交通灯方法一 双开关控制(位操作)一、项目描述:表3-1 交通灯状态表1增加一个开关,用两个开关来实现手动控制交通灯,可实现四种状态(两键四功能),对应的关系如表3-1所示:开关按键交通灯状态东西方向南北方向16P3.1P3.0P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0P100东西方向直行,南北方向禁行01东西方向左转,南北方向禁行10东西方向禁行,南北方向直行11东西方向禁行,南北方向左转二、知识点1、简单多开关电路;如图3-5所示,在项目二的基础上再增加一个开关,原理一致。图3-6 双开关控制(位)交通灯流程图图3-5 双开关电路电路图2、相关指令:MOV,LJMP,JNB(JB)。三、流程图 如图3-6所示,先判断P3.1口的状态,有两种可能,再判断P3.0口状态,完成相应状态操作后返回进行下一次检测。四、思考 当要实现更多的状态时,采用位检测的方法显然不切实际,流程图复杂,容易出错。如何采用更直观的检测方法,使程序可操作性更强呢?方法二 双开关控制(字节操作)表3-2 交通灯状态表2 一、项目描述A=P3&03H交通灯状态0东西方向直行,南北方向禁行1东西方向左转,南北方向禁行2东西方向禁行,南北方向直行3东西方向禁行,南北方向左转为使程序的可操作性更强,更容易扩展,将两位看成一个整体,采用字节检测的方法来实现。四种状态就可以对应为0,1,2,3,如表3-2所示。二、知识点1、特殊功能寄存器(SFR)。MCS-51单片机的ROM、RAM都有片内和片外之分,当内部存储器容量不足时,需拓展外部存储器。这些知识将在后面外围器件中提到。MCS-51单片机是通过地址的形式管理存储器的,其存储器结构如图3-7所示。 图3-7 51单片机存储结构图3-7 51单片机存储结构MCS-51单片机片内RAM的配置如图b所示。片内RAM为256字节,地址范围为00HFFH。分为四大部分:00H1FH,32字节,通用工作寄存器区; 20H2FH,16字节,位操作区;30H7FH,80字节,字节操作区; 80HFFH,128字节,特殊功能寄存器区。特殊功能寄存器的SFR地址范围为80HFFH。MCS-51系列有关18个SFR,占21个字节。其中地址末位数为0,8的寄存器可进行位寻址。详表3-3。2、ACC:累加器累加器为8位寄存器,是最常用的专用寄存器,功能较多,地位重要。它既可用于存放操作数,也可用来存放运算的中间结果。MCS-51单片机中大部分单操作数指令的操作数就取自累加器,许多双操作数指令中的一个操作数也取自累加器。表3-3 特殊功能寄存器地址表专用寄存器名称符号地址位地址名称D7D6D5D4D3D2D1D0P0口P080H8786858483828180堆栈指针SP81H数据指针(DPTR)低字节DPL82H数据指针(DPTR)高字节DPH83H定时器/计数器控制TCON88HTF1TR1TF0TR0IE1IT1IE0IT0定时器/计数器方式控制TMOD89HGATEC/M1M0GATEC/M1M0定时器/计数器0低字节TL08AH定时器/计数器1低字节TL18BH定时器/计数器0高字节TH08CH定时器/计数器1高字节TH18DHP1口P190H电源控制PCON97HSMODGF1GF0PDIDL串行控制SCON98HSM0SM1SM2RENTB8RB8TIRI串行数据缓冲器SBUF99HP2口P2A0HA7A6A5A4A3A2A1A0中断允许控制IEA8HEAET2ESET1EX1ET0EX0P3口P3B0HB7B6B5B4B3B2B1B0中断优先级控制IPB8HPT2PSPT1PX1PT0PX0程序状态字PSWD0HCYACF0RS1RS0OVP累加器AE0HE7E6E5E4E3E2E1E0B寄存器BF0HF7F6F5F4F3F2F1F03、相关指令: ANL(ORL),CJNE A,#DATA,rel。三、流程图如图3-7所示,将P3口看作字节,但只需最后两位,所以使用“与”指令屏蔽高6位,由于结果只有4种可能,当排除三种可能后,可直接出结果。四、思考实际操作中,很少使用开关作为控制按键,更多的场合是使用按键,那么如何使用按键来完成相同的操作呢?图3-7 双开关控制(字节)交通灯流程图方法三 四按键控制表3-4 四按键控制交通灯状态表一、项目描述按键交通灯状态P2.4东西方向直行,南北方向禁行P2.5东西方向左转,南北方向禁行P2.6东西方向禁行,南北方向直行P2.7东西方向禁行,南北方向左转由四个轻触按键实现,每一个按键对应一种状态,即一键一功能,如表3-4所示。二、知识点1、硬件知识:简单的多按键电路设计;按键的原理与带开关原理相似,如图3-8所示,当按钮未按下时,端口被外接上拉电阻拉为高电平;当按钮按下时,端口直接接地,为低电平。只不过相对开关来说,这种状态并不能维持长时间,当松开手后,端口又重新恢复为高电平。2、单片机知识:时序,多分支流程图。(1)振荡周期:为单片机提供时钟信号的振荡源的周期。振荡周期=(f:晶振频率)。(2)机器周期:通常将完成一个基本操作所需的时间称为机器周期。机器周期=12*振荡周期。(3)指令周期:是指CPU执行一条指令所需要的时间。指令周期=n*机器周期(n=1,2,4,可查指令表)图3-8 简单多按键电路本例中晶振频率为12MHz,经过计算可知机器周期为1us,指令周期为1us,2us,4us。这相对于人手按键的时间的毫秒级(约0.1秒)快多了。所以检测多个按键时,人手按键一次,单片机已经可以扫描多次了,不可能存在漏检现象。3、相关指令:JNB(JB)。三、流程图如图3-9所示,由于单片机运行速度相比人按键时间快得多,所以按顺序连续检测四个按键,进入相应状态操作后再返回进行下一次按键检测。若无按键按下,也直接返回进行下一次按键检测。四、思考一键一功能程序简单,但明显键太多了,也不符合实际操作,更多的方法是使用一个按键来实现,那么如何实现一键多功能呢?图3-9 四按键控制交通灯流程图表3-5 交通灯状态表方法四 单按键控制A(按键次数)交通灯状态1东西方向直行,南北方向禁行2东西方向左转,南北方向禁行3东西方向禁行,南北方向直行4/0东西方向禁行,南北方向左转一、项目描述使用一个按键,通过记录按键的次数来实现交通灯的控制,假设我们用A作为按键次数的记录器,然后可以通过A的值来判断相应的状态,对应关系如表3-5所示。为了避免记录值过大,当加至最后一种状态后,将按键次数清0,进行下一次循环。二、知识点1、相关指令:INC A,CJNE A,#data,rel。三、流程图。如图3-10所示。按键检测前,需设置初始状态,按键次数为0,熄灭交通灯。四、思考根据图3-10编写程序后,仿真时存在问题,反映出来的是按键不受控制。图3-10 单按键控制交通灯流程图我们可以观察理想的按键过程。如图3-11所示理想化的按键过程,未按下时,端口为“1”,按下后端口变为“0”。这里“0”的时间对单片机而言过长,以至于它检测了多次。由图可知,上升沿具有唯一性,所以当我们按下按键时,端口为“0”时先不进行操作,等到松手后,端口重新变为“1”,即当从“0”到“1”这个上升沿出现后我们再进行操作。即从按下到松手才认为是一次完整的按键过程。流程图修改如图3-10小图部分。五、再思考图3-11 理想按键示意图第二种方法在软件仿真时可以通过,但是进行硬件操作时,仍然有问题。方法五 单按键控制(按键去抖动)一、项目描述硬件操作按键存在机械抖动现象,采用软件延时去抖动的方法考虑消除这种现象。二、知识点1、硬件知识:按键的抖动现象实际上按键的波形的边缘并不是这样,如图3-12所示,由于按键是机械触点,当机械触点断开、闭合时,会有抖动。这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全可以感应到的,所以在原来理想的上升沿的后段又出现了多个上升沿,单片机仍有可能检测到按钮再次按下,所以必须消除抖动,软件方法就是延时去抖。就是在单片机获得端口为低电平的信息后,不是立即认定按键已被按下,而是延时1030毫秒的时间后再次检测该端口,如果仍为低,说明此键的确被按下了,这实际上是避开了按键按下时的抖动时间。图3-12 实际按键示意图2、通用工作寄存器当一个计算过程较复杂,为了要得到最终结果,往往要做很多步的中间结果;或者有一些变量在计算过程需反复使用,对于这种中间结果或使用频率高的数据单片机就将其写入RAM中的一块区域,地址为00H1FH,称为通用工作寄存器区。对通用工作寄存器区的管理如图3-13所示,将其再分成4个组,每个组8个字节,分别对应R0R7八个工作寄存器,所以共32个通用工作寄存器。图3-13 通用工作寄存器示意图3、相关指令:MOV Rn,#DATA;DJNZ Rn,rel4、软件延时程序单片机每运行一条指令需要消耗一定的时间,通过多次执行一条指令可达到延时的效果。延时20ms程序如下: MOVR7,#40 ; 1次D1:MOVR6,#250 ; 1次 线框共执行0次DJNZ R6,$ ; 250次, DJNZ R7,D1 ; 40次框内指令MOVR1,#250共执行1*40=40次,DJNZ R1,$共执行250*40=10000次,主要耗时在此,共耗时10000*2=20000us=20ms,其他指令耗时可忽略不计。三、流程图如图3-14所示,在下降沿和上升沿加入延时,按下和弹起均进行两次判断,确认后进行按键操作,否则返回重新检测按键。四、思考下降沿和上升沿都用了延时,从程序的角度来说除标号外,其他内容完全一致,有什么方法可以使程序更简洁呢?使用子程序。图3-14 单键控制交通灯流程图(延时去抖动)项目四 自动交通灯一、项目描述 项目三每一种交通灯状态维持一定的时间,实现自动交通灯。四种状态维持的时间分别为5秒,6秒,7秒,8秒。二、知识点1、单片机知识:主程序和子程序;上一个程序,延时程序几乎完全一样,为使程序简洁直观,常把多次使用的程序作为子程序使用。主程序调用了子程序,子程序执行完之后必须再回到主程序调用子程序的下面一条指令继续执行,如图3-15所示。2、相关指令:RET; LCALL(ACALL)。3、N秒延时以20毫秒为基础,编写1秒程序,显然,20毫秒需执行50次,50*40=2000255,需三重循环,子程序的名字由该子程序的第一条程序的标号为名,以RET指令结束,如1秒子程序: SEC:MOVR7,#8D0: MOVR6,#250 D1:MOVR5,#250 DJNZ R5,$ DJNZ R6,D1图3-15 主、子程序示意图DJNZ R7, D0 RET其中SEC为子程序的名字,主程序通过LCALL(ACALL)调用,子程序通过RET返回,所以CALL与RET必须成对出现。如要实现6秒,可有三种方法。方法一,直接修改R7的值,即48。 方法二,调用一次SEC耗时一秒,调用6次就6秒,LCALL SEC 共6次LCALL SEC方法三,类似的使用MOV和DJNZ指令可轻松实现N秒,令SEC执行N次,先赋值再执行后判断。MOVR4,#6S1:LCALL SEC DJNZ R4,S1三、流程图:如图-16所示。四、思考图3-16 自动交通灯流程图两个方向转换间要求加入黄灯闪烁3次,应如何编写程序?闪烁为半秒一次,将1秒子程序修改为半秒。项目五 交通灯系统方法一 外部中断实现一、项目描述三种模式,普通模式(自动交通灯),紧急模式(红灯常亮)和夜间模式(黄灯闪烁),平时运行在普通模式(项目四),当按下开关后切换到其他模式,当开关弹起后恢复。使用外部中断,两开关分别接在外部中断0端口P3.2和外部中断1端口P3.3。二、知识点1、中断中断是通过硬件来改变CPU的运行方向的。计算机在执行程序的过程中,当出现CPU以外的某种情况时,由服务对象向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。中断的过程很象子程序,其实它们之间还是有区别的:中断发生的时间是随机的,而子程序调用则是按程序进行的;子程序调用后返回,中断程序则是跳转后返回,所以它们的返回命令也是不一样的。与中断有关的寄存器有4个,分别为中断源寄存器TCON和SCON、中断允许控制寄存器IE和中断优先级控制寄存器IP;中断源有5个,分别为外部中断0请求 、外部中断1请求、定时器0溢出中断请求TF0、定时器1溢出中断请求TF1和串行中断请求RI或TI。5个中断源的排列顺序由中断优先级控制寄存器IP和顺序查询逻辑电路共同决定,在程序存储器ROM中,除0000H为初始地址外,MCS-51系列单片机各中断源的入口地址由硬件事先设定,分配如下:中断源 入口地址外部中断0 0003H定时器T0中断 000BH外部中断1 0013H定时器T1中断 001BH串行口中断 0023H 中断响应后,按中断种类,自动转到各中断区的首地址去执行程序,因此在中断地址区中理应存放中断服务程序。但通常情况下,8个单元难以存下一个完整的中断服务程序,因此通常也是从中断地址区首地址开始存放一条无条件转移指令LJMP,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址。 中断返回是指中断服务完后,计算机返回原来断开的位置(即断点),继续执行原来的程序。中断返回由中断返回指令RETI来实现。2、与中断有关的寄存器(1)IE:中断允许控制寄存器,地址为A8H,可位操作。EAESET1EX1ET0EX0EA:总中断允许控制位。EA = 1,开放所有中断,各中断源的允许和禁止可通过相应的中断允许位单独加以控制;EA = 0,禁止所有中断。ES:串行口中断允许位。ES = 1,允许串行口中断;ES = 0,禁止串行口中断。ET1:定时/计数器1中断允许位。ET1 = 1,允许定时器1中断;ET1 = 0,禁止定时器1中断。EX1:外部中断1中断允许位。EX1 = 1,允许外部中断1中断;EX1 = 0,禁止外部中断1中断。ET0:定时/计数器0中断允许位。ET0 = 1,允许定时器0中断;ET0 = 0,禁止定时器0中断。EX0:外部中断0中断允许位。EX0 = 1,允许外部中断0中断;EX0 = 0,禁止外部中断0中断。 8051单片机系统复位后,IE中各中断允许位均被清0,即禁止所有中断。(2)IP:中断优先级控制寄存器,地址为B8H,可位操作。PSPT1PX1PT0PX08051单片机有两个中断优先级,每个中断源都可以通过编程确定为高优先级中断或低 PS:串行口中断优先控制位。PS = 1,设定串行口为高优先级中断;PS = 0,设定串行口为低优先级中断。PT1:定时器T1中断优先控制位。PT1 = 1,设定定时器T1中断为高优先级中断;PT1 = 0,设定定时器T1中断为低优先级中断。PX1:外部中断1中断优先控制位。PX1 = 1,设定外部中断1为高优先级中断;PX1 = 0,设定外部中断1为低优先级中断。 PT0:定时器T0中断优先控制位。PT0 = 1,设定定时器T0中断为高优先级中断;PT0 = 0,设定定时器T0中断为低优先级中断。PX0:外部中断0中断优先控制位。PX0 = 1,设定外部中断0为高优先级中断;PX0 = 0,设定外部中断0为低优先级中断。当系统复位后,IP低5位全部清0,所有中断源均设定为低优先级中断。如果几个同一优先级的中断源同时向CPU申请中断,CPU 通过内部硬件查询逻辑,按自然优先级顺序确定先响应哪个中断请求。自然优先级由硬件形成,排列如下:中断源 同级自然优先级外部中断0 最高级定时器T0中断外部中断1定时器T1中断串行口中断 最低级(3)TCON:定时/计数器控制寄存器,地址为88H,可位操作。TF1TR1TF0TR0IE1IT1IE0IT0TF1:定时器1的溢出中断标志。T1被启动计数后,从初值做加1计数,计满溢出后由硬件置位TF1,同时向CPU发出中断请求,此标志一直保持到CPU响应中断后才由硬件自动清0。也可由软件查询该标志,并由软件清0。TR1:定时器1运行控制位。由软件置1或清0来启动或关闭定时器1。当GATE=1,且为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1即可启动定时器1。TF0:定时器0溢出中断标志。其操作功能与TF1相同。TR0:定时器0运行控制位。其功能及操作情况同TR1。 IE1:中断标志。IE1 = 1,外部中断1向CPU申请中断。IT1:中断触发方式控制位。当IT1 = 0时,外部中断1控制为低电平触发方式。当IT1=1时,外部中断1控制为下降沿触发方式。IE0:中断标志。其操作功能与IE1相同。IT0:中断触发方式控制位。其操作功能与IT1相同。3、相关指令:RETI。三、流程图(可先不考虑现场保护,即流程图中虚线框内内容)图3-17 交通灯系统流程图如图3-17所示,中断相关设置,包括分配好中断入口地址,设置相应的寄存器IE,IP(紧急模式优先),TCON(触发方式)等。四、思考思考1、若不考虑现场保护,程序仿真会出现问题,为什么要保护现场呢?当中断程序与主程序共用某些相同的寄存器时,如A,PSW,工作寄存器等,如本程序中,三种模式都使用了P口,夜间模式和主程序都需用到半秒子程序,使用了相同的工作寄存器,造成数据冲突,程序无法正常运行。所以在执行中断程序之前需保护这些数据,即保护现场;在中断返回之前恢复这些数据,即恢复现场。(1)PSW:程序状态字,地址D0H,可位操作。程序状态字是一个8位寄存器,用于存放程序运行中的各种状态信息。其中有些位的状态是根据程序执行结果,由硬件自动设置的,而有些位的状态则使用软件方法设定。PSW的位状态可以用专门指令进行测试,也可以用指令读出。一些条件转移指令将根据PSW有些位的状态,进行程序转移。PSW的各位定义如下:CYACF0RS1RS0OVP除PSW.1位保留未用外,其余各位的定义及使用如下:CY:进位标志位。CY是PSW中最常用的标志位。其功能有二:一是存放算术运算的进位标志,在进行加或减运算时,如果操作结果的最高位有进位或借位时,CY由硬件置“1”,否则清“0”;二是在位操作中,作累加位使用。位传送、位与位或等位操作,操作位之一固定是进位标志位。AC:辅助进位标志位。在进行加减运算中,当低4位向高4位进位或借位时,AC由硬件置“1”,否则AC位被清“0”。在BCD码调整中也要用到AC位状态。表3-6 工作寄存器组关系表F0:用户标志位。这是一个供用户定义的标志位,需要利用软件方法置位或复位。RS1RS0工作组000组011组102组113组RS1和RS0:寄存器组选择位。它们被用于选择CPU当前使用的通用寄存器组。通用寄存器共有4组,其对应关系如表3-6所示。这两个选择位的状态是由软件设置的,被选中的寄存器组即为当前通用寄存器组。但当单片机上电或复位后,RS1 RS0=00,工作组默认为0组。OV:溢出标志位。在带符号数加减运算中,OV=1表示加减运算超出了累加器A所能表示的符号数有效范围(-128 +127),即产生了溢出,因此运算结果是错误的,否则,OV=0表示运算正确,即无溢出产生。P:奇偶标志位。表明累加器A中内容的奇偶性。如果A中有奇数个“1”,则P置“1”,否则置“0”。凡是改变累加器A中内容的指令均会影响P标志位。此标志位对串行通信中的数据传输有重要的意义。在串行通信中常采用奇偶校验的办法来校验数据传输的可靠性。本项目中没有涉及到ACC和PSW两个寄存器,但最好养成凡是中断均保护这两个寄存器的习惯。至于工作寄存器组的保护可以采用分组的形式,由于默认为0组,进入中断后可改用其他组,只需设置好RS0和RS1的值即可。思考2、如果延时程序的通用工作组寄存器Rn,使用R0,R1和R2,中断程序使用第1组,程序为什么无法正常运行,但用第2、3组却没有这种情况?(1)SP:堆栈指针单片机RAM内部有一个特殊的存储区,可用来暂存数据,达到保护现场的目的。中断得到响应后自动清除中断标志,由硬件将程序计数器PC内容压入堆栈保护,然后将对应的中断矢量装入程序计数器PC,使程序转向中断矢量地址单元中去执行相应的中断服务程序。系统复位后,SP的内容为07H,从而复位后堆栈实际上是从08H单元开始的。08H1FH单元分别属于工作寄存器13组,。1组的R0,R1和R2与堆栈区冲突,运行后值均为0,等于将PC的值清零,导致中断返回时出现程序复位的效果。所以,一般情况下最好把SP值改为更大的值,如:MOV SP,#70H。(2)相关指令:PUSH,POP堆栈共有两种操作:进栈(PUSH)和出栈(POP)。运用堆栈保护现场一定要遵循“先进后出”,比较下列两段程序的区别:PUSH ACCPUSH ACCPUSH PSWPUSH PSWPOP PSWPOP ACCPOP ACCPOP PSW左边ACC先进栈,所以后出,为先进后出模式,正确;右边的程序则为先进先出,程序执行后,会将ACC和PSW内数据对调,错误。使用PUSH P1POP P1也可以完成保护现场和恢复现场,但Proteus软件存在漏洞,无法正常显示结果,在硬件操作不存在问题。方法二 计数器中断实现一、项目描述三种模式,普通模式(自动交通灯),紧急模式(红灯常亮)和夜间模式(黄灯闪烁),平时运行在普通模式(项目四),当按下开关后切换到其他模式,当开关弹起后恢复。使用计数器中断,两开关分别接在计数器中断0端口P3.4和计数器中断1端口P3.5。二、知识点1、定时器/计数器中断实质是计数器,脉冲每一次下降沿,计数寄存器数值将加1。计数的脉冲如果来源于单片机内部的晶振,由于其周期极为准确,这时称为定时器。计数的脉冲如果来源于单片机外部的引脚,由于其周期一般不准确,这时称为计数器。2、TMOD:定时/计数器方式寄存器,地址为89H,不可进行位操作。T1设置项T0设置项GATEC/M1M0GATEC/M1M0M1和M0:方式选择位。关系如下表:M1M0工作方式说明00方式013位/计数器,最大计数脉冲213=8192 01方式116位计数器,最大计数脉冲216=6553610方式2自动再装入8位计数器11方式3T0分为两个8位计数器;T1对外部停止计数C/:功能选择位。C/=0时,T有效,设置为定时器(TIMER)工作方式;C/=1时,设置为计数器(COUNTER)工作方式。GATE:门控位。当GATE=0时,软件控制位TR0或TR1置1即可启动定时器;当GATE=1时,软件控制位TR0或TR1须置1,同时还须(P3.2)或(P3.3)为高电平方可启动定时器,即允许外中断、启动定时器。计数定时器结构框图如图3-18所示。图3-18 定时器结构图3、计数器初值的计算把计数器计满为零所需要的计数值设定为C,计数初值设定为TC,由此可得到公式:TC=M-C式中,M为计数器模值,该值和计数器工作方式有关。在方式0时M为213;在方式1时M为216;在方式2和方式3时M为28。三、流程图图3-19 交通灯系统流程图如图3-19所示,中断相关设置,包括分配好中断入口地址,设置相应的寄存器IE,IP(紧急模式优先),TMOD,TH,TL等。作为计数器使用时,P3.4和P3.5为外部脉冲输入端,我们可以设置TMOD,使T1和T0作为计数器使用,工作在方式2;当输入一个脉冲时,计数器溢出,中断发生,根据公式N=281=255,初值应设为FFH,可达到与外部中断相同的效果。改变计数器设置的初始值,则按下开关的次数将发生改变。项目六 带数字显示的交通灯系统子项目一 数码管显示一、项目描述在四位共阴型数码管上显示数字1234。二、知识点1、

温馨提示

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

评论

0/150

提交评论