版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目一单片机最小系统
任务1认识单片机任务2制作单片机最小系统任务3单片机应用系统的开发流程
任务1认
识
单
片
机
知识目标:了解单片机的发展概况、特点及应用,掌握单片机的内部结构、组成及工作原理,掌握单片机存储器的结构分布。
能力目标:通过了解单片机的内部资源、封装及引脚,认识常见型号单片机芯片,并能简要描述其功能。
1.单片机的概念
单片微型计算机简称单片机。它把组成微型计算机的中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、I/O接口电路、定时/计数器及串行通信接口等功能部件制作在一块集成芯片中,构成一个完整的微型计算机。国际上通常称单片机为微控制器(MCU),又称为嵌入式微控制器(EMCU)。
2.单片机的发展概况
单片机诞生至今,已发展成上百种系列的近千个品种。单片机的发展大致分为如下5个阶段。
(1)单片机的诞生:从1971年美国Intel公司研制的4位微处理器Intel4004,到1972年该公司研制的功能较强的8位微处理器Intel8008,及1974年美国Fairchild公司研制的8位微处理器F8,拉开了研制单片机的序幕。
(2)单片机的初级阶段:以1976年Intel公司研制的MCS-48为代表,这个系列的单片机内集成有8位CPU、并行I/O口、8位定时/计数器、RAM、ROM等,资源少、无软件,只能保证最基本的控制功能。这一阶段的单片机产品还有Motorola公司的6801系列和Zilog公司的Z8系列。
(3)单片机的完善阶段:以Intel公司的MCS-51系列为代表,在这一阶段推出的单片机中普遍带有串行口、多级中断处理系统、16位定时/计数器,同时加大了片内RAM、ROM的容量,其寻址范围可达64KB,有的片内还带有A/D转换器接口。由于这类单片机的应用领域极其广泛,各大公司竞相研制,共约有几十个系列、300多个品种。其中,MCS-51系列单片机因其优良的性能价格比处于主导地位。
(4)单片机向微控制器过渡阶段:以Intel公司的MCS-96系列16位单片机为代表。与8位机相比,其数据宽度增加了一倍,实时处理能力更强,主频更高,RAM增加到了232B,ROM则达到了8KB,并且有8个中断源,同时配置了多路的A/D转换通道、高速的I/O处理单元,适用于更复杂的控制系统。但由于16位机价格太高,其应用受到一定的限制。而MCS-51因其高性价比,得到了广泛应用,致使知名芯片制造公司推出了许多与MCS-51兼容的8位单片机,一方面进一步巩固和发展了8位单片机的主流地位,另一方面强化了微控制器的特征。
(5)微控制器全面发展阶段:随着单片机在各个领域的广泛应用,世界各大单片机研制公司相继推出了高速、大寻址范围、强运算能力的通用型或专用型的单片机,如Intel公司研制的80960超级32位单片机,Motorola公司推出的MC68HC系列单片机,Microchip公司推出的一种完全不兼容MCS-51的新一代PIC系列单片机,促使单片机进入一个可广泛选择和全面发展应用的时代。
3.单片机的特点
单片机具有以下特点:
(1)体积小,成本低,运用灵活,易于产品化,能方便地组成各种智能化的控制设备和仪器,做到机电一体化。
(2)单片机的存储器ROM和RAM是严格区分的,即把开发成功的程序固化在ROM中,而把少量的随机数据存放在RAM中。这样,小容量的数据存储器能以高速RAM形式集成在单片机内,以加速单片机的执行速度。
(3)采用面向控制的指令系统。为满足控制的需要,单片机有更强的逻辑控制能力,特别是具有很强的位处理能力。
(4)单片机的I/O引脚通常是多功能的。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法。引脚处于何种功能,可由指令来设置或由机器状态来区分。
(5)单片机的外部扩展能力强。在内部的各种功能部分不能满足应用需求时,均可在外部进行扩展(如扩展ROM、RAM,I/O接口,定时器/计数器,中断系统等),与许多通用的微机接口芯片兼容,给应用系统设计带来极大的方便和灵活性。
(6)抗干扰能力强,适用温度范围宽,在各种恶劣的环境下都能可靠地工作,这是其他类型计算机无法比拟的。
(7)可以方便地实现多机和分布式控制,使整个控制系统的效率和可靠性大为提高。
4.单片机的应用
单片机的应用范围十分广泛,主要的应用领域如下:
(1)工业控制方面的应用:单片机可以构成各种工业控制系统、数据采集系统等。如数控机床、自动生产线控制、电机控制、温度控制、航空航天导航系统、电梯智能控制等。
(2)仪器仪表方面的应用:如智能仪器、医疗器械、数字示波器、各种物理量的测量仪器等。
(3)计算机外部设备与智能接口方面的应用:如图形终端机、传真机、复印机、打印机、绘图仪、磁盘/磁带机、程控交换机、通信终端等。
(4)商用产品方面的应用:如自动售货机、电子收款机、电子秤等。
(5)家用电器方面的应用:如微波炉、电视机、空调、洗衣机、录像机、音响设备等。
单片机在工业、农业、商业、金融、教育、科研、国防等领域有着十分广泛的应用。
5.MCS-51单片机的封装及引脚功能
1) MCS-51单片机的封装
单片机的种类繁多,封装形式各异。MCS-51单片机的封装主要有DIP、PLCC及LQFP三种形式,如有20引脚封装的AT89C2051,44引脚贴片型封装的STC89C52RC(如图1-1所示),40引脚DIP封装的AT89S51(如图1-2所示)等。
图1-1STC89C52RC的实物图图1-2AT89S51的实物图以如图1-2所示AT89S51单片机为例,介绍其引脚分布及功能。
AT89S51共40个引脚,如图1-3所示,大致分为如下四类。
(1)电源引脚。
VCC(40脚):电源端,接+5V电源。
VSS(20脚):接地端(GND)。
(2)时钟电路引脚。
XTAL1(19脚):外接晶振输入端。
XTAL2(18脚):外接晶振输出端。
(3)控制线引脚。
RESET/VPD(9脚):复位端/备用电源输入端。在单片机正常工作状态下,当RESET端出现持续两个机器周期以上的高电平时,单片机实现复位操作。VPD端可外接备用电源,以便在VCC掉电或电压降到一定值时向单片机供电。
/VPP(31脚):片外程序存储器选择输入端/Flash存储器编程电源端。端为访问外部程序存储器的地址允许输入端,当访问片外ROM时,必须保持低电平。VPP端是对AT89S51片内Flash存储器编程时作为编程允许电源 +12V的输入端。图1-3AT89S51的引脚分布图
ALE/
(30脚):地址锁存允许端/编程脉冲输入端。当访问外部程序存储器或数据存储器时,ALE端输出的脉冲用于锁存P0口(即P0.0~P0.7)分时送出的低8位地址(下降沿有效)。当不访问外部存储器时,该端以时钟频率的1/6输出固定的正脉冲信号,可用作外部定时脉冲源。对内部Flash存储器编程期间,该引脚用于输入编程脉冲。
(29脚):读片外程序存储器选通信号输出端。当AT89S51从外部程序存储器取指令时,端产生负脉冲,作为外部ROM的选通信号。在访问外部RAM或片内ROM时,不产生有效的PSEN非信号。
(4) I/O引脚(P0~P3口)。
P0口(32~39脚):引脚分布为P0.7/AD7~P0.0/AD0,是8位双向I/O口,也是地址/数据总线复用口。当P0口作输入/输出口用时,必须外接上拉电阻,它可驱动8个LSTTL门电路。当访问片外存储器时,P0口用作地址/数据分时复用口线。
P1口(1~8脚):引脚分布为P1.0~P1.7,是8位准双向I/O口,内部带上拉电阻,可驱动4个LSTTL门电路。
P2口(21~28脚):引脚分布为P2.0/A8~P2.7/A15,是8位准双向I/O口,内部带上拉电阻,可驱动4个LSTTL门电路。当访问片外存储器时,P2口用作高8位地址总线。
P3口(10~17脚):引脚分布为P3.0~P3.7,是8位准双向I/O口,内部带上拉电阻,可驱动4个LSTTL门电路。P3口的每一个引脚可作为一般I/O口用,此外还具有第二功能,其第二功能如表1-1所示。表1-1P3口的第二功能
6.MCS-51单片机的内部结构
以AT89S51单片机为例介绍其内部结构,如图1-4所示。
AT89S51单片机内部集成有1个8位中央处理器(CPU)、128B的数据存储器(RAM)、128B的特殊功能寄存器(SFR)、4KB的程序存储器(ROM)、1个时钟电路、2个16位定时/计数器、5个中断源、4个8位并行I/O口P0~P3、1个全双工串行口、64KB的扩展总线控制电路等,它们通过地址总线(AB)、数据总线(DB)和控制总线(CB)连接在一起。图1-4AT89S51的内部结构图
1)中央处理器(CPU)
AT89S51单片机的中央处理器(CPU)由运算器和控制器组成。
运算器:由算术逻辑运算部件(ALU)、累加器(ACC)、寄存器(B)、程序状态寄存器(PSW)、十进制调整电路、布尔处理器等组成。其功能主要是进行算术运算、逻辑运算、数据传送和位处理等操作,并将运算结果的状态送至状态寄存器(PSW)。控制器:控制单片机系统完成各种操作,包括时钟电路、复位电路、定时控制逻辑、程序计数器(PC)、数据指针(DPTR)、堆栈指针(SP)、指令寄存器(IR)、指令译码器(ID)和信息传送控制部件等部分,它可以根据不同指令产生的操作时序控制单片机各部分工作。其工作过程为,以主振频率为基准,由定时控制逻辑发出CPU时序,将IR中的指令取出送ID进行译码,再由信息传送控制部件发出一系列控制信号,控制单片机各部分运行,完成指令功能。
2)存储器
单片机的存储器分两种:程序存储器和数据存储器。单片机存储器采用哈佛结构,它将程序存储器和数据存储器分开编址,各自有自己的寻址方式。
(1)程序存储器:用于存放已编写好的程序及数据表格,常用类型有ROM、EPROM、E2PROM、Flash等。AT89S51中采用的就是Flash,其存储容量为4 KB。
程序存储器的存储空间配置如图1-5所示。图1-5程序存储器的存储空间配置
AT89S51单片机有64KB的程序存储器。其中:内部有4KB,地址范围为0000H~0FFFH;片外最多可扩展空间为60KB,地址范围为1000H~FFFFH。片内与片外程序存储器的最大寻址范围为0000H~FFFFH。由于单片机的程序存储器采用片内、片外统一编址,则地址范围为0000H~0FFFH的程序存储器可在单片机内部或外部,通过单片机外围引脚的状态来区分。如果接高电平(即= 1),则表示0000H~0FFFH在片内程序存储器中;如果接低电平(即= 0),则表示0000H~0FFFH在片外程序存储器中。且程序从片内程序存储器开始执行,PC值超出片内ROM容量时,会自动转向片外程序存储器中的程序。需要指出的是,在64KB的ROM中,0003H、000BH、0013H、001BH和0023H5个单元地址在AT89S51单片机中是系统专用的,用户不能更改。
(2)数据存储器:用于存放输入/输出数据、中间运算结果,常用类型为RAM。AT89S51中的数据存储器较小,存储容量仅为128B。若存储器空间不够用,可以外部扩展。数据存储器的存储空间配置如图1-6所示。数据存储器又分为片内RAM和片外RAM两部分。片内RAM的容量为256 B,地址范围为0000H~00FFH;片外RAM的容量为64 KB,地址范围为0000H~FFFFH。片内、片外RAM是两个独立的地址空间,分别单独编址。使用片内和片外数据存储器时,采用不同的指令加以区别。在访问片内数据存储器时,可使用MOV指令;在访问片外数据存储器时,可使用MOVX指令。
片内数据存储器分为低128 B数据存储器和高128 B数据存储器。低128 B数据存储器分为工作寄存器区、位寻址区和用户RAM区,而高128 B数据存储器为特殊功能寄存器(SFR)区。图1-6数据存储器的存储空间配置低128B数据存储器的地址空间分配如下:
①工作寄存器区:地址范围为0000H~001FH,共32个存储单元,分为四组,每组有8通用寄存器R0~R7。每组均可作为CPU当前的工作寄存器,可通过程序状态字(PSW)的RS1、RS0两位进行当前工作状态的设置,如表1-2所示。当复位时,自动选中第0组工作寄存器。一旦选中了一组,其他三组的地址空间只用于数据存储器,不能作为寄存器,如果有需要必须重新设置。表1-2工作寄存器组选择表
②位寻址区:地址范围为0020H~002FH,共16个字节,每个字节8位,共128位,其地址编码为0000H~007FH,这些地址单元构成了位寻址区,如表1-3所示。位寻址区既可采用位寻址方式访问,也可采用字节寻址方式访问。
③用户RAM区:地址范围为30H~7FH,共80个单元,可作为堆栈或数据缓冲使用。
高128B数据存储器为SFR区。AT89S51单片机中共有21个SFR并分布在80H~FFH地址范围中,如表1-4所示。SFR只能采用直接寻址及位寻址。表1-3位寻址区地址分配表
表1-4特殊功能寄存器表
累加器ACC
累加器ACC(简称A寄存器或累加器A)是一个具有特殊用途的8位寄存器,主要用来存放一个操作数或存放运算的结果。累加器ACC是CPU中使用最频繁的寄存器,MCS-51指令系统中多数指令的执行都通过它进行。
寄存器B
寄存器B也是一个8位寄存器,在乘法和除法运算中用作ALU的输入之一。其他情况下,B可作为一个工作寄存器使用。
程序状态字(ProgramStateWord,PSW)
程序状态字(PSW)是一个8位寄存器,用来保存指令执行结果的状态信息,为后续指令的执行提供状态条件。其各位定义如下:
CY:进位标志位,又称为“位累加器”。
AC:辅助进位标志位。
F0:用户通用状态标志位。
RS1、RS0:当前工作寄存器区选择位。
OV:溢出标志位。
—:保留位。
P:奇偶标志位。
堆栈指针(StackPointer,SP)
堆栈是指用户在单片机内部RAM中开辟的、遵循“先进后出”原则、只能从一端存取数据的一个存储区。把存取数据的一端称为栈顶,用一个专用8位寄存器SP来表示,称为堆栈指针。MCS-51的堆栈是向上(即向地址增加的方向)生成的,堆栈指针SP的初始值称为栈底。在堆栈操作过程中,SP始终指向堆栈的栈顶。
数据指针寄存器(DPTR)
数据指针寄存器(DPTR)是一个16位的专用寄存器,其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示。DPTR既可作为一个16位寄存器DPTR来处理,也可作为两个独立的8位寄存器DPH和DPL来处理。
DPTR主要用来存放16位地址,可通过它访问64 KB外部数据存储器或外部程序存储器空间。
程序计数器(ProgramCounter,PC)
PC是CPU的最基本部件,它是一个独立的16位程序计数器,但不属于特殊功能寄存器,不可以访问,在物理结构上是独立的,用于存放下一条待执行指令的地址。
PC的基本工作过程可以描述为:PC中的数作为指令地址输出给程序存储器,程序存储器按此地址输出指令字节,同时PC本身自动加1,指向下一条指令。但在执行转移、调用类指令或响应中断等操作时,PC的工作过程将有所不同。
MCS-51的PC是一个16位寄存器,其寻址范围是64KB(即216B)。在MCS-51指令系统中有一类基址加变址寻址的指令,PC可用作该类指令的基本地址寄存器。
3)输入/输出(I/O)接口
AT89S51的输入/输出接口包括4个8位并行口(P0~P3),共32根口线。其具体结构及功能见项目二任务1的知识链接部分。
4)其他内部资源
AT89S51内部还有2个16位定时/计数器、中断系统和1个全双工串行口。
定时/计数器:可以通过对系统时钟计数实现定时,也可对外部事件的脉冲进行计数。
中断系统:有5个中断源,其中外部中断源2个(由单片机的外围引脚、引入)、内部中断源3个(分别由2个定时/计数器及串行口产生)。可以对5个中断源进行中断允许和中断优先级的控制。全双工串行口:一个可编程全双工串行通信接口,具有通用异步接收/发送器(UART)的全部功能,可以同时进行数据的接收和发送,还可以作为一个同步移位寄存器使用。任务2制作单片机最小系统
知识目标:掌握构成单片机最小系统的复位电路和时钟电路。
能力目标:能够识读单片机最小系统装配图,并能按照工艺要求焊接制作、测试单片机最小系统。
1.单片机最小系统的构成
单片机最小系统是指在尽可能少的外部条件下,能使单片机独立工作的系统。以AT89S51为例,由AT89S51外接时钟电路和复位电路即可构成单片机最小系统,如图1-7所示。图1-7单片机最小系统原理图
1)时钟电路
时钟电路用于产生单片机工作时所需的时钟信号。单片机在时钟信号控制下,各部件之间协调一致地工作。
根据AT89S51单片机产生时钟方式的不同,可将时钟电路分为内部时钟方式及外部时钟方式两种形式。其中,内部时钟电路是指在XTAL1和XTAL2引脚之间外接石英晶体振荡器及两个谐振电容构成,如图1-8(a)所示。内部时钟电路的石英晶体振荡器频率一般选择在1.2~60MHz之间,谐振电容采用20~30pF的瓷片电容。外部时钟电路是指单片机的时钟信号由外部时钟信号提供,由XTAL1引脚输入,而XTAL2引脚悬空,如图1-8(b)所示。图1-8时钟电路
2)单片机的时序
时序是指各信号之间的时间序列。CPU在时序电路的控制下有节奏地执行着指令,按照先后顺序完成各种操作。时序的基本单位有4个。
(1)时钟周期。时钟电路产生的最小时序单位称为时钟周期,它是由石英晶体振荡器的振荡频率决定的,又称振荡周期。
(2)状态周期。将石英晶体振荡器的振荡频率进行二分频,就构成了状态周期。一个状态周期等于两个时钟周期。将这两个时钟周期称为两个节拍,用P1、P2表示。
(3)机器周期。机器周期是单片机执行一种基本操作所需要的时间单位。1个机器周期由6个状态周期构成。6个状态依次用S1~S6表示。
(4)指令周期。单片机执行一条指令所需要的时间称为指令周期,通常由1~4个机器周期组成。它是由不同指令来决定时间长短的,一般MCS-51单片机的指令分为单机器周期、双机器周期和四机器周期指令。例如,石英晶体振荡器的频率为12MHz,则其状态周期、机器周期和指令周期分别为
状态周期 = 2 × 时钟周期 = 2×
= 0.167μs
机器周期 = 12 × 时钟周期 = 1μs
指令周期 = (1~4)机器周期 = 1~4μs
3)复位电路
单片机复位就是对单片机进行初始化操作,使程序从0000H开始执行。
(1)复位电路的构成:要实现复位操作,只需在AT89S51单片机的RST引脚上保持2个机器周期以上的高电平信号就可以了。单片机的复位电路有两种形式:上电复位和按钮复位。
上电复位是利用RC微分电路充电产生正脉冲来实现的,如图1-9(a)所示。上电瞬间,RST端的电位与VCC的相同,随着电容上储能的增加,电容电压也增大,充电电流减少,RST端的电位逐渐下降。这样在RST端就会建立一个脉冲电压,调节电容与电阻的大小,就可对脉冲持续的时间进行调节。通常,晶振频率为6MHz时,复位电路元件参数为22μF的电解电容和1kΩ的电阻;晶振频率为12MHz时,复位电路元件参数为10μF的电解电容和10kΩ的电阻。
按钮复位电路是将一个按钮开关和一个0~200Ω的电阻并联于上电复位电路的电容上,如图1-9(b)所示。通过按下复位按钮,电源对RST端维持两个机器周期的高电平实现复位。
(2)复位后各寄存器的状态:当单片机进行复位操作后,各寄存器的内容被初始化。复位后各寄存器状态见表1-5。图1-9复位电路表1-5单片机复位后内部各寄存器的状态
2.AT89S51单片机最小系统的制作
元器件清单如表1-6所示。
最小系统制作步骤及注意事项如下:
(1)把元器件成形,如电阻、跳线、稳压管、排针等成形。
(2)焊接的过程中要注意焊接的顺序,先焊接跳线、稳压二极管、电阻、晶振、集成电路座、电容、排针、发光二极管、电解电容、微动开关、USB座、锁紧座,最后焊接铜柱。
(3)焊接时要注意极性元器件的正负极,如二极管、电解电容、排阻。表1-6单片机最小系统元器件清单
(4)所有元器件都要压到最低,防止时间长短路。
(5)排针不耐高温,焊接的时间要尽可能短,同时注意短针插入板内。
(6)锁紧座焊接前要把把手抬起,否则会把一个引脚内的毛隙焊死。
(7)焊接USB座时,先将两条金属腿弯到板子上,然后焊大引脚,之后再焊4个小针。
(8)根据单片机最小系统焊接装配图(如图1-10所示),焊接制作,安装集成电路和跳线帽,之后交给老师,进行功能检测。图1-10单片机最小系统装配图
(9)单片机最小系统检测成功后(如图1-11所示),使用时要注意,接通电源前先检查元器件的接法是否正确;电源的正负极不要接反,否则可能会烧坏板子;单片机芯片要在接通电源之前安装,以免单片机的某些引脚损坏;同时注意下载程序时不要占用P1口,程序下载完之后再用。图1-11单片机最小系统实物图任务3单片机应用系统的开发流程
知识目标:掌握单片机应用系统的开发流程。
能力目标:学会使用Proteus软件设计单片机应用系统的硬件电路和使用KeilμVision3软件编译、调试应用程序。
单片机应用系统是指以单片机为核心,配以一定的外围电路和软件,能实现某种或几种功能的应用系统。一个完整的单片机应用系统包括硬件和软件两大部分。单片机应用系统的开发流程一般分为任务要求分析,硬件电路的设计与制作,软件设计,程序写入芯片,系统软、硬件联调等几个阶段。
1.任务要求分析
任务要求分析是单片机应用系统开发工作的开始和基础,只有经过深入、细致的系统需求分析,才能使系统开发工作顺利完成。任务要求分析主要包括:明确被测控参数的形式(电量、非电量、模拟量、数字量等)、范围、性能指标、系统功能、显示、报警及打印要求、工作环境等,同时要研究同类系统在国内外的发展现状,为系统开发提供参考。
2.硬件电路的设计与制作
在分析任务要求的基础上,进行应用系统硬件电路的设计,包括元器件选择、电路设计制作等,具体为单片机系统扩展、系统配置和工艺设计。其中单片机系统扩展是指程序存储器和数据存储器的扩展、I/O接口的扩展、中断系统的扩展等;系统配置是指根据系统功能要求配置相应的A/D、D/A、键盘、显示、打印机等外围设备;工艺设计是指接插件、配线、面板、机箱的设计等。为使硬件设计尽可能合理,要遵循以下原则:
①实现相应功能的电路尽量采用典型通用的电路;
②系统扩展及配置应留有余地,方便将来修改和系统扩展;
③硬件结构应结合软件考虑,尽可能用软件代替硬件,简化硬件结构;
④应选用性价比高且功耗低的器件;
⑤应考虑系统的可靠性和抗干扰设计;
⑥应考虑到系统安装、调试、维修的方便。硬件电路的设计通常使用专门的电路设计软件实现。Proteus软件是由英国LabcenterElectronics公司开发的一种电路设计与仿真软件。它包含ISIS和ARES两个应用软件。其中,ISIS是智能原理图输入系统软件,用来完成电路原理图的设计与仿真;ARES是高级PCB布线编辑软件,用来完成PCB的设计。该软件是真正意义上的单片机系统仿真软件,从原理图设计、单片机编程、系统仿真到PCB设计一气呵成,实现了从概念到产品的完整设计。下面以八路抢答器为例介绍Proteus软件的基本使用方法。
1)安装Proteus软件
Proteus软件可在其官方网站上下载试用版本进行安装,安装环境要求为
①操作系统为Windows98/2000/XP或更高版本;
② CPU主频200MHz及以上;
③硬盘和内存容量均不小于64MB。
2)画电路原理图
(1)启动软件。单击“开始”→“程序”→“Proteus7Professional”→“ISIS7Professional”选项,进入Proteus的原理图编辑界面,如图1-12所示。图1-12Proteus原理图编辑界面菜单栏共有12项,每一项均有相应的下拉菜单,如表1-7所示。
工具栏的主要作用如表1-8所示。
(2)新建设计文件。单击菜单栏中的“File”→“NewDesign”选项,弹出“CreateNewDesign”设计模板对话框,默认为“DEFAULT”,单击“OK”按钮即生成新的设计文件,如图1-13所示。
(3)设置图纸。单击菜单栏中的“System”→“SetSheetSize”选项,弹出“SheetSize”对话框,选择相应纸张,本例选“A4”,单击“OK”按钮即完成图纸的设置。表1-7菜单栏说明
表1-8工
具
栏
说
明
图1-13新建设计文件
(4)元器件操作。
①列出所需元器件表。本例中所需的元器件如表1-9所示。
②元器件选择。
a.单击菜单栏中的“Library”→“PickDevice/Symbol”选项,或单击工具栏中的“”图标,或单击工具箱中的“”图标,然后再单击挑选元器件“”图标,以上三种方法均可弹出“PickDevice”对话框。
b.在“Keywords”中输入所需元器件,如“AT89C51”,则在右侧窗口中出现相应的元器件,选中元器件并双击之,该元器件自动加到对象选择区中,如图1-14所示。
c.按照此种方法依次把所需元器件加入到对象选择区中。表1-9流水灯电路元器件清单
图1-14元器件选择
③元器件放置。在对象选择区中利用鼠标左键选中元器件,在原理图编辑区双击鼠标左键,完成元器件的放置。依次类推,放置本例所需的元器件,如图1-15所示。
④元器件移动。将鼠标移到需要移动的元器件上,单击鼠标右键选中该元器件,若元器件颜色变红,表明已选中,此时按下鼠标左键拖动,即可移动该元器件,移至所需位置后松开鼠标即可。
⑤元器件旋转。利用鼠标右键选中元器件,颜色变红并弹出对话框,选择相应的旋转图标即可。
⑥元器件删除。利用鼠标右键双击对象即可。
⑦元器件属性编辑。利用鼠标左键双击元器件,弹出元器件属性编辑对话框,进行元器件属性编辑操作,如图1-16所示。图1-15元器件放置图1-16元器件属性编辑
(5)电源端及接地端放置。单击“”图标之后,单击“POWER”按钮,放置电源端。同理,单击“GROUND”按钮放置接地端。
(6)布线。Proteus的布线非常智能,画线时移动鼠标,当出现“”符号时,则表明找到了元器件的连接点;单击鼠标左键,移动鼠标,找到另一个元器件连接点;单击鼠标左键,完成连线。若想放弃画线,可单击鼠标右键或按Esc键。
(7)电气检测。将布线完成后,单击工具栏中的“”图标,或单击菜单栏中的“Tools”→“ElectricalRuleCheck”选项,弹出电气检测窗口,进行电气检测。
检测无误后保存,完成电路原理图的设计。
3) Proteus仿真操作
利用鼠标左键双击原理图中的“AT89C51”芯片,弹出元器件编辑对话框,如图1-17所示。在“ProgramFile”项中,利用鼠标左键单击“”图标,选取“流水灯.HEX”文件。同时在“ClockFrequency”项中,设置时钟频率为12MHz,这样可以在原理图设计时略去单片机的时钟电路,复位电路也可略去。
利用鼠标左键单击仿真工具栏中的“”图标,进行全速仿真,即可实现八路抢答器的功能,如图1-18所示。利用鼠标左键单击仿真工具栏中的“”图标,停止仿真。图1-17目标代码文件加载图1-18流水灯电路仿真
3.软件设计
单片机应用系统除了有硬件电路外,还需要有软件程序才能工作。软件设计是在硬件设计的基础上确定程序结构、分配系统资源、编写应用程序。软件设计应综合考虑以下几个方面:
①合理设计软件总体结构,采用结构化设计风格,各程序按功能进行模块化、子程序化及规范化,便于调试、修改、移植及维护;
②合理分配系统资源,包括程序存储器、数据存储器、定时/计数器、中断源等;
③编写应用软件之前,应绘制出程序流程图,提高软件设计的总效率;
④注意程序的可读性,为后续开发奠定良好的基础;
⑤加强软件抗干扰设计,提高应用系统可靠性。
1)绘制程序流程图
在编写应用程序之前要画程序流程图。流程图是程序结构的图解表示方法。绘制流程图的过程就是程序的设计过程。流程图画好之后,用程序语句将其描述出来,即形成了应用程序。流程图的符号如图1-19所示。图1-19流程图符号
2)编写调试程序
应用程序的编写可以使用汇编语言或C语言,通过编译软件进行调试、仿真、编译生成 .HEX文件。目前编译软件主要有伟福仿真软件、Keil单片机编译器、MedWin仿真软件等。
KeilμVision3是德国Keil公司开发的基于Windows平台的单片机集成开发环境,它包含一个高效的编译器、一个项目管理器和一个MAKE工具。
(1)安装KeilμVision3软件。在setup目录下,双击setup.exe后,按照安装程序提示,输入相关内容,即可自动完成keilμVision3的安装。安装完成后,可进行汉化。
(2)创建项目。
①启动软件。双击桌面上的KeilμVision3图标,即可进入KeilμVision3启动界面,如图1-20所示。
②新建工程文件。
a.单击菜单栏中的“Project”→“NewProject”选项,如图1-21所示。
b.在弹出的“CreateNewProject”对话框中选择要保存项目文件的路径,如保存到D:\新建文件夹目录里,在“文件名”文本框中输入项目名“example”,不需要扩展名,如图1-22所示,然后单击“保存”按钮。图1-20KeilμVision3启动界面图1-21Project菜单图1-22CreateNewProject对话框
c.保存之后会弹出一个对话框,要求选择单片机的型号。读者可以根据使用的单片机型号来选择。KeilC51几乎支持所有的51核的单片机,这里以常用的AT89S51为例来说明,如图1-23所示。选择AT89S51之后,右边的Description栏中即显示单片机的基本说明,然后单击“确定”按钮,则建立了工程文件。
③新建源程序文件。建立一个汇编或C源程序文件。
a.单击菜单栏中的“File”→“New”选项,如图1-24所示。
b.在弹出的程序文本框中输入一个简单的程序,如图1-25所示。图1-23选择单片机的型号对话框图1-24新建源程序文件对话框图图1-25程序文本框
c.单击菜单栏中的“File”→“Save”选项,或者单击工具栏中的“”图标,保存文件。
在弹出的如图1-26所示的对话框中选择要保存的路径,在“文件名”文本框中输入文件名,如“单灯闪烁.asm”。注意:一定要输入扩展名。如果是C程序文件,则扩展名为.c;如果是汇编文件,则扩展名为.asm;如果是ini文件,则扩展名为 .ini。这里需要存储汇编语言源程序文件,所以输入.asm扩展名,单击“保存”按钮。图1-26“SaveAs”对话框
④加载源程序文件。
a.单击Target1前面的+号,展开里面的内容SourceGroup1,如图1-27所示。
b.用右键单击“SourceGroup1”,在弹出的快捷菜单中选择“AddFilestoGroup‘SourceGroup1’”菜单,如图1-28所示。
c.选择刚才的文件example.asm,文件类型选择AsmSourcefile(*.s*;*.src;*.a*)。如果是C文件,则选择CSourcefile(*.c);如果是目标文件,则选择Objectfile(*.obj);如果是库文件,则选择Libraryfile(*.lib)。最后单击“Add”按钮,如果要添加多个文件,可以不断添加。添加完毕后单击“Close”按钮,关闭该窗口,如图1-29所示。
d.这时,在SourceGroup1目录里有单灯闪烁 .asm文件,如图1-30所示。图1-27Target展开图图1-28选择AddFilestoGroup‘SourceGroup1’菜单图1-29AddFilestoGroup‘SourceGroup1’对话框图1-30单灯闪烁.asm文件
⑤工程设置。在编译、调试之前要对工程参数进行设置。
a.利用鼠标右键单击Target1,在弹出的快捷菜单中选择“OptionsforTarget‘Target1’”菜单,如图1-31所示。
b.利用鼠标左键单击“OptionsforTarget‘Target1’”菜单,弹出如图1-32所示的对话框,其中有8个选项卡,默认为Target选项卡。图1-31选择“OptionsforTarget‘Target1’”菜单图1-32Target选项卡
Xtal(MHz):设置单片机的工作频率,默认是24.0MHz。
UseOn-chipROM(0x0-0XFFF):表示使用片上的FlashROM。AT89S51有4KB的可重编程的FlashROM,该选项取决于单片机应用系统。如果单片机的接高电平,则选中这个选项,表示使用内部ROM;如果单片机的接低电平,则不选中该项,表示使用外部ROM。这里选中该选项。
MemoryModel:单击MemoryModel后面的下拉箭头,会有3个选项,如图1-33所示。
Small:变量存储在内部RAM里。
Compact:变量存储在外部RAM里,使用8位间接寻址。
Large:变量存储在外部RAM里,使用16位间接寻址。
需要注意的是,3种存储方式都支持内部256字节和外部64KB的RAM。因为变量存储在内部RAM里运算速度比存储在外部RAM要快得多,所以大部分的应用都是选择Small模式。
图1-33MemoryModel选项
CodeRomSize:单击CodeRomSize后面的下拉箭头,将有3个选项,如图1-34所示。
Small:program2Korless:地址代码空间不大于2KB。
Compact:2Kfunctions,64Kprogram:每个子函数的代码大小不超过2KB,整个项目可以有64KB的代码。
Large:64Kprogram:程序或子函数代码都可以大到64KB,使用codebank还可以更大。通常都选用该方式。图1-34CodeRomSize选项
Operating:单击Operating后面的下拉箭头,会有3个选项,如图1-35所示。
None:表示不使用操作系统,通常选择此项。
RTX-51:表示使用Tiny操作系统。
RTX-51:表示使用Full操作系统。图1-35Operating选项
c.设置Output选项卡。在输出选项卡中,主要是设置CreateHEXFi:项,用来生成HEX文件。如果编译之后没有生成HEX文件,就是因为这个选项没有被选中。默认是不选中的,如图1-36所示。
d.设置Debug选项卡。Debug选项卡用来设置两类仿真形式:Use:Simulator(纯软件仿真)和Use:KeilMonitor-51Driver(带有Monitor-51目标仿真器的仿真),如图1-37所示。
LoadApplicationatStart:选择这项之后,Keil才会自动装载程序代码。
Gotillmain:调试C语言程序时可以选择这一项,PC会自动运行到main程序处。
这里选择UseSimulator。
如果选择Use:KeilMonitor-51Driver,还要进行其他设置。图1-36设置Output卡图1-37设置Debug选项卡
⑥编译程序。单击菜单栏中的“Project”→“Rebuildalltargetfiles”选项,弹出如图1-38所示的菜单栏。
或者单击工具栏中的“”图标,如图1-39所示,开始编译程序。
如果编译成功,开发环境下面会显示编译成功的信息,如图1-40所示。图1-38选择“Rebuildalltargetfiles”选项图1-40编译成功的信息图1-39工具栏中的按钮
⑦调试程序。单击菜单栏中的“Debug”→“Start/StopDebugSession”选项或单击工具栏中的“”图标,则开始调试,如图1-41所示。
这时如果出现如图1-42所示的对话框,那么硬件系统应复位一次,关闭总电源开关2秒后重新打开电源。
然后,按图1-42所示的“TryAgain”按钮,进入调试阶段,如图1-43所示。
按图1-43中的“”按钮,即可运行程序。图1-41调试窗口图1-42连接失败对话框图1-43调试窗口进入调试状态之后,可以用工具栏中出现的调试及运行工具图标如图1-44所示进行程序调试。图1-44中,从左到右依次是复位、运行、暂停、跟踪、单步、运行到退出、运行到光标行、下一状态、运行/停止跟踪、观察跟踪、反汇编窗口、查看调用堆栈窗口、代码覆盖窗口、串行口窗口、存储器窗口、性能分析器窗口等命令。
利用鼠标左键单击菜单栏中的“Debug”→“Start/StopDebugSession”选项或单击工具栏中的“”图标即可退出调试状态。图1-44调试工具栏
4.程序写入芯片
程序写入又称为程序下载,即把调试编译无误后的程序写入到或下载到单片机中去,从而使单片机能够独立运行。程序下载的方法有两种:离线下载和在线下载。离线下载是指把单片机从系统板上拿下来,放到专用编程器上进行程序下载,下载好程序之后,再取回安装到系统板上;在线下载是指不用把单片机从系统板上拿下来,直接通过串行口把计算机内的程序代码下载到单片机上,此种方法较直接、方便。
5.系统软、硬件联调
系统软、硬件联调是指让系统的软件在其硬件上实际运行,并进行软、硬件联合调试,最终实现系统功能。系统软、硬件联调时应注意以下几点:
(1)硬件调试。电源电压要在4.75~5.25V之间,电源电压太高或太低会使单片机应用系统工作不正常。
(2)注意单片机脚的设置,当单片机从CPU内部开始运行程序时,= 1;当单片机从CPU外部开始运行程序时,= 0。项目二单片机并行I/O口的应用
任务1点亮发光二极管任务2发光二极管闪烁任务3流水灯的设计任务4多模式流水灯的设计
任务1点亮发光二极管
1.任务要求
用AT89C51单片机控制点亮一个发光二极管。
2.硬件电路的设计与制作
1)单片机输入/输出(I/O)口
AT89C51的输入/输出接口包括4个8位并行口(P0~P3)共32根口线。其具体结构及功能见项目二任务1知识链接部分。每个端口都包括:锁存器、输出驱动器、两个三态缓冲器以及控制电路。
P0口:既可作为通用I/O口使用,此时是一个准双向口,也可作为地址/数据总线接口使用,此时是一个真正双向口;P0口既可按字节寻址,又可按位寻址;P0口作通用I/O口输出时,是开漏输出,应外接上拉电阻。
P1口:只能作I/O口,没有地址/数据复用功能,而且作输入口使用时,要先向锁存器写“1”;P1口可按字节寻址,也可按位寻址;P1口是一准双向口,输出驱动接有上拉电阻,无需外接,不是开漏输出。
P2口:当P2口作为通用I/O时,是一准双向口;从P2口输入数据时,先向锁存器写“1”;P2口可按位寻址,也可按字节寻址;在访问外部存储器时,P2口是高8位地址输出口。
P3口:当P3口作为通用I/O接口时,第二功能输出线为高电平,使输出取决于锁存器的状态。在这种情况下,P3口仍是一个准双向口,它的工作方式、负载能力均与P1、P2口相同;当P3口作为第二功能使用时,其锁存器同相输出端必须为高电平,使P3口的状态取决于第二功能输出线的状态。
2)发光二极管的接口电路
发光二极管是一种电光转换半导体器件,使用时要注意其单向导电性。其实物如图2-1所示,符号如图2-2所示。发光二极管具有阳极和阴极两个引极,使用时阳极接电源正极,阴极接电源负极。图2-1发光二极管实物图图2-2发光二极管符号发光二极管的工作原理如下:当发光二极管中有电流流过时,发光二极管就会发光,在保证流经发光二极管的工作电流不超过其最大允许电流的情况下,流经发光二极管的工作电流越大,发光二极管越亮。随制作材料的不同,各发光二极管的最大允许电流也不同,而发光二极管的工作电流一般为2~25mA。在实际应用中,发光二极管导通还存在门槛电压,随制作材料的不同,各发光二极管的门槛电压也不同,一般为1.5~2.5V。
发光二极管的实际工作电路如图2-3所示。图中R为限流电阻,其阻值的计算公式如下:式中:VCC是电源电压,VD是发光二极管的门槛电压,ID是发光二极管的工作电流。
单片机控制的发光二极管接口电路主要有高电平有效控制和低电平有效控制两种形式,如图2-4所示。其中,图2-4(a)为发光二极管高电平有效控制接口电路,发光二极管的阳极接单片机的某个I/O口(控制端),阴极接地,控制端为高电平时发光二极管亮,否则发光二极管灭。图2-4(b)为发光二极管低电平有效控制接口电路,发光二极管的阴极接单片机的某个I/O口(控制端),阳极接电源,控制端为低电平时发光二极管亮,否则发光二极管灭。实际应用中,注意编程时要先使单片机某I/O口控制的发光二极管灭。图2-3发光二极管的实际工作电路图2-4单片机控制的发光二极管接口电路
3)点亮一个发光二极管的硬件电路
应用Proteus软件设计的点亮一个发光二极管的电路原理图如图2-5所示。用AT89C51单片机的P0.0口控制发光二极管,构成发光二极管低电平有效控制接口电路。图2-5单片机控制的发光二极管电路原理图
3.应用程序设计
1)程序流程图的设计
要使单片机按照要求正常工作,必须进行应用程序的设计。首先要设计程序流程图,如图2-6所示。其主要流程是根据图2-5所设计的硬件电路图,P0口设为输出口,控制发光二极管的亮和灭,发光二极管控制电路采用低电平有效控制,首先初始化P0口,让其输出高电平,使发光二极管处于灭的状态,之后,使P0.0输出低电平,让发光二极管亮,实现点亮一个发光二极管的任务要求。图2-6程序流程图
2)程序清单
ORG 0000H ;程序从0000H开始执行
AJMP MAIN ;无条件转移到主程序MAIN处
ORG 0030H ;主程序的起始地址0030H
MAIN: MOV P0,#0FFH;P0口初始化
LOOP: MOV P0,#0FEH;P0.0输出低电平使发光二极管亮
SJMP LOOP ;无条件转移到LOOP处,继续使光二极管亮
END ;主程序结束
4.系统调试
在单片机编译环境下进行程序的编写,经过编译生成目标代码,下载到单片机芯片中,检测程序和硬件电路的协调工作情况。
1)程序编写及编译
在KeiluVision3软件环境下,按照项目一其项目的创建过程,把上述单灯闪烁的汇编语言程序输入,输入完成后进行编译,如有错误,把错误修正,直到无错误为止。
2)系统软、硬件联调
把硬件电路连接好,应用ISP下载软件,把程序编译后得到的 .HEX文件下载到单片机芯片中,观察硬件电路的运行情况,从而检测系统设计的正确性,并进行改进直至成功实现任务要求。
5.知识链接
1)指令基本格式
指令是指挥计算机执行某种操作的命令。MCS-51单片机指令有汇编语言和机器语言两种表现形式。汇编语言表现形式是为了记忆和程序编写的方便,用英文助记符来表示每一条指令,如MOVA,R0,经汇编后变为机器语言的表现形式,即采用二进制代码来表示每一条指令,供计算机直接识别和执行,如上条指令汇编后的二进制代码为11101000。汇编语言的基本格式为:
【标号:】操作码助记符 【操作数1,操作数2,操作数3】【;注释】
其中,方括号括住的内容为可选项。各部分含义如下:
第一部分为标号:标号加在指令之前,表示该指令所在的地址。标号必须以字母开始,后跟1~8个字母或数字,以“:”结尾。标号不允许使用汇编语言中已经定义过的符号名,如指令助记符、寄存器名、伪指令等,且在一个程序中不允许重复定义相同的标号。不是每条指令都要有标号,标号通常用在转移指令、子程序开始指令等所需要的地方。第二部分为操作码:是指令的核心部分,不可缺省。表示该语句要执行的操作内容,是每条指令必有的部分。操作码用指令助记符表示。操作码后面至少留一个空格,使其与后面的操作数分隔。
第三部分为操作数:表示操作码的操作对象,根据指令不同,操作数的个数可以是0、1、2或3,各操作数之间用逗号“,”隔开。
第四部分为注释:注释放在指令之后,或单独占一行。以“;”开始,是为用户阅读程序方便而加的说明部分,不影响程序的执行。
2) MCS-51指令系统概况
指令系统是指所有指令的集合。MCS-51系列单片机具有丰富的指令系统,共111条指令,用42种操作码助记符来描述33种操作功能。其具体分类如下:
按功能分类:数据传送类指令29条,算术运算类指令24条,逻辑运算类指令24条,控制转移类指令17条,位操作类指令17条。
按指令字长分类:单字节指令49条,双字节指令46条,三字节指令16条。按执行时间分类:单机器周期指令64条,双机器周期指令45条,四机器周期指令2条,只有乘除指令。
为了便于指令的学习,对MCS-51系列单片机指令助记符中的一些常用符号说明如下:
Rn(n = 0~7):当前选中的寄存器区的8个工作寄存器R0~R7;
Ri(n = 0、1):当前选中的寄存器区中可作间接寻址的2个工作寄存器R0、R1;
direct:8位内部RAM单元的地址及SFR的地址;
#data:8位立即数,立即数前面必须加“#”;
#data16:16位立即数;
addrl6:16位目的地址,用于LCALL和LJMP指令中,范围是64KB程序存储器空间;
addr11:11位目的地址,用于ACALL和AJMP指令中,目的地址必须与下一条指令的第一字节在同一个2KB程序存储器地址空间之内;
rel:8位带符号偏移量,用于SJMP和所有条件转移指令中范围为-128~+127;
@:间接寄存器或基址寄存器的前缀,如@Ri;
bit:内部RAM或SFR中的直接寻址位;/:位操作数的前缀标志,在位操作指令中表示对该位操作数先求反再参与操作,但不影响该位操作数原值,如/bit;
(×):寄存器或存储单元×中的内容;
((×)):以寄存器或存储单元×中内容作为地址单元中的内容;
←:箭头左边的内容被箭头右边的内容所代替;
↔:数据交换;
$:当前指令的起始地址。
3)程序分析
1 ORG 0000H ;程序从0000H开始执行
2 AJMP MAIN ;无条件转移到主程序MAIN处
3 ORG 0030H ;主程序的起始地址0030H
4MAIN: MOV P0,#0FFH ;P0口初始化
5LOOP: MOV P0,#0FEH ;P0.0输出低电平使发光二极管亮
6 SJMP LOOP ;无条件转移到LOOP处,继续使光二极管亮
7 END 此点亮一个发光二极管的应用程序共有7条语句,其中第1、3、7行是伪指令语句,其余为指令语句。
伪指令不是真正的指令,为汇编程序提供相关的信息,汇编时不产生目标代码,不影响程序的执行。常用的伪指令如表2-1所示。表2-1常用的伪指令第1行“ORG0000H”表示程序指令在程序存储器中从0000H处开始存放,即第2行指令的首字节地址为0000H,所以单片机上电后就从0000H处开始执行第2行指令。第3行“ORG0030H”表示“MAIN”标号处指令的地址为0030H。ORG伪指令在使用时,在一段程序中可多次出现,但“16位地址”不能重复。第7行“END”伪指令在一段程序中只能出现一次。
第2、6行指令是两条无条件转移指令,其中“MAIN”和“LOOP”是转移目标处的标号。无条件转移指令是指当程序执行到该指令时,无条件转移到指令提供的地址执行。这类指令分为长转移指令、绝对转移指令、短转移指令和变址转移指令。
①长转移指令。
格式:LJMP addr16
功能:该指令直接将指令中的操作数,即16位地址装入PC中,使程序无条件转移到指定的地址处执行。这条指令是一条可以在64KB范围内转移的指令。该指令不影响标志位。该指令是3字节指令。
②绝对转移指令。
格式:AJMP addr11
功能:该指令执行时首先将本条指令的PC + 2,构成当前PC值,使其指向下一个存储单元,然后用指令中的11位地址替换当前PC的低11位地址,PC高5位不变,这样可在该指令后2KBROM地址空间的任何单元无条件转移。该指令是2字节指令。
③短转移指令。
格式:SJMPrel
功能:该指令执行时将本条指令的PC + 2 + rel(相当偏移量)。rel称为相当偏移量,是一个用补码表示的8位有符号数,范围为 −128~+127。rel为正数表示正向跳转,rel为负数表示负向跳转。该指令是2字节指令。
④变址转移指令。
格式:JMP @A+DPTR
功能:该指令执行时是把A中8位无符号数和DPTR中的16位数相加,得到转移的目标地址送给PC,但A和DPTR中的内容不变,也不影响标志位。该指令是单字节指令。例如:说明执行如下指令后PC的值。
1000H LJMP 1234H ;PC值变为1234H
2000H AJMP 2300H ;PC值变为2300H
0050H SJMP 45H ;PC值变为0097H
第4、5行都是数据传送类指令,是将指令中的立即数传送到P0中,从而控制P0.0口所连接的发光二极管的亮灭。数据传送类指令是指令系统中应用最多的一种指令,一般是将原操作数传送到目的操作数。数据传送类指令有片内数据传送类指令、片外数据传送类指令、查表指令、数据交换指令和堆栈操作指令,本项目只介绍片内数据传送类指令,如表2-2所示。表2-2片内数据传送类指令
注:片内数据传送类指令只有以累加器A为目的操作数的指令会影响PSW中的P位,其余传送类指令对标志位均无影响;在片内数据传送类指令中立即数只能作原操作数,不能作目的操作数,且因MCS-51汇编语言规定,数据必须以数字(0~9)开头,符号以字母开头,所以指令中书写的数据高位以字母开头时,必须在其前面冠以数字“0”,否则编译会出错;寄存器和间址寄存器之间不能直接进行数据传送。例:设(20H)=10H,(10H)=30H,(P1)=0AAH。执行如下程序:
MOV R0,#20H
MOV A,@R0
MOV R1,A
MOV B,@R1
MOV @R1,P1
MOV 40H,#0FAH
MOV 20H,40H
则程序执行后结果为
(A)=(R1)=10H,(B)=30H,(R0)=20H,(40H)=(20H)=0FAH任务2发光二极管闪烁
知识目标:掌握单片机I/O口作用及其特征,掌握调用指令、条件转移指令的用法,掌握循环程序的设计方法和延时子程序的编写方法。
能力目标:掌握单片机I/O口的应用,能熟练使用开发环境进行程序的编译和调试,并会编写发光二极管亮灭的控制程序。
1.任务要求
以任务1的硬件电路为基础,用AT89S51单片机控制一个发光二极管闪烁,即让发光二极管亮一会儿、再灭一会儿、再亮一会儿,再灭一会儿,依次循环下去。
2.软件程序的设计
1)程序流程图的设计
根据图2-5所设计的硬件电路,P0口设为输出口,控制发光二极管的亮和灭,发光二极管控制电路采用低电平有效控制,主程序流程图和延时子程序流程图分别如图2-7和图2-8所示。首先初始化P0口,让其输出高电平,之后,使发光二极管亮,然后调用延时子程序控制发光二极管亮的时间,再让P0.0口输出高电平,使发光二极管灭,再调用延时子程序控制发光二极管灭的时间,如此不断循环,实现单灯闪烁的任务要求。图2-7单灯闪烁程序流程图图2-8延时1s子程序流程图
2)程序清单
1 ORG 0000H ;程序从0000H开始执行
2 AJMP MAIN ;无条件转移到主程序MAIN处
3 ORG 0030H ;主程序的起始地址0030H
4
MAIN:MOV P0,#0FFH ;P0口初始化
5
LOOP:MOV P0,#0FEH ;P0.0口输出低电平使发光二极管亮
6 LCALL DELAY ;调用延时子程序
7 MOV P0,#0FFH ;P0.0口输出高电平使发光二极管灭
8 LCALL DELAY ;调用延时子程序
9
DELAY: MOV R1,#14H ;延时1s子程序
10
D0: MOV R2,#0C8H
11
D1: MOV R3,#7BH
12 NOP ;空操作,只起延时的作用
13 DJNZ R3,$ ;R3的内容减1不为0,则继续执行本条指令,为0,
;则顺序执行程序
14 DJNZ R2,D1 ;R2的内容减1不为0,则跳转到D1处,为0,
;则顺序执行程序
15 DJNZ R1,D0
16 RET ;延时子程序结束
17 END
3.系统调试
应用KeilμVision3软件环境编写和调试程序,编译无误后下载到单片机中,检测运行效果。
4.知识链接
通过单灯闪烁的程序分析学习掌握本项目的相关知识。依据程序清单所示,此单灯闪烁应用程序共有17条语句。其中,第6、8行语句是调用子程序指令,第16行是子程序返回指令。在单片机程序设计中,为了编写和调试程序的方便,引入了主程序和子程序的概念。主程序是可以调用子程序的程序,而子程序是指经常被使用的具有一定功能的独立程序段。在程序执行过程中,当主程序用到这一子程序时,应用调用指令对子程序进行调用,同时在子程序结尾处安排一条返回指令,使子程序执行完后能返回到主程序,所以调用指令和返回指令是成对出现的。调用与返回指令如下:
①长调用指令。
格式:LCALL addr16
功能:该指令在执行时先把PC+3获得下条指令的首地址,并把它压入堆栈,使SP+2,之后把指令中的16位地址的低8位送PCL中,高8位送PCH中,然后开始执行子程序。该指令是3字节指令,可以调用64KB范围内程序存储器中的任何一个子程序,该指令执行后不影响任何标志。
②绝对调用指令。
格式:ACALL addr11
功能:该指令在执行时先把PC+2获得下条指令的首地址,并把它压入堆栈,使SP+2,之后把PC当前值的高5位和指令中给出的11位地址组合成16位子程序的起始地址送入PC中,然后开始执行子程序。该指令是2字节指令,所调用的子程序的起始地址必须和该调用指令的下一条指令的首地址在同一个2KB区域中。
③子程序返回指令。
格式:RET功能:该指令是把经调用指令压入堆栈的PC值弹出,同时把堆栈指针SP-2。该指令必须和调用指令成对出现,用在子程序结尾处,执行后不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中信息技术课程实施中的问题与新课标的考量
- 谈深度学习视野下在化学教学中培养和发展学生的科学能力
- 农业生产农业资源共享与合作方案
- 项目进度延误紧急处理项目经理预案
- 农业科技行业智能灌溉系统实施方案
- 财务预算编制标准化流程指导手册
- 遵守网络安全和信息安全承诺书6篇
- 线上交易运营保证承诺书5篇
- 人力资源管理招聘与培训全流程手册
- 2026年项目进度延误原因确认函(3篇范文)
- 2025年细选教师副高水平能力测试题库附答案
- 大学生智能健康手环研发创业计划书
- 应急预案修编请示
- 湖南省炎德英才大联考2026届数学高一上期末经典模拟试题含解析
- 七律二首《送瘟神》课件
- 陪诊师医学知识培训课件
- 2025-2026 学年杭州市西湖区中考数学模拟试卷带答案解析
- 战略材料采购管理办法
- JJG 1206-2025热式燃气表检定规程(试行)
- 供电小区改造方案(3篇)
- 《高级财务会计》形考任务1-5参考答案
评论
0/150
提交评论