1、第四章基于单片机控制的流水灯4.1 流水灯在这一章开始之前,我们先来引入本章要实现的一个任务,我们在节日的时候在街上都看过漂亮的小灯,按照一定的规律闪烁,在本章中我们也来实现这样的一种功能,我们的任务是利用单片机和8个普通的红色发光二极管来实现流水灯,让发光二极管按照一定的规律发光。比如让8个二极管逐个点亮,或者逐个熄灭。实现的手段不是普通的数字电路的方式,而是利用单片机。因为是第一次接触单片机这个概念,所以接下来我们将来学习有关单片机的基础知识。4.1.1 仿真4.1.2 实验4.2 AT89S5X单片机系统结构4.2.1 单片机概述 我们先来看一下单片机的基本概念,所谓单片机是单片微型计算
2、机(Single-Chip Microcomputer)的简称。就是将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)和其他多种功能器件集成在一块芯片上的微型计算机。4.2.2 单片机总体结构单片机本身已经是一个小型的集成系统,里面包含了很多资源,随着技术的发展,单片机的功能越来越强,种类也越来越多。现在知名的单片机厂家有Intel ,ATMEL ,Philips等,因此单片机的种类非常多,但是作为初学者的入门单片机,现在最常见的还是51系列。本书以ATMEL公司生产的AT89S51单片机作为典型芯片,选择这个类型的单片机,是因为A
3、T89S51系列完全兼容8051(包括非常常见的AT89C51,但是AT89C51已经停产)指令系统及指标,便于向下兼容;而且自带的ISP(在线编程)功能,能进行方便的在线编程,易于调试和学习,特别适合于初学者。图4-1到图4-3是芯片的几种基本封装形式。图4-4是AT89S51的系统框图。图4-1 DIP封装 图4-2 PLCC封装芯片的主要特点如下:()与MCS-51产品指令系统完全兼容。()方便的在线编程系统,4k字节Flash 闪存 ,1000次擦写周期。()最高工作频率33MHz(AT89C51的最高频率为24MHz)。()32个可编程I/O口线,2个16位定时/计数器,6个中断源。
4、()低功耗空闲和掉电模式。()中断可从空闲模式唤醒系统。()看门狗及双数据指针。()三级程序加密锁。图4-3 TQFP封装图4-4 AT89S51方框图4.2.3 单片机的引脚说明AT89S51的引脚大致分为电源、时钟、I/O口、地址总线和控制总线等几个部分,它们的功能简述如下(以DIP40的封装为例):1.电源VCC(40脚):电源脚,接+5V电源GND(20脚):接地2.时钟XTAL1 是AT89S51片内振荡器的反相放大器输入端,XTAL2则是输出端,一般使用时两脚之间接一个晶振,最高频率可以为33MHz,XTAL1和XTAL2一般都接一个电容到地,大小一般为30pf左右,连接方法如下图
5、所示当使用外部时钟时,XTAL1接外部时钟,XTAL2保持悬空。3.I/O口AT89S51单片机的I/O口共有四组,分别是P0、P1、P2和P3四组,具体的结构参考4.2.5节,这里先简要的做一些介绍。P0口是一组8位的并行双向I/O口,作为输出时每个管脚可驱动8个TTL负载。同时P0口也可以作为低8位地址/数据总线,当作输出时,需要外接上拉电阻;用作输入时,需先向口写“1”,此时P0口就成为高阻抗输入口。P1口是内部自带上拉电阻的8位准双向I/O口,能驱动4个TTL负载。在使用ISP编程时P1口的第二功能如下表所示:端口引脚第二功能P1.5MOSI (用于ISP)P1.6MOSO (用于IS
6、P)P1.7SCK (用于ISP)P2口是内部自带上拉电阻的8位准双向I/O口,能驱动4个TTL负载,当访问外部存储器时,定义为高8位地址总线。P3口是内部自带上拉电阻的8位准双向I/O口,能驱动4个TTL负载。P3口除了基本的I/O口功能外,还有非常重要的第二功能,如下表所示:端口引脚第二功能P3.0RXD(串行接受端口)P3.1TXD(串行发送接口)P3.2(外部中断0请求端)P3.3(外部中断1请求端)P3.4定时计数器0外部计数输入端P3.5定时计数器1外部计数输入端P3.6(外部数据写选通)P3.7(外部数据读选通)4.控制引脚RST(9脚):复位信号输入端。在该引脚上持续2个机器周
7、期以上的时间就可以进行系统复位。系统复位电路有很多种样式。下面是两种比较简单的复位电路。ALE/ (ADDRESS LATCH ENABLE/PROGRAMMING):这个引脚是用于锁存外部存储器(包括程序存储器和数据存储器)的低8位地址,即使不访问外部存储器,ALE仍然以时钟频率的1/6输出固定的脉冲信号,因此,它可以对外输出脉冲或者用于定时目的。当对片内的FLASH ROM编程时,此引脚第二功能为,作为编程脉冲输入端。(PROGRAM STORE ENABLE ) 程序存储允许输出信号端。是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期会有2次
8、有效,对于外部数据存储器则不会出现这个有效信号。(ENABLE ADDRESS /VOLTAGE PULSE OF PROGRAMMING):外部程序存储器地址允许输入端/编程电压输入端。要使单片机访问片外的程序存储器(地址为0000H-FFFFH),端必须保持低电平;如果端保持高电平,则单片机执行片内程序存储器中的指令。4.2.4 单片机存储器结构 AT89S51单片机的存储器在物理结构上分为程序存储器和数据存储器,每一个又分为2种,片内和片外,这种程序存储器和数据存储器分开的结构形式,称为哈佛结构。AT89S51单片机的程序存储器和数据存储器的寻址空间都是64kB,在地址上都是0000H-
9、FFFFH,因此在判断到底使用哪个存储器时,一般利用指令来实现判断。例如,一般利用MOVC来访问程序存储器;利用MOVX来访问数据存储器。而在C51编程中,则一般通过变量的类别表示存储器的类型。例如,可以用code关键字来表示程序存储区数据;利用data,idata,bdata 等来表示内部数据存储区数据,利用xdata,pdata等来表示外部数据存储区数据。(1)程序存储器地址空间单片机的程序存储器(ROM)分为片内程序存储器和片外程序存储器两个部分,片内程序存储器空间是从0000H-0FFFH,也即4KB;而片外程序存储器地址为1000H-FFFFH,当要使用片外程序存储器空间时,必须确保
10、为低电平,如果为高电平,则程序指针首先指向片内的0000H-0FFFH,当地址超过0FFFH时,转向片外程序存储空间。具体分配可以见下图:60KB外部ROM FFFFH 1000H4KB外部EA = 0 4KB内部EA= 1 0FFFH 0FFFH 0000H 0000H AT89S51程序存储器 程序存储空间中的低地址空间一般是预留给系统使用的,详细的分配见下表:存储单元应用中断入口0000H-0002H引导程序入口地址无0003H-000AH外部中断00003H000BH-0012H定时中断0000BH0013H-001AH外部中断10013H001BH-0022H定时中断1001BH00
11、23H-002AH串口中断0023H(2) 数据存储器地址空间单片机的数据存储空间(RAM)也分为片内数据存储空间和片外数据存储空间,AT89S51的片外数据存储空间为64KB,地址从0000H-FFFFH;片内数据存储空间为256个字节,其中低128个字节属于真正的RAM空间,可以直接或者间接寻址,地址为00H-07FH;而高128个字节属于特殊功能寄存器(SFR)区,地址为80H-FFH。先简要介绍一下低128个字节(00H7FH)的分布情况:其中00H-1FH共32个字节为4组工作寄存器区,每组有8个寄存器(R0R7),可以通过中的RS1,RS0来选择当前的工作寄存器组。20H-2FH的
12、16个字节是可以位寻址的空间,许多对位操作的指令可以直接对这里的空间进行操作。30H-7FH共有80个字节单元,为字节寻址的内部RAM区,可供用户作为数据存储区。或者设置堆栈。对于高128个字节空间(80H-FFH),AT89S51主要作为特殊功能寄存器使用(对于S52单片机此块区域既是RAM区又是特殊功能寄存器区,两者是重叠的空间),下表描述了AT89S51的特殊功能寄存器的地址分布。对应的值是寄存器复位后的初始值,其中X表示不定值,由程序设置。表 AT89S51特殊寄存器映像及复位值0F8H0FFH0F0HB000000000F7H0E8H0EFH0E0HACC000000000E7H0D
13、8H0DFH0D0HPSW000000000D7H0C8H0CFH0C0H0C7H0B8HIPXX0000000BFH0B0HP3111111110B7H0A8HIE0X0000000AFH0A0HP211111111AUXR1XXXXXXX0WDTRSTXXXXXXXX0A7H98HSCON00000000SBUFXXXXXXXX9FH90HP11111111197H88HTCON00000000TMOD00000000TL000000000TL100000000TH000000000TH100000000AUXR000000008FH80HP011111111SP00000111DP0L0
14、0000000DP0H00000000DP1L00000000DP1H00000000PCON0XXX000087H对于89S52而言,增加了与T2相关的一些寄存器。AT89S51与AT89C51基本上是一致的,但是AT89S51增加了一个数据指针,一个看门狗寄存器,两个辅助寄存器等。下面简要做一下介绍。相比与89C51的单DPTR数据寄存器,89S51提供了两路数据寄存器,分别位于82H83H和84H85H。要选择使用哪一个寄存器,则需要在AUXR1(辅助寄存器1)中定义。具体见下表:含义-DPS位76543210AUXR1的初始值(复位值)为xxxxxxx0B,表中-的含义表示预留扩展用,
15、说明只有最低位DPS有意义,具体含义为:DPS: 0 -表示选择DPTR0,也即选择寄存器DP0L,DP0H。DPS: 1 -表示选择DPTR1,也即选择寄存器DP1L,DP1H。除了AUXR1以外,AT89S51中还有一个AUXR寄存器,它是用来对ALE,复位和看门狗的功能进行设置的一个特殊寄存器,具体见下表:含义-WDIDLEDISRTO-DISALE位76543210AUXR的初始值(复位值)为xxx00xx0B,表中-的含义表示预留扩展用,其他几位的具体含义为:DISALE: 0 -表示ALE以1/6晶振频率输出信号。DISALE: 1 -表示ALE只有在执行MOVX和MOVC指令时激
16、活。DISRTO: 0 -表示看门狗定时结束时,reset脚输出高电平。DISRTO: 1 -reset脚只作输入。WDIIDLE: 0 -空闲模式下,WDT(看门狗)继续计数。WDIIDLE: 1 -空闲模式下,WDT(看门狗)停止计数。这里解释下空闲模式和掉电模式: 空闲模式(Idle Mode):cpu处于睡眠状态,所有片上外部设备保持激活状态,可以通过软件产生,可以被任一个中断或者硬件复位终止 掉电模式(Power-down Mode):晶振停止工作,片上RAM和SFR(特殊功能寄存器)保持原值,掉电模式可以通过外部中断和硬件复位退出。(3) 专用功能寄存器专用功能寄存器是特殊功能寄存
17、器中的几个特例,由于它们在单片机的工作模式控制上有重要的作用,常常单独拿出来说明,主要包括程序状态字,电源控制寄存器以及一些与定时,中断和串口有关的寄存器,下面简单介绍几个最基本的寄存器,更加详细的内容参看后续的章节。1.程序状态字(PSW)程序状态字是一个8位的寄存器,其结构及各位状态标志定义如下:CYACF0RS1RS0OV-P- 可由用户定义CY进位标志位AC辅助进位标志位F0标志位,供用户使用RS1,RS0组合起来选择寄存器组,详细见下表。OV溢出标志P 奇偶标志,表示累加器中值为1的位数的奇偶数工作寄存器组选择表RS1RS0选择寄存器组0000111021132.电源控制寄存器(PC
18、ON)PCON寄存器的格式和功能如下:SMOD-POFGF1GF0PDIDL SMOD波特率倍增位 GF1、GF0用户通用标记 PD掉电方式控制位,PD1时进入掉电模式 IDL空闲方式控制位,IDL=1时进入空闲方式 POF是掉电标志位,上电期间POF置一,POF可以用软件控制使用与否,但不受复位影响。3.中断寄存器(IE) 中断寄存器IE的格式和基本功能见下表:IEEA-ESET1EX1ET0EX0符号功能EA中断总允许控制位,EA=0,禁止所有中断-预留ES串口中断允许控制位ET1定时中断1允许控制位EX1外部中断1允许控制位ET0定时中断0允许控制位EX0外部中断0允许控制位 IE是用来
19、控制中断允许的寄存器,而IP则是用来设定中断的优先级的寄存器,中断的优先级有两级,分别是高优先级和低优先级,低优先级中断处理程序可以被高优先级中断源中断,但不能被另一个低优先级中断源中断,而高优先级中断处理程序是不能被任何中断源中断的,而设定中断的高低优先级就是通过IP寄存器来实现的。 IP 的格式和基本功能如下:-PSPT1PX1PT0PX0- 保留位。PS 定义串行口中断优先级。PT1 定时器1中断优先级。PX1 定义外部中断1的中断优先级。PT0 定义定时器0中断优先级。PX0 定义外部中断0的中断优先级。(4) 几种单片机存储器的差别到此为止,有关存储器的基本内容告一段落,下面通过一张
20、表将常见的几种芯片的存储器进行一个简单的比较,如下表所示:芯片ROMRAMSFR其他AT89S514K可在线编程FLASH存储器128字节看门狗双数据指针2个定时计数器AT89C514K可重复擦写FLASH存储器128字节无看门狗单数据指针2个定时计数器AT89S528K可在线编程FLASH存储器256字节看门狗双数据指针3个定时计数器AT89C528K可在线编程FLASH存储器256字节无看门狗单数据指针3个定时计数器4.2.5 单片机I/O口 单片机的I/O口是单片机与外界交流的通道,相当于一个系统的交通要道,从单片机内部向外部传送数据或者由外部向单片机传送数据都需要通过I/O口来实现,A
21、T89S51单片机具有4组8位的I/O口,在前面的引脚说明中有简单的介绍,下面来详细介绍一下他们的结构和工作原理。(1) P0口 P0口共有8位,其中每一位的结构如下图所示:由上图可见,P0端口由锁存器、输入缓冲器、切换开关、一个非门、一个与门及场效应管驱动电路构成。再看图的右边,标号为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位,即在P0口有8个与上图相同的电路组成。下面介绍一下各个部分的基本功能: 输入缓冲器:在P0口中,有两个三态的缓冲器,在学数字电路时,我们已知道,三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状
22、态),从图中可以看出,上面一个是读锁存器的缓冲器,也就是说,要读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为读锁存器端)有效。下面一个是读引脚的缓冲器,要读取P0.X引脚上的数据,也要使标号为读引脚的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。 D锁存器:构成一个锁存器,通常要用一个时序电路,时序的单元电路在学数字电路时我们已知道,一个触发器可以保存一位的二进制数(即具有保持功能),在51单片机的32根I/O口线中都是用一个D触发器来构成锁存器的。上图中的D锁存器,D端是数据输入端,CP是控制端(也就是时序控制信号输入端),
23、Q是输出端,是反向输出端。对于D触发器来讲,当D输入端有一个输入信号,如果这时控制端CP没有信号(也就是时序脉冲没有到来),这时输入端D的数据是无法传输到输出端Q及的。如果时序控制端CP的时序脉冲一旦到了,这时D端输入的数据就会传输到Q及端。数据传送过来后,当CP时序控制端的时序信号消失了,这时,输出端还会保持着上次输入端D的数据(即把上次的数据锁存起来了)。如果下一个时序控制脉冲信号来了,这时D端的数据才再次传送到Q端,从而改变Q端的状态。 多路开关:在51单片机中,当内部的存储器够用(也就是不需要外扩展存储器时,这里讲的存储器包括数据存储器及程序存储器)时,P0口可以作为通用的输入输出端口
24、(即I/O)使用,当单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,P0口就作为地址/数据总线使用。那么这个多路选择开关就是用于选择是做为普通I/O口使用还是作为数据/地址总线使用的选择开关了。大家看上图,当多路开关与下面接通时,P0口是作为普通的I/O口使用的,当多路开关是与上面接通时,P0口是作为地址/数据总线使用的。 输出驱动部份:从上图中可以看出,P0口的输出是由两个MOS管组成的推拉式结构,也就是说,这两个MOS管一次只能导通一个,当V1导通时,V2就截止,当V2导通时,V1截止。 以上是各个部分的基本介绍,下面我们来具体研究一下P0口做为I/O口及地址/数据总线
25、使用时的具体工作过程。1.首先来看一下P0口作为I/O端口使用时的基本情况。此时多路开关的控制信号为0(低电平),这时与门输出为0(低电平),那V1管就截止,在多路控制开关的控制信号是0(低电平)时,多路开关是与锁存器的端相接的。 当P0口作为I/O口时,还分为输入和输出两种状态,当其由数据总线向引脚输出时,此时属于输出状态,当写锁存器信号CP有效,此时数据的流向如下:数据总线锁存器的输入端D锁存器的端多路开关V2管的栅极V2的漏极到输出端P0.X。前面我们已讲了,当多路开关的控制信号为低电平0时,与门输出为低电平,V1管是截止的,所以作为输出口时,P0是漏极开路输出,类似于OC门,当驱动上接
26、电流负载时,需要外接上拉电阻。下图就是由内部数据总线向P0口输出数据的流程图,用箭头线表示: 当P0口处于输入状态时,还分为两种状态,分别是读引脚和读寄存器状态, 先来看下读引脚状态,如下图: 此时,下面的缓冲器的读引脚端有效,数据直接通过引脚输入到内部总线,数据流向见箭头方向。 而读锁存器则是直接从三态缓冲器读取锁存器输出端Q的状态,请看下图:在输入状态下,从锁存器和从引脚上读来的信号一般是一致的,但也有例外。例如,当从内部总线输出低电平后,锁存器Q0,1,场效应管V2开通,端口线呈低电平状态。此时无论端口线上外接的信号是低电乎还是高电平,从引脚读入单片机的信号都是低电平,因而不能正确地读入
27、端口引脚上的信号。又如,当从内部总线输出高电平后,锁存器Q1,0,场效应管V2截止。如外接引脚信号为低电平,从引脚上读入的信号就与从锁存器读入的信号不同。为此,单片机在对端口P0一P3的输入操作上,有如下约定:凡属于读-修改-写方式的指令,从锁存器读入信号,其它指令则从端口引脚线上读入信号。读-修改-写指令的特点是,从端口输入(读)信号,在单片机内加以运算(修改)后,再输出(写)到该端口上。下面是几条读-修改-写指令的例子。INC P1DEC P3CPLP2这样安排的原因在于读-修改-写指令需要得到端口原输出的状态,修改后再输出,读锁存器而不是读引脚,可以避免因外部电路的原因而使原端口的状态被
28、读错。2、作为地址/数据复用口使用时的工作原理 这时多路开关控制信号为1,与门解锁,与门输出信号电平由“地址/数据”线信号决定;多路开关与反相器的输出端相连,地址信号经“地址/数据”线反相器V2场效应管栅极V2漏极输出。 当控制信号为“1”,地址/数据信号为“0”时,与门输出低电平,V1管截止;反相器输出高电平,V2管导通,输出引脚的地址信号为低电平。和数据/地址信号相同,见下图:而当控制信号为“1”、地址/数据信号为“1”时,“与门”输出为高电平,V1管导通;反相器输出低电平,V2管截止,输出引脚的地址信号为高电平。和地址/数据信号相同,见下图: 可见,在输出“地址/数据”信息时,V1、V2管是交替导通的,负载能力很强,可以直接与外设存储器相连,无须增加总线驱动器。 (2) P1口 P1口的结构最简单,用途也
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1