单片机原理及应用教学课件.ppt
第3章 MCS-51单片机的内部资源及应用,主要内容:MCS-51单片机内部各器件的具体结构、组成原理、工作方式的设置及典型应用,为读者后续学习单片机应用系统设计、充分利用单片机内部资源解决工程实际问题奠定基础。重点 在于各器件工作方式的设置及灵活应用,难点在于中断系统和定时器/计数器的应用。,3.1.1 MCS-51内部并行I/O口 8051有4个8位并行I/O口,分别命名为P0,P1,P2和P3口。1P0口 P0口为双向三态输入/输出口,P0口既可作为地址/数据总线口,又可作为通用I/O口,可驱动8个TTL输入。在访问,3.1 MCS-51单片机的并行I/O口,外部存储器时,P0口作地址/数据总线复用口,是一个真正的双向口,并分时送出地址的低8位和送出(或接收)相应存储单元的数据。作通用I/O口时,P0口只是一个准双向口,需要在外部引脚处外接上拉电阻。P0口的位结构如右图所示。,2P2口,P2口常用做外部存储器的高8位地址口。当不用做地址口时,P2口也可作为通用I/O口,这时它也是一个准双向I/O口。不必外接上拉电阻就可以驱动任何MOS驱动电路,且只能驱动4个TTL输入。P2口的位结构如右图所示。,3P1口 P1口常用做通用I/O口,它也是一个标准的准双向I/O口,不必外接上拉电阻就可以驱动任何MOS驱动电路,且只能驱动4个TTL输入。P1口的位结构如右图所示。,4P3口 P3口是一个双功能口,第一功能与P1口一样可用做通用I/O口,也是一个准双向I/O口,能驱动4个TTL输入。另外还具有第二功能。P3口工作在第二功能时各管脚定义如下表所示。P3口的位结构图如右图所示。,3.1.2 MCS-51内部并行I/O口的应用,MCS-51I/O端口的操作方式:(1)输出数据方式:CPU通过一条数据传送指令就可以把输出数据写入P0P3的端口锁存器,然后通过输出驱动器送到端口引脚线。例如,下面的指令均可在P0口输出数据。MOV P0,A ANL P0,#data ORL P0,A(2)读端口数据方式:CPU读入的这个数据并非端口引脚线上的数据。读端口数据可以直接读端口。例如,下面的指令均可以从P1口输入数据。MOV A,P1 MOV 20H,P1 MOV R0,P1 MOV R0,P1,(3)读端口引脚方式:读端口引脚方式可以从端口引脚上读入信息。在这种方式下,CPU首先必须使欲读端口引脚所对应的锁存器置1,然后才能读端口引脚。因此,用户在读引脚时必须先置位锁存器后读,连续使用两条指令。例如,下面的程序可以读P1引脚上的低4位信号。MOV P1,#0FH;置位P1引脚的低4位锁存器 MOV A,P1;读P1引脚上的低4位信号送累 加器A,在I/O口直接用做输入/输出时,CPU既可以把它们看做数据口,也可以看做状态口,这是由用户决定的。例题1要求将两个BCD拨码开关的数字和,在LED数码管上显示出来。(用CD4511驱动LED)解:CD4511是BCD锁存段码译码共阴LED驱动集成电路,其引脚如右图所示,各引脚功能如下:VCC:接正电源;Vss:接地;A,B,C,D:BCD码输入脚(A为最低位,D为最高位);QaQg:段码输出脚,高电平有效,最大可输出25mA电流;BI:熄灭,接低电平则QaQg全部输出低电平;LT:点亮测试,接低电平则QaQg全部输出高电平;LE:锁存允许,接高电平锁存,则输出不会随BCD码输入改变。,1I/O口直接用于输入/输出,硬件电路设计:BCD拨码开关为4位,两个BCD拨码开关分别接至P3口的高四位和低四位(注意:应连接上拉电阻),由P1口的高四位和低四位通过两片CD4511分别扩展两位LED。硬件电路如下图所示。,软件设计思想:读P3口引脚,得到输入数据,将数据分成2个4位BCD码,求BCD码和,输出到P1口,通过CD4511驱动LED显示。程序如下:ORG 0100H MOV P3,#0FFH;读引脚先对其写1 MOV A,P3;读引脚 CPL A;取反,取真正的键值 MOV 20H,A;A中的数据送20H单元保存 SWAP A;A中的内容半字节交换 ANL A,#0FH;A中得到原高4位的反码 ANL 20H,#0FH;20H单元中得到原低4位的反码 ADD A,20H;A中为原高低4位反码之和 DA A;BCD码调整 MOV P1,A;输出到P1口 SJMP$;程序执行完,“原地踏步”END,2I/O口扩展外部锁存器,为了提高数据传输速率,MCS-51单片机常常需要使I/O口通过外部锁存器和输入设备相连。如下图所示为8051通过74LS373与输入设备连接的接口图。通过中断方式读取数据,8051响应该中断请求后在中断服务程序中通过下面的指令读取输入数据:MOV DPTR,#7FFFH;DPTR指向74LS373端口,地址为7FFFH)MOVX A,DPTR;读入数据到A中,3.2 MCS-51单片机的中断系统,计算机与外界的联系是通过外部设备(也称为外设、输入/输出设备或I/O设备)与外界联系的。计算机与外设之间不是直接相连的,而是通过不同的接口电路来达到彼此间的信息传送的目的。计算机与外设之间交换信息的方式:(1)无条件传送方式:外设对计算机来说总是准备好的。(2)查询传送方式:传送前计算机先查询外设的状态,若已经准备好就传送,否则就继续查询/等待。(3)中断传送方式:外设通过申请中断的方式与计算机进行数据传送。(4)直接存储器存取方式(DMA):传送数据的双方直接通过总线传送数据,不经CPU中转。,3.2.1 中断的基本概念,1中断的定义 所谓“中断”,是指CPU执行正常程序时,系统中出现特殊请求,CPU暂时中止当前的程序,转去处理更紧急的事件(执行中断服务程序),处理完毕(中断服务完成)后,CPU自动返回原程序的过程。作用:采用中断技术可以提高CPU效率、解决速度矛盾、实现并行工作、分时操作、实时处理、故障处理、应付突发事件,可使多项任务共享一个资源(CPU)。中断与子程序的最主要区别:子程序是预先安排好的,中断是随机发生的。中断涉及的几个环节:中断源、中断申请、开放中断、保护现场、中断服务、恢复现场、中断返回。,2.中断源 中断源是指引起中断的设备或事件,或发出中断请求的源头。3.中断的分类 中断按功能通常可分为可屏蔽中断、非屏蔽中断和软件中断三类。可屏蔽中断是指CPU可以通过指令来允许或屏蔽中断的请求。非屏蔽中断是指CPU对中断请求是不可屏蔽的,一旦出现,CPU必须响应。软件中断则是指通过相应的中断指令使CPU响应中断。4.中断优先权与中断嵌套 中断优先级(也称为中断优先权):给每个中断源指定中断响应的优先级别,CPU按中断源的优先级高低顺序响应各中断源发出的中断请求。中断嵌套:在某一瞬间,CPU因响应某一中断源的中断请求而正在执行它的中断服务程序时,若又有一级别高的中断源向CPU发出中断请求,且CPU的中断是开放的,CPU可以把正在执行的中断服务程序暂停下来,转而响应和处理优先权更高的中断源的中断请求,等处理完后再转回来,继续执行原来的中断服务程序,这就是中断嵌套。中断嵌套的过程和子程序嵌套过程类似,子程序的返回指令是RET,而中断服务程序的返回指令是RETI。,5.中断响应及处理过程 保护断点 寻找中断源 中断处理 中断返回保护断点和寻找中断源都是由硬件自动完成的,用户不用考虑。6.中断系统的功能中断系统:能够实现中断功能的硬件电路和软件程序。中断系统的功能:能够实现中断优先权排队、中断嵌套、自动响应中断和中断返回等功能。MCS-51单片机的大部分中断电路都是集成在芯片内部的,只有外部中断请求信号产生电路才分散在各中断源电路和接口电路中。,3.2.2 MCS-51的中断系统,MCS-51提供了5个中断源,2个中断优先级控制,可实现2个中断服务嵌套。可通过程序设置中断的允许或屏蔽,设置中断的优先级。1MCS-51的中断源 8051允许5个中断源:(1)外部中断源(中断标志为IE0和IE1)由(P3.2)端口线引入,低电平或下降沿引起。由(P3.3)端口线引入,低电平或下降沿引起。(2)内部中断源(中断标志为TF0、TF1和TI/RI)T0:定时/计数器0中断,由T0回零溢出引起。T1:定时/计数器1中断,由T1回零溢出引起。TI/RI:串行I/O中断,完成一帧字符发送/接收引起。,8051的中断结构如下图所示。,CPU识别中断申请的依据:CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。2中断控制 MCS-51单片机设置了4个专用寄存器用于中断控制,用户通过设置其状态来管理中断系统。(1)定时器控制寄存器TCON(88H),TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TF0/TF1:定时器溢出中断申请标志位(由硬件自动置位)。=0:定时器未溢出;=1:定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断,中断被CPU响应后由硬件自动清零。,TR0/TR1:定时器运行启停控制位(可由用户通过软件设置)。=0:定时器停止运行;=1:定时器启动运行。IE0/IE1:外部中断申请标志位(由硬件自动置位,中断响应后转向中断服务程序时,由硬件自动清0)。=0:没有外部中断申请;=1:有外部中断申请。IT0/IT1:外部中断请求的触发方式控制位(可由用户通过软件设置)。=0:在INT0/INT1端申请中断的信号低电平有效;=1:在INT0/INT1端申请中断的信号负跳变有效。,(2)串行口控制寄存器SCON(98H),TI/RI:串行口发送/接收中断申请标志位(由硬件自动置位,必须由用户在中断服务程序中用软件清0)。=0:没有串行口发送/接收中断申请;=1:有串行口发送/接收中断申请。SCON的高6位用于串行口工作方式设置和串行口发送/接收控制。(3)中断允许控制寄存器IE(0A8H),SM0 SM1 SM2 REN TB8 RB8 TI RI,(3)中断允许控制寄存器IE(0A8H),EA ES ET1 EX1 ET0 EX0,EX0/EX1/ET1/ET0/ES 位:分别是/,T0/T1,串行口的中断允许控制位。=0:禁止中断;=1:允许中断。EA:总的中断允许控制位(总开关):=0:禁止全部中断;=1:允许中断。,(4)中断优先级控制寄存器IP(0B8H),8051有两个中断优先级,即高优先级和低优先级,每个中断源都可设置为高或低中断优先级,以便CPU对所有的中断实现两级中断嵌套。8051内部中断系统对各中断源的中断优先级有一个统一的规定,称为自然优先级(也称为系统缺省优先级)。如下表所示。,8051单片机的中断优先级采用了自然优先级和人工设置高、低优先级的策略,中断处于同一级别时,就由自然优先级确定。开机时,每个中断都处于低优先级,中断优先级可以通过程序来设定,由中断优先级寄存器IP来统一管理。,(4)中断优先级控制寄存器IP(0B8H),PS PT1 PX1 PT0 PX0,PX0/PX1:/优先级控制位:=0:属低优先级;=1:属高优先级。PT0/PT1:T0/T1中断优先级控制位:=0:属低优先级;=1:属高优先级。PS1:串行口中断优先级控制位:=0:属低优先级;=1:属高优先级。,中断优先级处理原则:对同时发生多个中断申请时:不同优先级的中断同时申请:先高后低 相同优先级的中断同时申请:按序执行 正处理低优先级中断又接到高级别中断:高打断低 正处理高优先级中断又接到低级别中断:高不理低,3中断响应,(1)中断响应的条件 MCS-51单片机工作时,在每个机器周期中都会去查询各个中断标志,如果有中断请求。必须满足下列条件单片机才能响应中断。相应的中断是开放的;没有同级的中断或更高级别的中断正在处理;正在执行的指令必须执行完最后 1个机器周期;若正在执行RETI,或正在访问IE或IP寄存器,则必须执行完当前指令的下一条指令。后方能响应中断。,(2)中断响应的过程,中断过程包括中断请求、中断响应、中断服务、中断返回四个阶段。中断请求:中断源将相应请求中断的标志位置“1”,表示发出请求,并由CPU 查询。中断响应:在中断允许条件下相应中断。断点入栈撤除中断标志关闭低同级中断允许中断入口地址送PC。这些工作都是由硬件自动完成的。中断服务:根据入口地址转中断服务程序,包含保护现场、执行中断主体、恢复现场。中断返回:执行中断返回RETI指令断点出栈开放中断允许返回原程序。,中断服务程序入口地址:中断响应的主要内容就是由硬件自动生成一条长调用指令(LCALL addr16),CPU执行这条长调用指令便响应中断,转入相应的中断服务程序。这里的addr16就是程序存储器中相应的中断服务程序的入口地址,MCS-51的5个中断源的中断服务程序入口地址是固定的,如下表所示。,8051的5个中断源的中断服务入口地址之间相差8个单元。这8个存储单元用来存储中断服务程序一般来说是不够的。用户常在中断服务程序地址入口处放一条三字节的长转移指令。一般地,主程序从0030H单元以后开始存放。例如:ORG 0000HLJMP MAIN;转入主程序,START为主程序地址标号ORG 0003HLJMP INT0;转外中断中断服务程序ORG 000BHLJMP T0;转定时器T0中断服务程序ORG 0030HMAIN:;主程序开始(3)中断响应时间 正常中断响应时间至少为38个机器周期,如果有同级或高级中断服务,将延长中断响应时间。,4中断请求的撤除,为了避免中断请求标志没有及时撤除而造成的重复响应同一中断请求的错误,CPU在相应中断时必须及时将其中断请求标志位撤除。8051的5个中断源的中断请求撤除的方法是不同的。(1)定时器溢出中断请求的撤除 定时器溢出中断得到响应后,其中断请求的标志位TF0和TF1由硬件自动复位。(2)串行口中断请求的撤除 串行口中断得到响应后,其中断请求的标志位TI和RI不能由硬件自动复位,必须由用户在中断服务程序的适当位置通过如下指令将它们撤除。CLR TI;撤除发送中断请求标志 CLR RI;撤除接收中断请求标志 或采用字节型指令:ANL SCON,#0FCH,(3)外部中断请求的撤除,外部中断请求的两种触发方式(电平触发和负边沿触发)的中断请求撤除的方法是不同的。负边沿触发方式:CPU在前一机器周期采到/引脚为高,后一机器周期采到为低才认为是一次中断请求,即依靠CPU两次检测(或)上的负边沿触发电平状态而置位外部中断标志位IE0或IE1。CPU 可记忆申请、可由硬件自动撤除中断申请。电平触发方式:/引脚上的低电平须持续到中断发生。若中断返回前仍未及时撤除低电平,虽然CPU在响应中断时能由硬件自动复位IE0或IE1,但引脚上的低电平仍会使已经复位的IE0或IE1再次置位,产生重复中断的错误。,电平触发型外部中断请求的撤除必须由外部硬件使(或)上的低电平随着其中断被响应而变为高电平。其中断请求撤除的电路如下图所示。,外来的低电平反相CP端产生上跳沿 D端的“0”输出到Q端申请中断,中断服务返回前对P1.0送“0”令Q端变为“1”指令如下:ANL P1,#0FEH(或CLR P1.0);令Q端置“1”ORL P1,#01H(SETB P1.0);令SD端置“1”,以免下次中断来时Q端不能变“0”,3.2.3 MCS-51中断系统的编程,(1)中断初始化设置:开相应中断允许(IE)、根据需要选择优先级(IP)和选择外中断触发方式(TCON),设置计数器、串行口的有关参数。(2)中断服务程序的编写:中断入口、保护现场、关中断、中断服务主体程序、恢复现场、开中断、设置计数器、串行口的有关参数、中断返回指令RETI。例题2 设8051外部中断源接引脚,中断触发方式为电平触发,试编制8051中断系统的初始化程序。解:采用位操作指令实现(也可以采用传送指令和逻辑指令)。SETB EA;开总中断 SETB EX0;开中断 SETB PX0;设置为高优先级 CLR IT0;设置为电平触发方式,例题3 通过外部中断控制八盏灯循环点亮。解:通过P1口扩展八盏灯,在 引脚接一个按钮开关到地,每按一下按钮就申请一次中断,点亮一盏灯,中断服务则是:依次点亮八盏灯中的一盏。采用边沿触发。硬件电路如下图所示。,程序如下:ORG 0000H LJMP MAIN ORG 0013H;中断服务程序入口地址 LJMP IN11 MAIN:SETB EA;开总中断允许“开关”SETB EX1;开分中断允许“开关”CLR PX1;低 优先级(也可不要此句)SETB IT1;边沿触发 MOV A,#0FEH;给累加器A赋初值 SJMP$;原地等待中断申请 IN11:RL A;左环移一次 MOV P1,A;输出到P1口 RETI;中断返回 END,3.2.4 MCS-51扩展外部中断请求输入口,8051单片机只提供了两个外部中断请求输入端,如果需要使用多于两个的中断源,就必须扩展外部中断请求输入口。1定时器/计数器用于扩展外部中断请求输入口 8051单片机有两个定时器/计数器,它们作为计数器使用时,计数输入端T0(或T1)发生负跳变将使计数器加1,利用此特性,适当设置计数初值,就可以把计数输入端T0(或T1)作为外部中断请求输入口。其特点是以占用内部定时中断为代价的。中断服务程序的入口地址仍然为000BH或001BH。,2查询方式扩展外部中断请求输入口 把多个中断源通过硬件(如与非门)引入外部中断输入端,同时又连到某个I/O口。当有中断源申请中断时,在中断服务程序中通过软件查询可确定哪一个是正在申请的中断源,其查询的次序可由中断优先级决定。其特点是中断响应速度较慢。适用于外部中断源较多的场合。3使用专用芯片扩展外部中断请求输入口 当外部中断源较多,同时又要求中断响应速度很高时,查询方式扩展外部中断请求输入口的方法很难满足要求。这时可以使用专用接口芯片进行外部中断请求输入口的扩展。74LS148优先级编码器和可编程中断控制器8259均可以实现该任务。,3.3 MCS-51单片机的定时器/计数器,3.3.1 定时器/计数器 1基本概念(1)计数:计数是指对外部事件的个数进行计量。其实质就是对外部输入脉冲的个数进行计量。实现计数功能的器件称为计数器。(2)定时:8051单片机中的定时器和计数器是一个部件,只不过计数器记录的是外界发生的事件,而定时器则是由单片机内部提供一个非常稳定的计数源进行定时的。这个计数源是由单片机的晶振经过12分频后获得的一个脉冲源。所以定时器计数脉冲的时间间隔与晶振有关。,(3)定时的种类 软件定时:利用执行一个循环程序进行时间延迟。其特点是定时时间精确,不需外加硬件电路,但占用CPU时间。因此软件定时的时间不宜过长。硬件定时:利用硬件电路实现定时。其特点是不占用CPU时间,通过改变电路元器件参数来调节定时,但使用不够灵活方便。对于时间较长的定时,常用硬件电路来实现。可编程定时器:通过专用的定时器/计数器芯片实现。其特点是通过对系统时钟脉冲进行计数实现定时,定时时间可通过程序设定的方法改变,使用灵活方便。也可实现对外部脉冲的计数功能。,MCS-51单片机内部有两个16位可编程的定时器/计数器,简称为T0和T1,均可作定时器用也可计数器,它们均是二进制加法计数器,当计数器计满回零时能自动产生溢出中断请求,表示定时时间已到或计数已终止。适用于定时控制、延时、外部计数和检测等。计数器:对引脚T0(P 3.4)和T1(P3.5.)输入的外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。定时器:对系统晶振振荡脉冲的12分频输出进行计数。(1)定时器/计数器的结构组成:16位加法计数器、工作方式寄存器TMOD和控制寄存器TCON。T0:TL0(低8位)和TH0(高8位)T1:TL1(低8位)和TH1(高8位),2MCS-51内部定时器/计数器,8051单片机内部的定时器/计数器的结构如下图所示。,(2)控制寄存器TCON(88H),TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TF0/TF1:T0/1计数溢出标志位。可用于申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。=1:计数溢出;=0:计数未满。TR0/TR1:T0/1启停控制位。=1:启动计数;=0:停止计数。IE0/IE1和IT0/IT1:用于管理外部中断(前面已介绍过)。,M1,M0:工作方式选择位。=00:13位定时器/计数器;=01:16位定时器/计数器(常用);=10:可自动重装的8位定时器/计数器(常用);=11:T0 分为2个8位定时器/计数器;仅适用于T0。C/:定时方式/计数方式选择位。=1:选择计数器工作方式,对T0/T1引脚输入的外部事件的负脉冲计数;=0:选择定时器工作方式,对机器周期脉冲计数定时。如下页图所示。,(2)工作方式寄存器TMOD,T1,T0,GATE:门控位,定时器/计数器的启/停可由软件与硬件两者控制=0:软件控制,只由TCON中的启/停控制位TR0/TR1控制定时器/计数器的启/停。=1:硬件控制,由外部中断请求信号/和TCON中的启/停控制位TR0/TR1组合状态控制定时器/计数器的启/停。其控制逻辑如下图所示。,3.3.2 定时器/计数器的工作方式,8051单片机的定时器/计数器共有四种工作模式,现以T0为例加以介绍,T1与T0的工作原理相同,但方式3下T1停止计数。方式(如F0)和用户定义名称等几种方式。1工作方式0(M1M0=00,13位定时器/计数器)由TH0的全部8位和TL0的低5位(TL0的高3位未用)构成13位加1计数器,当TL0低5位计数满时直接向TH0进位,并当全部13位计数满溢出时,溢出标志位TF0置“1”。2工作方式1(M1M0=01,16位定时器/计数器)由TH0和TL0构成16位加1计数器,其他特性与工作方式0相同。3工作方式2(M1M0=10,自动重装计数初值的8位定时器/计数器)16位定时器/计数器被拆成两个8位寄存器TH0和TL0,CPU在对它们初始化时必须装入相同的定时器/计数器初值。以TL0作计数器,而TH0作为预置寄存器。当计数满溢出时,TF0置“1”,同时TH0将计数初值以硬件方法自动装入TL0。这种工作方式很适合于那些重复计数的应用场合(如串行数据通信的波特率发生器)。,4工作方式3(M1M0=11,2个8位定时器/计数器,仅适用于T0)TL0:8位定时器/计数器,使用T0原有控制资源TR0和TF0,其功能和操作与方式0或方式1完全相同。TH0:只能作为8位定时器,借用T1的控制位TR1和TF1,只能对片内机器周期脉冲计数。在方式3模式下,定时器/计数器0可以构成两个定时器或者一个定时器和一个计数器。T0方式3下的T1方式2,因定时初值能自动恢复,用作波特率发生器更为合适。,定时器/计数器可按片内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数。在应用时,其工作方式和工作过程均可通过程序设定和控制,因此,定时器/计数器在工作前必须先对其进行初始化,计算和设置初值。1.定时器T0/T1 中断申请过程(1)在已经开放T0/T1中断允许且已被启动的前提下,T0/T1加1计满溢出时 TF0/TF1标志位自动置“1”;(2)CPU 检测到TCON中TF0/TF1变“1”后,将产生指令:LCALL 000BH/LCALL 001BH 执行中断服务程序;(3)TF0/TF1标志位由硬件自动清“0”,以备下次中断申请。,3.3.3 定时器/计数器的应用,2.定时器/计数器初始化的步骤,(1)写TMOD,设置定时器/计数器的工作方式;(2)计算定时器/计数器的初值,写入TH0/TH1、TL0/TL1。(3)设置IE、IP,以开放相应的中断和设定中断优先级。3.定时器/计数器的定时器/计数器范围(1)工作方式0:13位定时器/计数器方式 最大计数值=213=8192(2)工作方式1:16位定时器/计数器方式 最大计数值=216=65536(3)工作方式2和工作方式3:8位的定时器/计数器方式 最大计数值=28=256,3.计数器初值的计算,方法:用最大计数量减去需要的计数次数。即:TC=MC 其中:TC计数器需要预置的初值;M计数器的模值(最大计数值);方式0时,M=213;方式1时,M=216;方式2,3时,M=28;C计数器计满回0所需的计数值,即设计任务要求的计数值。例如:流水线上一个包装是12盒,要求每到12盒就产生一个动作,用单片机的工作方式0来控制,则应当预置的初值为:TC=M C=213 12=8180,4.定时器初值的计算,定时时间的计算公式为:T=(MTC)T0(或TC=MT/T0)其中:T定时器的定时时间,即设计任务要求的定时时间;T0计数器计数脉冲的周期,即单片机系统主频周期的12倍;M计数器的模值;TC定时器需要预置的初值。若设初值TC=0,则定时器定时时间为最大。若设单片机系统主频为12MHz,则各种工作方式定时器的最大定时时间为:工作方式0:Tmax=2131s=8.192ms工作方式1:Tmax=2161s=65.536ms工作方式2和3:Tmax=281s=0.256ms,5.定时器/计数器应用举例 例题4 设一只发光二极管LED和8051的P1.0脚相连。当P1.0脚是低电平时,LED发亮;当P1.0脚是高电平时,LED不亮。编制程序用定时器来实现发光二极管LED的闪烁功能,设置LED每1s闪烁一次。已知单片机系统主频为12MHz。解:定时器/计数器的最长的定时是65.536ms,无法实现1s的定时。可以采用软件计数器来进行设计。,设计思想:定义一个软件计数器单元30H,先用定时器/计数器0做一个50ms的定时器,定时时间到了以后将软件计数器中的值加1,如果软件计数器计到了20,取反P1.0,并清掉软件计数器中的值,否则直接返回。则完成了20次定时中断才取反一次P1.0,因此定时时间就为2050=1000ms=1s。定时器/计数器0采用工作方式1,其初值为:21650ms/1s=6553650000=15536=3CB0H电路图如下:,定时器初值的新算法:,程序如下:ORG 0000H AJMP START;转入主程序 ORG 000BH;定时器/计数器0的中断服务程序入口地址 AJMP TIME0;跳转到真正的定时器中断服务程序处 ORG 0030H START:MOV SP,#60H;设置堆栈指针 MOV P1,#0FFH;关发光二极管LED(使其灭)MOV 30H,#00H;软件计数器预清0 MOV TMOD,#01H;定时器/计数器0工作于方式1 MOV TH0,#3CH;设置定时器/计数器的初值 MOV TL0,#0B0H SETB EA;开总中断允许 SETB ET0;开定时器/计数器0中断允许 SETB TR0;启动定时器/计数器0 LOOP:AJMP LOOP;循环等待(真正工作时,这里可写任意其他程序),定时器/计数器0的中断服务程序1:TIME0:PUSH ACC;将PSW和ACC推入堆栈保护 PUSH PSW INC 30H;软件计数器加1 MOV A,30H CJNE A,#20,T_LP2;软件计数器单元中的值到了20了吗?到了,继续执行;否则,转入T_LP2 T_LP1:CPL P1.0;到了,P1.0取反 MOV 30H,#00H;清软件计数器(或置初值20)T_LP2:MOV TH0,#3CH;重置定时器/计数器的初值 MOV TL0,#0B0H POP PSW;恢复PSW和ACC POP ACC RETI;中断返回 END,定时器/计数器0的中断服务程序2:TIME0:MOV TL0,#0B0H;重置定时器/计数器的初值 MOV TH0,#3CH DJNZ 30H,T_LP2;软件计数器单元中的值到了20了吗?;T_LP1:CPL P1.0;到了,P1.0取反 MOV 30H,#20;重置软件计数器初值 T_LP2:RETI;中断返回 END,例题5 设外部有一个计数源。编制程序,对外部计数源进行计数并显示。解:将外部计数源连到定时器/计数器1的外部引脚T1上,可用LED将计数的值显示出来,我们用P1口连接的8个LED来显示计到的数据。LED对P1口电平要求同例4。(电路图类同例3)程序如下:ORG 0000H AJMP START;转入主程序 ORG 0030H START:MOV SP,#60H;设置堆栈指针 MOV TMOD,#60H;定时器/计数器1作计数用 SETB TR1;启动计数器1开始运行 LOOP:MOV A,TL1;读计数器1的计数值送A MOV P1,A;将计数值输出到P1口,驱动LED显示 AJMP LOOP;转回LOOP END,3.4 MCS-51 单片机的串行通信,3.4.1 概述1.通信 通信:单片机与外界进行信息交换统称为通信。8051单片机的通信方式有两种:并行通信:数据的各位同时发送或接收。特点是传送速度快、效率高,但成本高。适用于短距离传送数据。计算机内部的数据传送一般均采用并行方式。串行通信:数据一位一位顺序发送或接收。特点是传送速度慢,但成本低。适用于较长距离传送数据。计算机与外界的数据传送一般均采用串行方式。,2.数据通信的制式单工方式:数据仅按一个固定方向传送;半双工方式:数据可实现双向传送,但不能同时进行;全双工方式:允许双方同时进行数据双向传送;多工方式:在同一线路上实现资源共享。3.串行通信的分类 串行数据通信按数据传送方式可分为异步通信和同步通信两种形式:同步方式:以数据块为单位进行数据传送,包括同步字符、数据块和校验字符CRC。优点是数据传输速率较高,缺点是要求发送时钟和接收时钟保持严格同步。数据格式如下图所示。,异步方式:以字符为单位进行数据传送,每一个字符均按固定的字符格式传送,又被称为帧。优点是不需要传送同步脉冲,可靠性高,所需设备简单;缺点是字符帧中因包含有起始位和停止位而降低了有效数据的传输速率。数据格式如下图所示:,4.串行数据通信的波特率,波特率是指每秒钟传送信号的数量,单位为波特(Baud)。而每秒钟传送二进制数的信号数(即二进制数的位数)定义为比特率,单位是bps(bit per second)或写成b/s(位/秒)。在单片机串行通信中,传送的信号是二进制信号,波特率与比特率数值上相等。单位采用bps。例如,异步串行通信的数据传送的速率是120字符/秒,而每个字符规定包含10位数字,则传输波特率为:120字符/秒 10位/字符=1200位/秒=1200bps,3.4.2 MCS-51的串行口,MCS-51单片机内部有一个全双工的串行通信口(P3.0、P3.1),既可作UART(通用异步接收/发送器)用,也可作同步移位寄存器使用,还可用于网络通信,其帧格式可有8位、10位和11位,并能设置各种波特率。1串行口寄存器结构(1)两个物理上独立的同名的接收/发送缓冲寄存器SBUF 指令 MOV SBUF,A 启动一次数据发送,指令 MOV A,SBUF 完成一次数据接收,即向发送缓冲器SBUF写入数据即可发送数据,从接收缓冲器SBUF读出数据即可接收数据。(2)输入和输出移位寄存器和控制器等组成。(3)2个SFR寄存器SCON和PCON,用于串行口的初始化编程。(4)接收/发送数据,无论是否采用中断方式工作,每接收/发送一个数据都必须用指令对 RI/TI 清0,以备下一次收/发。,MCS-51串行口的结构如下图所示:,2.串行通信控制寄存器SCON(98H),SM0,SM1:串行口4种工作方式控制位。=00:方式0,8位同步移位寄存器,其波特率为fosc/12;=01:方式1,10位UART,其波特率为可变,由定时器控制;=10:方式2,11位UART,其波特率为fosc/64或fosc/32;=11:方式3,11位UART,其波特率为可变,由定时器控制。其中:fosc为系统晶振频率。RI,TI:串行口收/发数据申请中断标志位 1 申请中断;0 不申请中断。,RB8:在方式2、3中,用于存放收到的第9位数据;在双机通信中,作为奇偶校验;在多机通信中,用作区别地址帧/数据帧的标志。TB8:方式2、3中,是要发送的第9位数据;在双机通信中,用于对接收到的数据进行奇偶校验;在多机通信中,用作判断地址帧/数据帧,TB8=0 表示发送的是数据,TB8=1 表示发送的是地址。REN:串行口接收允许控制位=1:表示允许接收;=0:禁止接收。SM2:串行口多机通信控制位,作为方式2、方式3的附加控制位。,3.中断允许寄存器IE(0A8H)中断允许寄存器IE在节中已介绍。其中对串行口有影响的位ES。ES为串行中断允许控制位。ES=1:允许串行中断;ES=0:禁止串行中断。4.电源管理寄存器PCON(87H)不可位寻址。PCON主要用于实现电源控制而设置的专用寄存器,已在节中介绍过。其格式如下图所示。,SMOD:串行口波特率倍增位=1:串行口波特率加倍。=0:串行口波特率不变,系统复位时默认为SMOD=0。,3.4.3 串行口的工作方式,1.工作方式0(8位移位寄存器I/O方式)发送/接收过程:SBUF中的串行数据由RxD逐位移出/移入(低位在先,高位在后);TxD输出移位时钟,频率=fosc1/12;每送出/接收8位数据 TI/RI自动置1;需要用软件清零 TI/RI。注意:串行口在方式0下的工作并非是一种同步通信方式,经常配合“串入并出”“并入串出”移位寄存器一起使用,以达到扩展一个并行口的目的。扩展电路如下图所示。,如要发送数据,查询方式的程序如下:MOV SCON,#00H;串行口方式0 MOV SBUF,A;将数据送出 JNB TI,$;等待数据发送完毕 CLR TI;为下次发送作准备注意:复位时,SCON 已经被清零,缺省值为方式0。发送条件:TI=0。接收条件:TI=0,置位 REN=1(允许接收数据)。2.方式1(波特率可变的10位异步通信方式)发送/接收数据的格式:一帧信息包括1个起始位0,8个数据位和1个停止位1。发送/接收过程:SBUF中的串行数据由RXD逐位移出/移入;TXD输出移位时钟,频率=(2SMOD/32)T1的溢出率,波特率可变。每送出/接收8位数据 TI/RI自动置1;需要用软件清零 TI/RI。工作时,发送端自动添加一个起始位和一个停止位;接收端自动去掉一个起始位和一个停止位。发送/接收条件:同方式0。,3.方式2(固定波特率的11位异步接收/发送方式),发送/接收过程:方式2的接收/发送过程类似于方式1,所不同的是它比方式1增加了一位“第9位”数据(TB8/RB8),用于“奇偶校验”。方式2常用于单片机间通信。波特率=fosc 2SMOD/64。发送/接收条件:同方式0。3.方式3(可变波特率的11位异步接收/发送方式)方式3和方式2唯一的区别是波特率机制不同,方式3的波特率=(2SMOD/32)T1的溢出率。,奇偶校验:奇偶校验是检验串行通信双方传输的数据正确与否的一个措施,并不能保证通信数据的传输一定正确。即如果奇偶校验发生错误,表明数据传输一定出错了;如果奇偶校验没有出错,绝不等于数据传输完全正确。奇校验规定:8位有效数据连同1位附加位中,二进制“1”的个数为奇数。偶校验规定:8位有效数据连同1位附加位中,二进制“1”的个数为偶数。约定发送采用奇校验:若发送的8位有效数据中“1”的个数为偶数,则要人为在附加位中添加一个“1”一起发送;若发送的8位有效数据中“1”的个数为奇数,则要人为在附加位中添加一个“0”一起发送。约定接收采用奇校验:若接收到的9位数据中“1”的个数为奇数,则表明接收正确,取出8位有效数据即可;若接收到的9位数据中“1”的个数为偶数,则表明接收出错!应当进行出错处理。采用偶校验时,处理方法与奇校验类似。,3.4.4 串行口的通信波特率,串行口的通信波特率恰到好处地反映了串行传输数据的速率。在MCS-51串行口的四种工作方式中,方式