第6章内部资源及应用.ppt

上传人:sccc 文档编号:4722618 上传时间:2023-05-11 格式:PPT 页数:78 大小:1.19MB
返回 下载 相关 举报
第6章内部资源及应用.ppt_第1页
第1页 / 共78页
第6章内部资源及应用.ppt_第2页
第2页 / 共78页
第6章内部资源及应用.ppt_第3页
第3页 / 共78页
第6章内部资源及应用.ppt_第4页
第4页 / 共78页
第6章内部资源及应用.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《第6章内部资源及应用.ppt》由会员分享,可在线阅读,更多相关《第6章内部资源及应用.ppt(78页珍藏版)》请在三一办公上搜索。

1、1,第6章 80C51单片机内部资源及应用,6.1 中断系统和外部中断 中断是一项重要的计算机技术,采用中断技术可以使多个任务共享一个资源,所以中断技术实质上就是一种资源共享技术。80C51是一个多中断源的单片机,有3类共5个中断源,分别是外部中断2个,定时中断2个和串行中断1个。外部中断是由外部原因引起的,共有2个中断源,即外部中断0和外部中断1。它们的中断请求信号分别由80C51外部引脚(P3.2)和(P3.3)输入。,定时中断是为满足定时或计数的需要而设置的。串行中断是为串行数据传送的需要而设置的。,2,6.1.1 中断技术概述1.中断的概念当中央处理器CPU正在执行某程序时,由于某种原

2、因,外界向CPU发出了暂停目前工作去处理更重要事件的请求,程序被打断,CPU响应该请求并转入相应的处理程序,处理程序完成以后,再返回到原来程序被打断的位置,继续原来工作,这一过程称为中断。实现中断功能的部件称为中断系统。2.中断技术的作用计算机内有限的CPU资源要处理多项任务,实现多种外部设备之间外部数据传送,必然引起CPU资源短缺的局面。计算机引入中断技术后,解决了这种资源竞争的问题,因此中断技术实质上是一种资源共享技术。基于这种资源共享思想,中断技术主要用于分时操作、实时处理、故障及时处理等。,3,3.中断系统功能中断系统一般要完成以下功能。1)现场保护和现场恢复某人看书 执行主程序 日常

3、事务电话铃响 中断信号INT=0 中断请求暂停看书 暂停执行主程序 中断响应书中记号 当前PC入栈 保护断点电话谈话 执行I/O程序 中断服务继续看书 返回主程序 中断返回,4,主程序被断开的位置称为断点,为了CPU完成中断服务后,能够返回到原主程序的位置,就要保护断点处的现场状态,即将断点处的PC值、相关寄存器的内容、标志位等状态压入堆栈保存,该操作被称为保护断点和现场。中断服务结束后,在返回主程序前,要将被保护的断点和现场恢复,即弹出堆栈中被保存的内容至各相关寄存器,该操作被称为现场恢复。汇编语言程序员在使用中断时,需要仔细考虑现场的保护和恢复,高级程序员无需关心该问题,C编译器会自动完成

4、现场保护和恢复。,5,2)中断优先权排队通常微型计算机系统有多个中断源,当有两个以上的中断源同时向CPU提出中断请求时,CPU面临首先为哪个中断源先服务的问题,微型计算机内都为这些中断源规定了中断响应的先后顺序优先级别,即不同的中断源享有不同的优先响应权利,称为中断优先权,CPU对多个中断源响应的优先权由高到低的排队,称为优先权排队。CPU总是首先响应优先权级别高的中断请求。,6,3)中断嵌套当CPU正在执行某一中断服务程序时,可能有优先级别更高的中断源发出中断请求,此时,CPU将暂停当前的优先级别低的中断服务,转而去处理优先级更高的中断申请,处理完后,再回到原低级中断处理程序,这一过程称为中

5、断嵌套,该中断系统称为多级中断系统。没有中断嵌套功能的中断系统称为单级中断系统。,7,6.1.2 80C51单片机中断系统80C51中断系统由中断源、中断标志、中断允许控制、中断优先级控制、中断查询硬件以及相应的特殊功能寄存器组成。,8,1.中断源80C5l共有3类5个中断源,分别是2个外部中断源、2个定时中断源、1个串行口接收/发送中断源。1)外部中断外部中断是由外部请求信号或掉电等异常事故引起的,共有2个中断源:外部中断0和1,分别由引脚(P3.2)和(P3.3)引入。2)定时中断80C5l单片机内有两个定时器/计数器T0、T1,通过一种计数结构,实现定时/计数功能,当计数值发生溢出时,表

6、明已经达到预期定时时间或计数值,定时器/计数器的中断请求标志位TF0或TF1被置1,也就向CPU发出了中断请求的申请。3)串行口中断当串行口接收或发送完一组数据时,便产生一个中断请求,特殊功能寄存器SCON中的RI或TI被置1。,9,2.中断请求标志 要实现中断,首先中断源要提出中断请求,单片机内中断请求的过程是特殊功能寄存器TCON和SCON相关状态位中断请求标志位置1的过程,当CPU响应中断时,中断请求标志位才由硬件或软件清0。1)TCON中的中断标志位 该寄存器用于保存外部中断请求,以及作为定时器的计数溢出标记。既可以对其整个字节寻址,又可对其位寻址。寄存器地址88H,位地址8FH88H

7、,这个寄存器既有定时器/计数器的控制功能又有中断控制功能,其中与中断有关的控制位共6位:IE0和IE1、IT0和IT1以及TF0和TF1。,10,1.中断标志位:TF1、TF0、IE1、IE0、RI、TI 登记各中断源请求信号:=1,有中断请求;=0,无中断请求。CPU响应中断后,该中断标志自动清零。TI,RI标志必须软件清零。,定时控制寄存器TCON位地址和为符号,11,4中断优先级控制位:PS、PT1、PX1、PT0、PX0 2级优先级:=1为高优先级,=0为低优先级。同一优先级别按内部查询顺序排列优先级:高 INT0、T0、INT1、T1、SI/O 低。,3.中断允许控制位:EA、ES、

8、ET1、EX1、ET0、EX0=1开中断;=0关中断。例:允许CPU响应INT0的中断请求汇编语言C语言SETB EX0 EX0=1;SETB EAEA=1;,2.外部中断触发方式选择位:IT0、IT1=1:下降沿触发中断请求;=0:低电平触发中断请求。,12,2)SCON中的串行中断标志位,SCON寄存器地址98H,位地址9FH-98H,其中的低2位RI和TI锁存串行口的接收中断和发送中断的申请标志位。,SM0,SM1:选择串行口4种工作方式。SM2:多机控制位,用于多机通讯。REN:允许接收控制位,REN=1允许接收;REN=0禁止接收。TB8:发送的第9位数据位,可用作校验位和地址/数据

9、标识位RB8:接收的第9位数据位或停止位TI:发送中断标志,发送一帧结束,TI=1,必须软件清零RI:接收中断标志,接收一帧结束,RI=1,必须软件清零,13,14,3.中断控制中断控制主要通过中断允许寄存器IE和中断优先级寄存器IP实现。1)中断允许控制中断源申请后,中断能否被响应,取决于CPU对中断源的开放或屏蔽状态,由内部的中断允许寄存器IE进行控制,IE的地址是A8H,位地址为AFHA8H。2)中断优先级控制80C51有两个中断优先级,每个中断源均可通过软件设置为高优先级或低优先级中断,实现2级中断嵌套。高优先级中断请求可以中断一个正在执行的低优先级中断服务,除非正在执行的低优先级中断

10、服务程序设置了禁止CPU中断某些高优先级的中断。正在执行的中断服务程序不能被另一个同级或低优先级的中断所中断,正在执行高优先级的中断服务程序,不能被任何中断源中断,一直执行到返回指令RETI,返回主程序,而后再执行一条指令后,才能响应新的中断申请。,15,特殊功能寄存器IP为中断优先级控制寄存器,其地址为B8H,位地址为BFHB8H,各位内容如表所示。中断优先级控制寄存器,PX0:外部中断0中断优先级控制位。PX0=l,外部中断0定义为高优先级中断;PX0=0,为低优先级中断。PT0:定时器0中断优先级控制位。PT0=1,定时器T0中断定义为高优先级中断;PT0=0,为低优先级中断。PX1:外

11、部中断1中断优先级控制位。PX1=l,外部中断1定义为高优先级中断;PX1=0,为低优先级中断。PT1:定时器1中断优先级控制位。PT1=1,定时器T1中断定义为高优先级中断;PT1=0,为低优先级中断。PS:串行口中断优先级控制位。PS=1时,串行口中断定义为高优先级中断;PS=0时,为低优先级中断。,当系统复位后,IP的所有位被清0,所有的中断源均被定义为低优级中断。IP的各位都可用程序置位和复位,也可用位操作指令或字节操作指令更新IP的内容,以改变各中断源的中断优先级。当同一优先级的几个中断源同时向CPU提出中断请求时,CPU通过内部硬件查询逻辑电路,按查询顺序判定优先响应哪一个中断请求

12、,其查询顺序如下:外部中断0、定时中断0、外部中断1、定时中断1、串行中断。,16,4.中断处理过程一个完整的中断处理过程包括中断请求、中断响应、中断服务、中断返回几个部分。1)中断响应 中断响应指系统满足中断条件,CPU对中断请求做出反应,程序执行转向中断服务程序入口地址的过程。CPU要响应中断请求,除了前面介绍的要有中断请求、中断被允许基本条件外,如果出现下列情况之一,则中断响应将被阻止:情况一:CPU正在处理同级的或更高优先级的中断。情况二:当前的机器周期不是所执行指令的最后一个机器周 期,CPU不会响应任何中断请求。情况三:正在执行的指令是RETI或是访问IE或IP的指令。CPU 完成

13、这类指令后,至少还要再执行一条指令才会响 应新的中断请求,以便保证程序能够正确地返回。如果存在上述任何一个情况,CPU都会丢弃中断查询结果,否则将在随后的机器周期开始响应中断。,17,CPU在每个机器周期的S5P2(S5的第2个时钟周期)对 或 进行采样,并设置中断标志位的状态,而其他中断源的中断请求发生在单片机内部,直接设置相应的中断标志位的状态。CPU在每个机器周期的S6按顺序查询每个中断请求标志位,如果有中断请求满足所有中断允许条件,则CPU将在下个机器周期的S1按中断优先级响应激活最高级中断请求。,CPU响应中断时,先置位相应的高/低优先级状态触发器,指出CPU开始处理的中断优先级别,

14、然后由硬件生成一条长调用指令LCALL,其格式为:LCALL addr16,其中addr16是在程序存储区中与各中断请求对应的中断入口地址,也称为中断向量地址。CPU执行该LCALL指令,由硬件自动清除有关中断请求标志位(TI和RI除外),将程序计数器PC的内容压入堆栈以保护断点(但不保护PSW),再将被响应的中断入口地址装入PC,开始进入中断服务。程序存储区中为各中断服务程序只分配了8个单元,一般情况下难以安排下一个完整的中断服务程序。因此通常总是在各中断区入口地址处放置一条无条件转移指令LJMP addr16,使程序执行转向在其他地址存放的中断服务程序。,18,2)中断响应时间 一个中断,

15、从查询中断请求标志位到转向中断区入口地址要经历一段时间,即为中断响应时间。不同中断情况,中断响应时间也是不一样的。最短的响应时间为3个机器周期。如果中断响应受阻,不同情况需要不同的响应时间,最长响应时间为8个机器周期。一般情况下,在一个单中断系统里,外部中断响应时间总是在38个机器周期之间。如果出现有同级或高级中断正在响应或服务中需等待的时候,那么响应时间就无法计算了。,3)中断服务流程中断服务程序从入口地址开始执行,到返回指令RETI为止,中间经历了关中断、保护现场和断点、开中断、中断服务、关中断、恢复现场、开中断、返回断点几个阶段。,中断服务流程图,19,由于80C51单片机内不具有自动关

16、中断的功能,因此进入服务子程序后,必须通过指令关闭中断,为下一步保护现场和断点做准备。保护现场就是在程序进入中断服务程序入口之前,将相关寄存器内容、标志位状态等压入堆栈,避免在运行中断服务程序时,破坏这些数据或状态,保证中断返回后,主程序能够正常运行。然后,再打开中断,允许响应别的中断请求。接着可以执行中断服务,中断服务是用户最终要实现的具体功能。在返回主程序之前,关闭中断,恢复现场,再用指令开中断,以便CPU响应新的中断请求。中断服务程序的最后一条指令是RETI,用来返回断点。保护现场和恢复现场可通过堆栈操作指令PUSH direct和POP direct 实现,要保护的现场内容,取决于用户

17、的对具体情况的需求。C51编译器会自动完成ACC、B、DPH、DPL、PSW、R0R7的保护和恢复。C51程序员无需保护现场和恢复现场。,20,5.中断请求的撤除 中断响应后,TCON和SCON中的中断请求标志应及时清除。否则中断请求将仍然存在,并引起错误的中断响应。不同的中断请求,其撤除方法也不一样。对于定时中断,中断响应后,硬件自动对中断标志位TF0或TFl清0,中断请求自动撤除,无需采取其他措施。对于脉冲触发的外部中断请求,在中断响应后,也同样通过硬件自动对中断请求标志位IE0或IE1清0,即中断请求的撤除也是自动的。对于电平触发的外部中断请求,情况则不同。中断响应后,硬件不能自动对中断

18、请求标志位IE0或IE1清0。中断撤除,要靠撤除 或引脚上的低电平才能有效。,对于串行中断,其中断标志位TI和RI,不进行自动清0。因为在中断响应后,还要测试这两个标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行中断请求的撤除是通过软件方法,在中断服务程序中实现的。,21,6.1.3 C51中断服务函数中断系统十分重要,C51编译器允许在C语言源程序中声明中断和编写中断服务程序,从而减轻了采用汇编程序编写中断服务程序的繁琐程度。通过使用interrupt关键字实现。定义中断服务程序的一般格式如下:void 函数名()interrupt n using musing m指明该中

19、断服务程序所对应的工作寄存器组,m取值范围为:03。指定工作寄存器组的缺点是,所有被中断调用的过程都必须使用同一个寄存器组,否则参数传递会发生错误。通常不设定using m,除非保证中断程序中未调用其他子程序。P187P188例子,22,6.2 定时器/计数器 80C51的单片机内有2个16位可编程的定时器/计数器,它们具有4种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。6.2.1 定时器/计数器0、1的结构及工作原理1.定时器/计数器0、1的结构定时器/计数器T0、T1的内部结构框图如图1所示:,图1 定时器/计数器内部结构逻辑图

20、,23,2.加1计数器定时器/计数器T0、T1都有一个16位的加1计数器,它们分别由8位特殊功能寄存器TH0、TL0和TH1、TL1组成。加1计数器的初值可以通过程序进行设定,设定不同的初值,就可以获得不同的计数值或定时时间。3.定时控制寄存器(TCON)定时控制寄存器TCON是个8位寄存器,它不仅参与定时控制,还参与中断请求控制。既可以对其整个字节寻址,又可以对其位寻址,各位的地址及其对应的功能参见P192。,定时器溢出使TFx=1,引起中断请求,CPU响应Tx中断后,自动清0 TFx。,1)启动控制位TR0、TR1,=0,停止定时器工作,=1,启动定时器工作,2)溢出中断标志位TF0、TF

21、1,可用软件检测TFx,必须软件清0。,24,4.工作方式控制寄存器(TMOD)工作方式控制寄存器TMOD,用来设定定时器/计数器T0、T1的工作方式。TMOD寄存器只能进行字节寻址。,2个可独立控制的16位定时器/计数器:T0、T1,1)功能选择位C/T:C/T=0,定时功能,计数内部机器周期脉冲;C/T=1,计数功能,计数引脚T0(T1)输入的负脉冲。,2)方式选择位M1、M0:4种工作方式:13/16/8位,25,图2 定时器/计数器逻辑结构计数功能:对外部事件产生的脉冲进行计数。对于80C51单片机,当图2中C/=1,T0(P3.4)或T1(P3.5)两个信号引脚输入信号脉冲发生负跳变

22、时,加1计数器自动加1。,定时功能:对单片机内部机器周期产生的脉冲进行计数,即当图2中C/=0,每个机器周期计数器自动加1。如果单片机的晶体频率为12MHz,则计数频率为1MHz,或者说计数器每加1,可实现1us的定时。,26,6.2.2 定时器/计数器0、1的四种工作方式 定时器/计数器T0、T1可以有四种不同的工作方式:方式0、方式1、方式2、方式3。1.方式0 当TMOD中M1M0=00时,定时器/计数器选定方式0进行工作。,图6.7 定时器/计数器0的工作方式0电路逻辑结构,27,C/=1时,图中电子开关S1,打在下端,定时器/计数器处于计数器状态,加法计数器对T0引脚上的外部输入脉冲

23、计数。计数值:N=8192-x计数初值x是TH0、TL0设定的初值。x=8191时为最小计数值l,x=0时为最大计数值8192,即计数范围为18192(213)。C/=0时,图6.7中电子开关S1,打在上端,振荡脉冲的12分频输出,13位定时器/计数器处于定时器状态,加法计数器对机器周期(Tcy)脉冲计数。定时时间:Td=(8192-x)Tcy 或 Td=(8192-x)Tcp12,28,如果晶振频率fosc=12MHz,机器周期为1us,则定时范围为1us8192us。随着计数的增大,TL0的低5位溢出后自动向TH0进位,TH0溢出后,将溢出标志位TF0置位,并向CPU发出中断请求。图6.7

24、中控制开关S2控制定时器/计数器的启动或停止,开关S2的控制信号为:I=,当GATE=0时,=1,信号不起作用,开关S2的状态由决定,即TR0=1时,启动定时器/计数器;TR0=0时,关闭定时器/计数器。当GATE=1时,上式中I=TR0,开关S2的状态由 TR0决定,所以仅当TR0=1且位于高电平时,开关S2闭合,才能启动定时器/计数器0工作。如果上出现低电平,则停止工作,利用门控位这一特征,可以测量外信号的脉冲宽度。,29,2.方式1当TMOD中M1M0=01时,定时器/计数器选定方式1进行工作。图4是T0工作在方式1下的逻辑结构图(定时器/计数器1与其完全一致)。其逻辑结构与方式0不同的

25、是两个8位寄存器TH0和TL0全部构成了一个16位的定时器/计数器,其他与工作方式0完全相同。,图4 定时/计数器0的工作方式1电路逻辑结构,在该工作方式下,当作为计数器使用时,其计数范围是165536(216)作为定时器使用时,定时器的定时时间为:Td=(216-Count)Tcy 或Td=(216-Count)12Tcp如果晶振频率fosc=12MHz,则定时范围为165536。,30,3.方式2以上工作方式0、方式1计数器具有共同的特点,即计数器发生溢出现象后,自动处于0状态,因此如果要实现循环计数或定时,就需要程序不断反复给计数器赋初值,这就影响了计数或定时精度,并给程序设计增添了麻烦

26、。针对该问题,便设计了计数器具有初值自动重新加载功能的工作方式2,其逻辑结构如图4所示。该方式下,16位计数器被分为两个8位寄存器:TL0和TH0,其中TL0作为计数器,TH0作为计数器TL0的初值预置寄存器,并始终保持为初值常数。当TL0计数溢出时,系统在TF0位置位,并向CPU申请中断的同时,将TH0的内容重新装入TL0,继续计数。这样省掉了工作方式0、方式1一定要通过软件给计数器重新赋初值的麻烦,并提高了计数精度。,31,图4 T0在工作方式2下的逻辑结构TH0的内容重新装入TL0后,其自身保持不变。这样计数器具有重复加载、循环工作的特点,可用于产生固定脉宽的脉冲信号,还可以用来作为串行

27、口波特率发生器使用。,32,4.方式3当TMOD中M1M0=11时,定时器/计数器处于定时工作方式3下工作。在前三种定时工作方式中,两个定时器/计数器T0、T1,具有相同平等的功能,但在该工作方式下,T0和T1具有完全不同的功能。图5是T0在定时工作方式3下的逻辑结构,其中TL0和TH0作为两个独立的8位计数器,分别构成了一个定时器/计数器和一个定时器,TL0使用T0的状态控制位C/、GATE、TR0和,而TH0被固定为一个8位定时器(不能用作外部计数方式),并占用了定时器T1的状态控制位TRl和TF1,占用T1的中断源。,33,图5 工作方式3下定时器/计数器T0被分成两个8位计数器的逻辑结

28、构。在前面的三种工作方式中,两个定时器/计数器T0、T1的设置和使用是完全相同的。但是在工作方式3下,T0、T1的设置和使用却不尽相同。,34,1)在工作方式3下的T0在工作方式3下,定时器/计数器T0被拆成两个独立的8位计数器TL0和TH0。其中TL0既可以计数使用,又可以定时使用,定时器/计数器T0的控制位和引脚信号全归它使用。其功能和操作与方式0或方式1完全相同。而且逻辑电路结构也极其类似,如图5所示。与TL0的情况相反,对于T0的另一半TH0,则只能作为简单的定时器使用。而且由于T0的控制位已被TL0独占,因此只好借用定时器/计数器T1的控制位TR1和TF1,以计数溢出去置位TF1,而

29、定时的启动和停止则受TR1的状态控制。由于TL0既能作定时器使用,也能作计数器使用,而TH0只能作定时器使用却不能作计数器使用,因此在工作方式3下,定时器/计数器0可以构成2个定时器或1个定时器1个计数器。,35,2)工作方式3下的T1如果定时器/计数器T0已工作在工作方式3下,则定时器/计数器T1只能工作在方式0、方式1或方式2下,它的运行控制位TR1及计数溢出标志位TF1已被定时器/计数器0借用,如下图定时器/计数器方式3的T1结构所示。,在这种情况下定时器/计数器1通常是作为串行口的波特率发生器使用,以确定串行通信的速率。因为已没有计数溢出标志位TF1可供使用,因此只能把计数溢出直接送给

30、串行口。当作为波特率发生器使用时,只需设置好工作方式,便可自动运行。如要停止工作,只需送入一个把它设置为方式3的方式控制字就可以了。因为定时器/计数器1不能在方式3下使用,如果硬把它设置为方式3,则停止工作。,TL1,36,6.2.3 定时器/计数器对输入信号的要求 定时器/计数器的作用是用来精确地确定某一段时间间隔(作为定时器用)或累计外部输入的脉冲个数(作为计数器用)。当用作为定时器时,在其输入端输入周期固定的脉冲,根据定时器/计数器中累计(或事先设定)的周期固定的脉冲个数,即可计算出所定时间的长度。当80C5l内部的定时器/计数器被选定为定时器工作模式时,计数输入信号是内部时钟脉冲,每个

31、机器周期产生一个脉冲位,计数器增l,因此定时器/计数器的输入脉冲的周期与机器周期一样,为时钟振荡频率的l/12。当采用12MHz频率的晶体时,计数速率为1MHz,输入脉冲的周期间隔为1us。由于定时的精度决定于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶振。,37,当定时器/计数器用作计数器时,计数脉冲来自外部输入引脚T0或T1。当输入信号产生由1至0的跳变(即负跳变)时,计数器的值增l。每个机器周期的S5P2期间,对外部输入进行采样。如在第一个周期中采得的值为1,而在下一个周期中采得的值为0,则在紧跟着的再下一个周期S3P1的期间,计数器加1。由于确认一次下跳变需要花2

32、个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为振荡器频率的1/24,对于外部输入信号的占空比并没有什么限制,但为了确保某一给定的电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。故对输入信号的基本要求如图7所示,图中Tcy为机器周期。,图7 对输入信号的基本要求,38,6.2.4 定时器/计数器0、1的编程和应用实例 1.定时器/计数器的初始化编程 因为80C51单片机的定时器/计数器能定时、计数,具有4种工作方式。因此,在使用定时器/计数器前必须对其进行初始化,即设置其工作方式。初始化一般应进行如下工作:(1)设置工作方式,即设置TMOD中的各位:GATE、C/

33、、M1M0。,(2)计算加1计数器的计数初值Count,并将计数初值 Count送入TH、TL中。(3)启动计数器工作,即将TR置1。(4)若采用中断方式则T0、T1及CPU开中断。,39,图8 定时器/计数器初始化流程图,40,2.计算计数初值Count1)计数方式假设T0工作于计数方式1,计数值x=1,是指每当T0引脚输入一个计数脉冲就使加1计数器产生溢出,通常可以使用这种方法扩展外中断。显然,为了使加1计数器每加一次1就溢出,加1计数器的初值Count=0FFFFH=216-1,其中16为工作方式1时加1计数器的位数,1为计数值x。现用n表示加1计数器的位数,用x表示计数值,则计数初值C

34、ount=2n-x式中,n=13、16、8、8分别对应工作方式0、1、2、3。【例】定时器/计数器T0工作于计数方式,计数值x=1,允许中断,分别使用:(1)工作方式1;(2)工作方式0;(3)工作方式2。用C程序进行初始化编程。,41,解:由于T0工作于计数方式,从而C/=1,GATE=0。,(1)T0工作于方式1,所以M1M0=01。T1不用,TMOD的高4位取0000,则TMOD=00000101=05H,计数器位数n=16。计数器初值Count=216-1=1111111111111111=0FFFFH。初始化程序如下:TMOD=0 x05;/*设置T0工作计数方式1*/TH0=0 x

35、ff;/*加1计数器高8位TH0赋初值FFH*/TL0=0 xff;/*加1计数器低8位TL0赋初值FFH*/TR0=1;/*打开T0启动开关*/ET0=1;/*T0开中断*/EA=1;/*CPU开中断*/,42,(2)T0工作于方式0,所以M1M0=00。TMOD=04H。计数器位数n=13。计数器初值Count=213-1=1111111111111,高8位FFH存放在TH0中,低5位1FH存放在TL0中。初始化程序如下:TMOD=0 x04;TH0=0 xff;TL0=0 x1f;其余指令与(1)相同。(3)T0工作于方式2,所以M1M0=10。TMOD=06H,n=8。计数器初值Cou

36、nt=28-1=11111111=0FFH,由于方式2是8位重装方式,所以计数初值FFH存放在计数器TL0中,8位重装值FFH存放在TH0中。初始化程序如下:TMOD=0 x06;TH0=0 xff;TL0=0 xff;其余指令与(1)相同。,43,2)定时方式 若系统主频fosc=6MHz,则机器周期为2us,即计数器加一次1所用时间为2us,若计数器加100次产生溢出(计数值N=100),则定时时间为200us。由此得知:定时器的定时时间(200us)为计数值(100)与加一次1所用时间(2us)的乘积。因为计数值N=2n-Count,加一次1所用时间为机器周期,所以定时时间:Td=(2n

37、-Count)Tcy因此,计数初值Count=2n-Td/Tcy式中,n=13、16、8、8分别对应方式0、1、2、3。,44,解:由于T0工作于定时方式,从而,GATE=0。,T0工作于方式1,所以M1M0=01。T1不用,TMOD=00000001=01H。系统主频fosc=8MHz时,时钟周期Tcp=1/8us,Tcy=12Tcp=12/8=1.5us。计数初值Count=216-2000/1.5=10000H-535H=FACBH,初始化程序如下:TMOD=0 x01;/*设置T0为定时方式1*/TH0=0 xfa;TL0=0 xcb;TR0=1;ET0=1;EA=1;,【例】T0工作

38、于定时方式1,定时时间Td=2ms,系统主频fosc=8MHz,允许中断,对T0进行初始化编程。,45,【例】T1工作于定时方式2,定时时间为500s,系统主频f=6MHz,关中断。对T1进行初始化编程。解:由于T1工作于定时方式,从而,GATE=0。,T1工作方式2,所以M1M0=10。T0不用,TMOD=00100000=20H。系统主频fosc=6MHz时,时钟周期Tcp=1/6ms,Tcy=12Tcp=12/6=2us。Count=28-500/2=256-250=06H TMOD=0 x20;/*设置T1为定时方式2*/TL1=0 x06;/*计数器TL1赋初值06H*/TH1=0

39、x06;/*重装寄存器TH1赋初值06H*/ET1=0;/*T1关中断*/TR1=1;/*启动T1*/,46,3.定时器/计数器中断的应用实例【例】设单片机的fosc=12 MHz,要求在P1.0脚上输出周期为2ms的方波。解:周期为2ms的方波要求定时间隔1 ms,每次时间到P1.0取反。定时器计数率为 fosc/12,Tcy=12/fosc=1 s。每个机器周期定时器计数加1,1 ms=1000 s,需计数次数为1000/(12/fosc)=1000/1=1000。由于计数器向上计数,为得到l000个计数之后的定时器溢出,必须给定时器赋初值65536-1000,C语言中相当于-1000。,

40、47,1)用定时器1的方式1编程,采用查询方式#include sbit rect_wave=P10;/*方波由P1.0口输出*/void time1over(void);/*计数器计数时间到子程序*/void main(void)TMOD=0 x10;/*设置定时器/计数器1为工作方式1*/TH1=-1000/256;/*设置计数初值高字节*/TL1=-1000%256;/*设置计数初值低字节*/IE=0 x00;/*禁止中断*/TR1=1;/*启动定时*/for(;)if(TF1)time1over();/*查询计数溢出*/void time1over(void)TH1=-1000/256

41、;/*设置计数初值高字节*/TL1=-1000%256;/*设置计数初值低字节*/TF1=0;/*计数溢出标志位清0*/rect_wave=!rect_wave;/*输出取反*/,48,2)用定时器1的方式1编程,采用中断方式#include sbit rect_wave=P10;/*方波由P1.0口输出*/void main(void)TMOD=0 x10;/*设置定时器/计数器1为工作方式1*/TH1=-1000/256;/*设置计数初值高字节*/TL1=-1000%256;/*设置计数初值低字节*/TR1=1;/*启动定时*/ET1=1;EA=1;for(;);/while(1);/*等

42、待中断*/*定时器1中断服务程序*/void timer1()interrupt 3 TH1=-1000/256;/*设置计数初值高字节*/TL1=-1000%256;/*设置计数初值低字节*/rect_wave=!rect_wave;/*输出取反*/,49,4.采用定时器/计数器扩展外部中断 尽管80C51为用户只提供了两个外部中断源,但用户可以根据实际需求,进行多于两个外部中断请求的扩展,其中有很多扩展方法,如6.1.4节(优先编码器)的例子。在此重点介绍利用定时器中断作为外部中断的扩展。80C51有两个定时器/计数器T0、T1,若选择它们以计数器方式工作,当引脚T0或T1上发生负跳变时,

43、T0或T1计数器则加1。利用这个特性,借用引脚T0或T1作为外部中断请求输入线,若设定计数初值为满量程,计数器加1,就会产生溢出中断请求,TF0或TF1变成了外部中断请求标志位,T0或T1的中断入口地址被扩展成了外部中断源的入口地址。值得注意的是当使用定时器作为外部中断时,定时器以前的功能将失效,除非用软件对它进行复用。,50,将定时器T0引脚作为外部中断源使用的具体做法为,设定相应定时器工作方式为方式2,计数器TH0、TL0初值为0FFH,允许计数器T0中断,则T0的初始始化程序如下:MOV TMOD,06H;将计数器T0设定为方式2外 部计数工作 MOV TL0,#0FFH;设置计数器初值

44、 MOV TH0,#0FFH;设置重装计数器初值 SETB ET0;允许T0中断 SETB EA;开中断 SETB TR0;启动T0,51,以下为利用C51实现两个定时器中断,全部作为外部中断的程序代码。#include void main(void)TMOD=0 x66;/*两个定时器/计数器都设置成8位模 式,外部计数模式*/TH1=0 xFF;/*设定重装值,TL1不用设置*/TH0=0 xFF;/*设定重装值,TL0不用设置*/TCON=0 x50;/*开始计数TR0、TR1置1*/IE=0 x9F;/*中断使能1001 1111允许所有中断*/*定时器0 中断服务程序*/void t

45、imer0_int(void)interrupt 1 TF0=0;/*计数溢出标志位清0*/*定时器1 中断服务程序*/void timer 1 _int(void)interrupt 3 TF1=0;/*计数溢出标志位清0*/,52,6.3 串行通信6.3.1 串行通信基础知识1.数据通信的传输方式常用于数据通信的传输方式有单工、半双工、全双工方式。单工方式:数据仅按一个固定方向传送。因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集。半双工方式:数据可实现双向传送,但不能同时进行,实际的应用采用某种协议实现收/发开关转换。全双工方式:允许双方同时进行数据双向传送,

46、但一般全双工传输方式的线路和设备较复杂。,单工 半双工 全双工,53,2.并行通信和串行通信方式所谓通信是指计算机与计算机或外设之间的数据传送,所传输的信息是由数字1和0构成的具有一定规则并反映确定信息的一个数据或一批数据。这种数据传输有两种基本方式,即并行通信和串行通信。并行通信比较简单,根据CPU字长和总线特点以及外设数据口的宽度可分为不同位数(宽度)的并行通信,如8位并行通信、16位并行通信等。并行通信的特点是数据的每位被同时传输出去或接收进来。与并行通信不同,串行通信其数据传输是逐位传输的,因此在相同条件下,比并行通信传输速度慢。,54,并行通信通常是将数据字节的各位用多条数据线同时进

47、行传送。,并行通信控制简单、传输速度快;但传输线较多,长距离传送时成本高。,55,串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。,串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送速度比并行通信慢。,56,3.异步串行通信和同步串行通信异步串行通信所传输的数据格式由1个起始位、7个或8个数据位、12个停止位和1个校验位组成(也称为串行帧)。起始位约定为0,空闲位约定为1。在异步通信方式中,接收器和发送器有各自的时钟,它们的工作是非同步的。,57,异步通信的实质是指通信双方采用独立的时钟,每个数据均以起始位开始,停止位结束,起始位触发甲乙双

48、方同步时钟。每个异步串行帧中的1位彼此严格同步,位周期相同。所谓异步是指发送、接收双方的数据帧与帧之间不要求同步,也不必同步。,58,异步通信的数据格式:,异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加23位用于起止位,各帧之间还有间隔,因此传输效率不高。,59,同步串行通信,发送器和接收器由同一个时钟源控制。同步传输方式去掉了起始位和停止位,只在传输数据块时先送出一个同步头(字符)标志即可。,同步传输方式比异步传输方式速度快,这是它的优势。但是同步传输必须用一个时钟来协调收发器的工作,所以它的设备也较复杂。,60,4.波特率及时钟频率波特率是串行通信中

49、一个重要概念。波特率BR是单位时间传输的数据位数,即单位:bps(bit per second)1bps=1bit/s。波特率的倒数即为每位传输所需的时间。由上面介绍的异步串行通信原理可知,互相通信甲乙双方必须具有相同的波特率,否则无法成功地完成数据通信。发送/接收时钟频率与波特率有关,即fT/R=nBRT/R式中,fT/R为发/收时钟频率,单位:Hz;BRT/R为发/收波特率,单位:bps;n为波特率因子。同步通信n=1。异步通信n可取1、16或64。也就是说,同步通信中数据传输的波特率即为同步时钟频率;而异步通信中,时钟频率可为波特率的整数倍。,61,5.串行通信的校验异步通信时可能会出现

50、帧格式错、超时错等传输错误。在具有串行口的单片机的开发中,应考虑在通信过程中对数据差错进行校验,因为差错校验是保证准确无误通信的关键。常用差错校验方法有奇偶校验(80C51系列单片机编程采用此法)、和校验及循环冗余码校验。1)奇偶校验在发送数据时,数据位尾随的一位数据为奇偶校验位(1或0)。当设置为奇校验时,数据中1的个数与校验位1的个数之和应为奇数;当设置为偶校验时,数据中1的个数与校验位中1的个数之和应为偶数。接收时,接收方应具有与发送方一致的差错检验设置,当接收一个字符时,对1的个数进行校验,若二者不一致,则说明数据传送出现了差错。奇偶校验是按字符校验,数据传输速度将受到影响。这种特点使

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号