您好,欢迎访问三七文档
单片机的技术总结第一章单片机的内部结构一.单片机的时序1.时序的由来单片机执行指令的过程就是顺序地从ROM(程序存储器)中取出指令一条一条的顺序执行,然后进行一系列的微操作控制,来完成各种指定的动作。它在协调内部的各种动作时必须要有一定的顺序,换句话说就是这一系列微操作控制信号在时间上要有一个严格的先后次序,这种次序就是单片机的时序。2.时序的周期计算机每访问一次存储器的时间,我们把它称为一个机器周期。它是一个时间基准。就象我们日常生活中使用的秒一样。计算机中一个机器周期包括12个振荡周期。振荡周期就是振荡源的周期,也就是我们使用的晶振的时间周期。一个12M的晶振它的时间周期是T=1/f,也就是1/12微秒。那么使用12M晶振的单片机它的一个机器周期就应该等于12*1/12微秒,也就是1uS。在89C51单片机中有些指令只要一个机器周期,而有些指令则需要两个或三个机器周期,另外还有两条指令需要4个机器周期。如何衡量指令执行时间的长短我们就要用到一个新的概念:指令周期—即执行一条指令所需的机器周期.INTEL公司规定了每一条指令执行的机器周期。振荡周期:指振荡源的周期,若为内部产生方式时,为石英晶体的振荡周期。时钟周期:(称S周期)为振荡周期的两倍,时钟周期=振荡周期P1十振荡周期P2。机器周期:一个机器周期含6个时钟周期(S周期)。指令周期:完成一条指令占用的全部时间。805l的指令周期含1—4个机器周期,其中多数为单周期指令,还有2周期和4周期指令。若fosc=6MHz,则805l的:振荡周期=1/6us;时钟周期=1/3us;机器周期=2us;指令周期=2—8us。二.单片机的时钟电路单片机是在一定的时序控制下工作的,时钟是时序的基础。单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路就要在唯一的时钟信号控制下按时序进行工作。1内部时钟电路在MCS-51单片机的内部有一个高增益的反相放大器,其输入端为引脚XTAL1(19脚),输出端为XTAL2(18脚),我们只要在外部接上两个电容和一个晶振,就能构成一个稳定的自激振荡器,看上面的图,晶振的大小与单片机的振荡频率有关,我们到串行接口时再详细讲解。电容的大小影响着振荡器振荡的稳定性和起振的快速性,通常选择10-30P的瓷片电容或校正电容;另外在设计电路时晶振和电容应尽可能的靠近芯片,以减少PCB板的分布电容保证振荡器工作的稳定性,提高系统的抗干扰能力。2外部时钟电路除了内部时钟方式外,单片机还可以采用引入外部时钟的振荡方式,当我们的系统由多片单片机组成时,为了保证各单片机之间时钟信号的同步,就应当引入唯一的公用的外部脉冲信号作为各单片机的振荡脉冲,此时应将XTAL2悬空不用,外部脉冲信号由XTAL1引入。如下图所示。三.单片机并行口的结构分析先来看看输入结构1.输入结构I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线,上面图中的两个三角形表示的就是输入缓冲器。CPU将根据不同的指令,分别发出“读端口”或“读引脚”信号,以完成不同的操作,这是由硬件自动完成的,不需要我们操心。读引脚时,也就是把端口作为外部输入线时,首先要通过外部指令把端口锁存器置1,然后再实行读引脚操作,否则就可能读入出错。看上面的图,如果不对端口置1,端口锁存器原来的状态有可能为“0”(Q端为0,Q^为1)加到场效应管栅极的信号为“1”,该场效应管就导通,对地呈现低阻抗,此时即使引脚上输入的信号为“1”,也会因端口的低阻抗而使信号变低,使得外加的1信号读入后不一定是“1”。若先执行置“1”,操作则可以使场效应管截止,引脚信号直接加到三态缓冲器中,实现正确的读入。由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为“准双向”口。89C51的P0、P1、P2、P3口作为输入时都是“准双向”口。从图中可以看出除了P1口外P0、P2、P3口都还有其他的功能。2.端口的工作原理1)P0口从图中可以看到P0口的内部有一个2选1的选择器,它受内部信号的控制。如果在图中的位置则处在I/O口工作方式,此时相当于一个“准双向口”(输入时须先将口置“1”)。每根口线可以独立定义为输入或输出,但是须在口线上加上拉电阻。如果将开关往另一个方向,则就是另一个功能—作为地址/数据复用总线用。此时不能逐位定义为输入/输出,它有两种用法:当作数据总线用时,输入8位数据;而当作地址总线用时,则输出低8位地址。当P0口作为地址/数据复用总线用之后就再也不能作I/O口使用了。地址/数据复用其实是当单片机的并行口不够用时,需要扩展输入输出口时的一种用法。2)P1口同P0不同,P1口只能作为I/O口使用,但它的内部有一个上拉电阻,所以连接外围负载时不需要外接上拉电阻。这一点P1、P2、P3都一样务必请记住。3)P2口P2口作为I/O口线用时与P0口一样,当内部开关向另一个方向时,即作地址输出时,可以输出程序存储器或外部数据存储器的高8位地址,并与P0口输出的低地址一起构成16位的地址线(注意和数据总线的区别,数据总线是8位的,很多书上都会提到51单片机是8位数据总线16位地址总线,但都不会解释有什么不同)。16位的地址可以寻址64K的程序存储器或外部数据存储器。这里要注意的是当P2口作为地址总线时这高8位地址线是8位一起输出的,不能象I/O口线那样逐位定义,这和P0口是一样的4)P3口P3口作为I/O口线用时同其他的端口相同,也是“准双向口”。不同的是P3口的每一位都有另一种功能,也叫第二功能。各位的功能如下,它们的具体作用我们用到时再详细解释。实单片机的第二功能是不需要人工干预的,也就是说只要CPU执行到相应的指令就自动转成了第二功能。四.单片机I/O口的连接方法当单片机的I/O口作输出时可以直接与外部设备连接,不过由于在实际的应用中由于其驱动电流是有限的(DATASHEET上说是20mA),所以我们常常需要通过接口电路来扩展它的驱动能力。在单片机的后向通道控制系统中常用的功率控制器件有:机械继电器、晶闸管、固态继电器等等。下面我们将以机械继电器和固态继电器的应用为例介绍其具体的使用方法。1.单片机与机械继电器的接口单片机的一个I/O口只能灌入20mA的电流,所以往往不足以驱动一些功率开关。比如稍大一点的机械继电器等,此时就应该采用必要的扩展电路。我们通常采用下面的接法。如图,为了防止前向通道信号的干扰,常采用一些光电隔离器件,比如光电耦合器4N25,PC814等,当单片机的P1.0脚输出为低电平时,光藕受电导通,Q1饱和开通,继电器吸合负载电路接通。另外,为了防止电压间的互相干扰,继电器的工作电压VDD与单片机的工作电压VCC不要使用同一个电源,接地端也不要连在一起即所谓的模拟地与数字地分开。驱动管的电流要大于继电器的工作电流。2.单片机与固态继电器的接口普通继电器由于开关速度慢、易跳火、易机械磨损,通常用于要求不高的场合。在某些特殊应用场合比如防火防爆等系统中,则应采用固态继电器。固态继电器是一种无触点的电子继电器,它的输入端只要很小的控制电流,可以与单片机的I/O口直接连接;输出则采用双向晶闸管控制,其输入输出间均通过内部光电耦合器隔离,可以防止信号间的干扰,是单片机接口的理想器件。随着其技术的成熟,应用的广泛,价格也已经非常的便宜,1A/250V的目前在10元左右。它与单片机的连接方法如图所示,当-端所接的P1.0为低电平时,SSR导通负载工作。除了以上两种连接方法外,单片机与TTL,CMOS管等都可以连接。五.存储器的地址1内部R0M的寻址范围89C51的内部有4K的FLASHROM空间,其寻址范围为000H-FFFH(15*162+15*161+15*160=0-4095),这4K的ROM空间就是用来存放我们为单片机编写的程序用的。单片机执行指令时就是一条一条顺序地从ROM中寻找指令进行执行。2内部RAM的寻址范围89C51内部共有128个字节的RAM空间,其寻址范围为00H-7FH。它被分成三个区域:第一个区域00H-1FH,安排了4组工作寄存器,每组用8个字节共32个字节,分别为R0-R7。当然在同一时刻,只能用其中的一组工作寄存器,怎么来控制它,就要用到程序状态字PWS中的RS0、RS1两位。第二个区域20H-2FH,共16个字节。除了可以作为一般的RAM单元读写外还可以对每个字节的每一位(即每一个抽屉中的每一个小盒子)进行操作,并且对这些位都规定了固定的位地址:从20H单元的第0位开始到2FH单元的第7位结束共128位。第三个区域就是一般的RAM单元地址,为30H-7FH共80个字节。实际上在89C51单片机的内部还有一个部分,从80H-FFH是专门用于特殊功能寄存器SFR的。89C51共用21个特殊功能寄存器。它们每个也都有8位的,这些特殊功能寄存器的使用和前面的128个字节RAM不同,所以很多书上的解释都是89C51有128个字节的内部RAM,实际上它们也属于内部RAM一部分。为了加深印象大家可以打开DUG8051软件看一下它们的内部组成。六.单片机的特殊功能寄存器在单片机中除了前面介绍的RAM、ROM、P0-P3和CPU外,还有许多特殊功能寄存器,英文简写SFR。下表例出的就是MCS-51单片机中几个常用的特殊功能寄存器。1.累加器ACC通常用A表示。我们知道单片机在做运算时它的中间结果需要放在某个地方,这个地方就是累加器。它的名字很特殊,功能也很特殊,几乎所有的运算类指令都离不开它。2.寄存器BB寄存器在做乘法时用来存放一个乘数,在做除法时用来存放一个除数,不做乘除法时随你怎么用。3.程序状态字PSW它是一个很重要的东西,里面放了CPU工作时的很多状态。知道它就可以了解CPU当前的工作状态。它有点象平时看书用的目录,我们浏览它就可以了解一本书的内容。它是一个81)CY进位标志位MCS-51是一种8位的单片机,它的运算结果只能表示到28(即0-255),但我们有时候的运算结果要超过255,这时就要用CY位。例如79H+87H(01111001+01010111)=100000000这里的“1”就进到了CY中去了。2)AC半进位标志位当D3位向D4位进位/借位时,AC=1,通常用于十进制调整运算中。3)F0用户自定义标志位由编程人员自行决定什么时候用,什么时候不用。4)位就在这里共有四种组合状态。看上面的表格:每个工作寄存器组有8个字节,分别记为R0-R7,当然在某一时刻,CPU只使用其中的一组。假设PSW为“11H”(即00010001)那么RS1=1,RS0=0,则用到了第2组寄存器组(地址10H-17H),RO-R7即为10H-17H,用DBG8051软件输入数值,看看内部RAM中地址为10H-17H中的值是不是为输入值。5)0V溢出标志位什么时候溢出我们讲到定时器时再研究。6)P:奇偶检验位每次运算结束后若A中二进制数“1”的个数为奇数,则P=1,否则P=0。例:某运算结果是58H(01011000),显然“1”的个数为奇数,所以P=1。4.DPTRDPHDPL数据指针数据指针是一个16位的寄存器,我们可以用它来访问外部RAM,也可以访问外部ROM中的表格。5.SP堆栈指针先进去的后出来,而后进去的先出来这种符合“先进后出,后进先出”存放规则的现象我们就把它叫做堆栈。(其实栈在中文中的意思就是码头)在单片机中,我们可以在内部RAM中构造出(注意:是可以构造)这样一个区域,这个区域存放数据的规则就符合堆栈中“先进后出,后进先出”的原则。存储器地址可以读出它里面的内容,但如果我们要读出的是一批数据,每一个数据都要给出一个地址就会很麻烦,为了简化操作就可以利用堆栈的存放方法来读取数据。单片机是一种通用的产品,每个人的实际需要各不相同。有人需要多一些堆栈而有人则不需要那么多堆栈,所以INTEL公司就干脆不分了,
本文标题:单片机的技术总结
链接地址:https://www.777doc.com/doc-7849775 .html