第七章-单片机内资源编程.doc

上传人:小飞机 文档编号:4228367 上传时间:2023-04-10 格式:DOC 页数:26 大小:789KB
返回 下载 相关 举报
第七章-单片机内资源编程.doc_第1页
第1页 / 共26页
第七章-单片机内资源编程.doc_第2页
第2页 / 共26页
第七章-单片机内资源编程.doc_第3页
第3页 / 共26页
第七章-单片机内资源编程.doc_第4页
第4页 / 共26页
第七章-单片机内资源编程.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《第七章-单片机内资源编程.doc》由会员分享,可在线阅读,更多相关《第七章-单片机内资源编程.doc(26页珍藏版)》请在三一办公上搜索。

1、第七章 单片机内资源编程7.1外部中断7.1.1中断的概述中断是处理器(一般是我们常说的CPU)处理外部突发事件的一个重要技术。它能使处理器在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行处理器原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断两类。对于单片机来说,中断是单片机的一个重要功能之一,是学习单片机必须掌握的一个知识点。 51单片机有五个中断源,即有五种情况发生时单片机会产生中断。为了助于大家理解中断这个概念,我们举个生活中的例子。你烧上一

2、壶水,然后去洗衣服,洗衣过程中忽然听到水开了的壶哨声,你要先停下洗衣服的动作去关火,然后把水放在暖壶中,灌完开水后还要接着去洗衣服。这个停下一件事去干另一件事的过程就是一次中断的发生过程,其流程图如图7-2所示。因为CPU在一个时间内只能处理一件事,对于单片机来讲, CPU在执行A时间时,应中断源要求(中断发生)CPU停止当前工作(中断响应)去执行B事件(中断服务),待B执行完后接着返回执行A事件(中断返回)这一过程称为中断,其流程图如图7-1所示。图7-1单片机中断过程 图7-2生活中的中断事例 再回来看前面讲的生活事例,与单片机中断结合分析,你的主任务是洗衣服,水开报警这是一个中断请求,这

3、一时刻相当于断点处,你响应中断去关火,然后将开水灌入暖水瓶中,这一动作实际上就是处理中断程序,灌完开水后再回去继续洗衣服,相当于处理完中断程序后再返回主程序继续执行主程序。这里需要注意的是,水开是随时都有可能的,但是无论什么时候开,只要一开你将立即去处理它,处理完后再回来继续接着洗刚才那件衣服。单片机在执行程序时,中断也随时有可能发生,但无论何时发生,只要一旦发生,单片机将立即暂停当前程序,赶去处理中断程序,处理完中断程序后再返回刚才暂停处接着执行原来的程序。单片机在执行程序时其程序流程图如图7-3 图7-3单片机中断程序流程图引起CPU中断的根源,称为中断源,中断源向CPU提出中断请求,CP

4、U暂时中断原来的事务A,转去处理事件B,对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。中断的开启与关闭、设置启用哪一个中断等都是由单片机内部的一些特殊功能寄存器来决定的,在以前的学习中我们仅对单片机内部的特殊功能寄存器I/O口寄存器设置过,从下一节起我们将会设置单片机内部更多的特殊功能寄存器。与中断有关的知识点还有一个叫中断嵌套,意思是说:如果单片机正在处理一个中断程序,此时,又有另一个中断现象发生,单片机将会停止当前的中断程序,而转去执行新的中断程序,新中断程序处理完毕后再回到刚才停止的中断程序处继续执行,执行完这个中断后

5、再返回主程序继续执行主程序,流程图如图7-4所示 图7-4 单片机中断嵌套当涉及中断时,还有一个很重要的关键词中断优先级。假如你在洗衣服的时候,突然水开了,同时电话也响起了,接下来你只能去处理一件事,那你该处理哪件事呢?你将会根据自己的实际情况来选择其中一件更重要的事先处理,在这里,你认为更重要的事就是优先级较高的事情。单片机在执行程序时同样也会遇到类似的状况,即同一时刻发生了两个中断,那么单片机该先执行哪个中断呢?这取决于单片机内部的一个特殊功能寄存器中断优先级寄存器的设置情况,通过设置中断优先级寄存器,我们可以告诉单片机,当两个中断同时出现时先执行哪个中断程序。若没有人为操作优先级寄存器,

6、单片机会按照默认的1套优先级自动处理,我们在具体使用时详细讲解。7.1.2 中断的配置工欲善其事,必先利其器。单片机(CPU)要完成中断必须有些硬件,我们买电脑时经常会问“这电脑的配置怎么样?”这里我们对单片机处理中断的功能引入了“中断配置”的概念。当涉及中断时,还有一个很重要的关键词中断优先级。假如你在洗衣服的时候,突然水开了,同时电话也响起了,接下来你只能去处理一件事,那你该处理哪件事呢?你将会根据自己的实际情况来选择其中一件更重要的事先处理,在这里,你认为更重要的事就是优先级较高的事情。单片机在执行程序时同样也会遇到类似的状况,即同一时刻发生了两个中断,那么单片机该先执行哪个中断呢?这取

7、决于单片机内部的一个特殊功能寄存器中断优先级寄存器的设置情况,通过设置中断优先级寄存器,我们可以告诉单片机,当两个中断同时出现时先执行哪个中断程序。若没有人为操作优先级寄存器,单片机会按照默认的一套优先级自动处理,我们在具体使用时详细讲解。52单片机一共有6个中断源,它们的符号、名称及产生的条件分别解释如下:INT0一外部中断0,由P3.2端口线引入,低电平或下降沿引起。INTl一外部中断l,由P3.3端口线引入,低电平或下降沿引起。T0定时器/计数器0中断,由T0计数器计满回零引起。Tl一定时器/计数器1中断,由Tl比数器计满回零引起。T2一定时器/计数器2中断,由T2计数器计满回零引起。T

8、1/Rl一串行口中断,串行端口完成一帧字符发送/接收后引起。以上6个中断源中,T2是52单片机特有的。它们默认的中断级别如表7-1所示 表7-1 52单片机中断配置中断源默认中端级别序号(C语言用)外部中断第一0定时器/计数器中断第二1外部中断第三2定时器/计数器中断第四3串行口中断 第五42定时器/计数器2中断第六5 单片机在使用中断功能时,通常需要设置两个与中断有关的寄存器:中断允许寄存器IE和中断优先级寄存器IP。知识点1:中断允许寄存器IE中断允许寄存器用来设定各个中断源的打开和关闭,IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分另J是A8H一八FH,该寄存器可进行

9、位寻址,即可对该寄存器的每一位进行单独操作。单片机复位时1E全部被清0,各位定义见表7-2 表7-2 中断允许寄存器IE位序号D7D6D5D4D3D2D1D0位符号EAET2ESET1EX1ET 0EX 0位地址AFHADH ACH ABH AAH A9HA8H EA全局中断允许位Ea=1,打开全局中断控制在此条件下,由各个中断控制位确定相应中断的打开或关闭EA=0,关闭全部中断。无效位。在此条件下,由各个中断控制位确定相应中断的打开或关闭ET2定时器计数器2中断允许位。ET2=1,打开T2中断。ET2=0,关闭T2中断。ES串行口中断允许位。ES=1,打开串行口中断。ES=0,关闭串行口中断

10、。ET1定时器计数器1中断允许位。ET1=1,打开T1中断。ET1=0,关闭Tl中断。EX1一外部中断1中断允许位。EX1=1, 打开外部中断1中断。EX1=0,关闭外部中断1中断。ET0一定时器/计数器0中断允许位。ET0=1,打开T0中断。ET0=0,关闭T0中断。EX0外部中断0 中断允许位。EX0=1,打开外部中断0中断。EX0=0,关闭外部中断0中断。知识点2:中断优先级寄存器IP中断优先级寄存器在特殊功能寄存器中,字节地址为B8H,位地址(由地位到高位)分别是B8HBFH,IP用来设定各个中断源属于两级终端中的哪一级,该寄存器可进行位寻址,即可对该寄存器的每一位进行单独操作,单片机

11、复位时全部被清,各位定义见表-3 表 7-3 中断允许寄存器IP位序号D7D6D5D4D3D2D1D0位符号PSPT1PX1PT 0PX0位地址 BCH BBH BAH B9HP8H PS=1,串行中断定义为高优先级中断。PS=0,串行口中断定义为低优先级中断。PT1一定时器7计数器1中断优先级控制位。PTl=1,定时器/计数器1中断定义为高优先级中断。PTl=0,定时器/计数器1中断定义为低优先级中断。PX1外部中断1中断优先级控制位。PX1=1,中断1定义为高优先级中断。PXl=0,外部中断1定义为低优先级中断。PT0定时器/计数器0中断优先级控制位。PT0=1,定时器/计数器0中断定义为

12、高优先级中断。PT0=0,定时器/计数器0中断定义为低优先级中断。PX0外部中断0中断优先级控制位。PX0=1,外部中断0定义为高优先级中断。PX0=0,外部中断0定义为低优先级中断。在51单片机系列中,高优先级中断能够打断低优先级中断以形成中断嵌套,同优先级中断之间,或低级对高级中断则不能形成中断嵌套。若几个同级中断同时向CPU请求中断响应,在没有设置中断优先级情况下,按照默认中断级别响应中断,在设置中断优先级后,则按设置顺序确定响应的先后顺序。7.2 定时器计数器定时器/计数器是单片机非常重要的概念,生活中我们会制定一些计划,即特定的时间干特定的事,我们也希望可以控制单片机,让它在特定的时

13、间执行特定的程序,这里我们就用到了定时器/计数器。7.2.1计数器 定时器计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMODTMOD:选择定时器/计数器T0、T1的工作模式和工作方式。TCON:控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。单片机复位时,两个寄存器的所有位都被清0。 工作方式控制寄存器TMOD的8位分为两组,高4位控制定时器1(T1),低4位控制定时器0(T0)。其各位定义如表7-4 表7-4定时器、计数器工作方式寄存器TMOD各位解释如下:(1)GATE门控位 0:以TRX(X=0,1)来启动定时器/计数器运行。1:用外中断引脚(INT

14、0*或INT1*)上的高电平和TRX来启动定时器/计数器运行。(2)M1、M0工作方式选择位如表7-5 表7-5 定时器/计数器方式选择 (3) C/T计数器模式和定时器模式选择位0:定时器模式。 1:计数器模式。 计数器的功能是对外来脉冲信号计数,52单片机有T0(P3.4)和T1(P3.5)和T2(P1.0)三个输入引脚,分别是这个计数器的计数脉冲输入端,在设置计数器工作状态时,每当外部输入的脉冲发生负跳变计数器加一,直到加满溢出,向CPU申请中断,依次重复。虽然单片机具有外来脉冲技术功能,但并不是说任意脉冲的脉冲都可以直接计数单片机的晶振频率限制了所测计数脉冲的最高频率。当定时器计数器设

15、定为计数器时,计数脉冲来自相应的外部输入引脚T0(P3.4)和T1(P3.5)和T2(P1.0)。当输入信号产生有1到0的负跳变时计数器的值加1。每个机器周期的S5P2期间,对外部输入引脚进行采样。如在第一个机器周期中采用的值为1而在下一个周期中采得的值为0则在紧跟着的再下一个机器周期S3P1期间,计数器加1。由于确认一次负跳变需要花两个机器周期,即24个振荡周期,因此外部输入计数脉冲的最高频率为振荡频率的1/24。例如,选用6MHz频率的晶振,允许输入的外部脉冲的最高频率为250kHZ,如果选用12MHZ频率晶振,则最高可输入500kHZ的外部脉冲。对于外部输入脉冲的占空比也有一定的限制,为

16、了确保某一给定的电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。7.2.2 定时器生活中我们会经常安排一些计划,到了一定的时间就去执行,单片机也有类似的功能,这里我们提出了定时器/计数器的概念。51单片机内部共有两个16位可编程的定时器/计数器,即定时器T0和定时器T1。它们既有定时功能又有计数功能,通过设置与它们相关的特殊功能寄存器可以选择启用定时功能或计数功能。需要注意的是,这个定时器系统是单片机内部一个独立的硬件部分,它与CPU和晶振通过内部某些控制线连接并相互作用,CPU一旦设置开启定时功能后,定时器便在晶振的作用下自动开始计时,当定时器的计数器计满后,可以通过软件控制产

17、生中断,即通知做些处理。结合生活事例,以烧开水为例,也就是说,当你打开火时,就注定不久就会响起水开的警报,这时你必定需要对该警报做出处理。烧开水是独立运行的一件事,但通过你打开火或者听到警报声来处理它。 定时器/计数器控制寄存器TCON为8位。各位定义如表7-6; 表7-6 定时器/计数器控制寄存器TCON高4位的功能如下:TF1定时器1溢出标志位。当定时器1计满溢出时,由硬件使TFI置1,并且申请中断。进入中断服务程序后,由硬件自动清0。需要注意的是,如果使用定时器的中断,那么该位完全不用人为去操作,但是如果使用软件查询方式的话,当查询到该位置1后,就需要用软件清0。TR1定时器1运行控制位

18、。由软件清0关闭定时器1。当GATE=1,且INTl为高电平时,TRl置1启动定时器1;当GATE=0时,TRl置1启动定时器l。TF0定时器0溢出标志,其功能及操作方法同TFl。TR0定时器0运行控制位,其功能及操作方法同TRl。 E1外部中断1请求标志。当IT1=0时,为电平触发方式,每个机器周期的S5P2采样INTl引脚,若INTl脚为低电平,则置1,否则IEl清0。当ITl=1时,INTl为跳变沿触发方式,当第一个机器周期采样到lNTl为低电平时,则IEl置1。IEl=1,表示外部中断1正在向CPU申请中断。当CPU响应中断,转向中断服务程序时,该位由硬件清0。ITl外部中断1触发方式

19、选择位。ITl=0,为电平触发方式,引脚INTl上低电平有效。ITl=1,为跳变沿触发方式,引脚INTl上的电平从高到低的负跳变有效。IE0外部中断0请求标志,其功能及操作方法同IEl。IT0外部中断0触发方式选择位,其功能及操作方法同ITl。咱们以工作方式1(即M0=M=)为例,工作方式1的计数位数是16位,对T0来说,由TL0寄存器作为低8位、TH0寄存器作为高8位,组成了16位加1计数器,其逻辑结构框图如图7-5所示。 图 7-5 定时器0方式1逻辑结构图2、工作方式11)逻辑电路结构工作方式1是16位计数结构的工作方式,计数器由THO全部8位和TLO全部8位构成。其逻辑电路和1作情况与

20、方式0基本相同,如图7.13所示(以定时/计数器O为例)。所不同的只是组成计数器的位数,它比工作作方式0有更宽的计数范围,因此,在实际中应用更广泛。定时/计数器0在工作方式1的逻辑结构如7-6图所示 图 7-6 工作方式1逻辑电路图 应用中,工作方式1可以代替工作方式0。2) 计数初值的计算定时器一旦启动,它便在原来的数值上开始加1计数,若在程序开始时,我们没有设置TH0和TL0,它们的默认值都是0,假设时钟频率为l2MHz.12个时钟周期为一个机器周期,那么此时机器周期就是1s以,计满TH0和TL0就需要216-1个数,再来一个脉冲计数器溢出,随即向CPU申请中断。因此溢出一次共需65536

21、s,约等于65.5ms.如果我们要定时50ms的话,那么就需要先给TH0和TL0装一个初值,在这个初值的基础上计50000个数后,定时器溢出,此时刚好就是50ms中断一次,当需定时ls时,我们写程序时当产生20次50ms的定时器中断后便认为是ls,这样便可精确控制定时时间了。要计50000个数时,TH0和TL0中应该装入的总数是65536-50000=15536, 把15536对256求模:15536/256=60装入TH0中,把15536对256求余:15536%256=176装入TL0中。以上就是定时器初值的计算方法,总结后得出如下结论:当用定时器的方式1时,设机器周期为Tcy,定时器产生

22、次中断的时间为t,那么需要计数的个数N=T/cy装入THX和TLX中的数分别为THX=(65536-N)/256 TLX=(65536-N)%256 要计算机器周期Tcy,就需要知道系统时钟频率,也就是单片机的晶振频率,TX-lC实验板上时钟频率为11.0592MHz,那么机器周期为12(1/11059200) 1.09s,若t=50ms,那么N=50000/.0945872,这是晶振在11.0592MHz下定时50ms时初值的计算方法,当晶振为l2MHz时,计算起来就比较方便了,用同样方法可算得N=50000.3)由于I作方式1是16位计数结构,因此,其最大计数为216=65536,也就是说

23、,每次计数到65536都会产生溢出,去置位TF0。如果计数初值为X,则可按以下公式计算定时时间: 定时时间=(216-X)机器周期工作方式21)逻辑电路结构工作方式0和工作方式1若用于循环重复定时或计数时,每次计满溢出后,计数器回到0,要进行新一轮的计数,就得重新装人计数初值。因此,循环定时或循环计数应用时就存在反复设置计数初值的问题,这项工作是由软件来完成的,需要花费一定时间。这样就会造成每次计数或定时产生误差。如果用于一般的定时,则是无关紧要的。但是有些工作,对时间的要求非常严格,不允许定时时间不断变化,用工作方式0和工作方式1就不行了,所以就引人了工作方式2。定时/计数器0在工作方式2的

24、逻辑结构如7-7图所示. 图 7-7 工作方式2逻辑电路图在工作方式2下,把16位计数器分为两部分,即以TL0作为计数器,以TH0作为预置寄存器,初始化时把计数初值分别装人TL0和TH0中。当计数溢出后,不是像前两种工作方式那样通过软件方法,而是由预置寄存器TH0以硬件方法自动给计数器TL0重新加载。变软件加载为硬件加载。这不但省去了用户程序中的重装指令,而且也有利于提高定时精度。 计数初值的计算 由于工作方式2 是8位计数结构,因此,其最大计数值为28=256,计数值十分有限。如果计数初值为X,则按下面公式计算定时时间: 定时时间=(28-X)*机器周期工作方式31)逻辑电路结构工作方式3的

25、作用比较特殊,只适用于定时器T0。如果企图将定时器Tl置为1作方式3,则它将停止计数,其效果与置TKl =0相同,即关闭定时器Tl。当T0在工作方式3时,它被拆成两个独立的8位计数器TL0和TH0,其逻辑结构如图7-8所示。 图 7-8 工作方式3 逻辑电路图图6-10中,上方的8位计数器TL0使用原定时器T0的控制位C/T、GATE、TR0和INT0(),TL0既可以计数使用,又可以定时使用,其功能和操作与前面介绍的工作方式0工作方式1完全相同。 下方的TH0只能作为简单的定时器使用。而且由于定时/计数器0的控制位已被TL0独占,因此只好借用定时器/计数器1的控制位TRl和TFl。即以计数溢

26、出去置位TFl,而定时的启动和停止则受TRl的状态控制。 由于TL0既能作为定时器使用也能作为计数器使用,而TH0只能作为定时器使用却不能作为计数器使用,因此在工作方式3下,定时/计数器0可以构成两个定时器或一个定时器一个计数器。分析上面的逻辑图,当GATE=0,TR0=1时,TL0便在机器周期的作用下开始加1计数,当TL0计满后向TH0进一位,直到把TH0也计满,此时计数器溢出,置TF0为1,接着向CPU申请中断,接下来CPU进行中断处理。在这种情况下,只要TR0为1,那么计数就不会停止。这就是定时器0的工作方式1的工作过程,其他8位定时器、13位定时器的工作方式都大同小异,C51的中断函数

27、格式如下:void函数名0 intermpt中断号using工作组 中断服务程序内容中断函数不能返回任何值,所以最前面用void;后面紧跟函数名,名字可以随便起,但不要与C语言中的关键字相同;中断函数不带任何参数,所以函数名后面的小括号内为空中断号是指单片机中几个中断源的序号,请查看3,4节讲解中断时的表3.4.1。这个序号是编译器识别不同中断的唯一符号,因此在写中断服务程序时务必要写正确;最后面的“using工作组”是指这个中断函数使用单片机内存中4组工作寄存器中的哪一组,C51编译器在编译程序时会自动分配工作组,因此最后这句话我们通常省略不写,但大家以后若遇到这样的程序代码时要知道是什么意

28、思。一个简单中断服务程序写法如下: Void T1_time()interrupt 3 TH1=(65536-10000)/256 TL1=(65536-10000)%256上面这个代码是一个定时器1的中断服务程序,定时器1的中断序号是3因此我们要写成interrupt3,服务程序的内容是给两个初值七寸器装入新值。在写单片机的定时器程序时。在程序开始处需要对定时器及中断寄存器做初始化设置,通常定时器初始化过程如下: 1、对TMOD赋值,以确定T0和TI的工作方式。2、计算初值,并将初值写入TH0或TH1。3、中断方式时,则对IE赋值,开放中断。4、使TR0或TR1置位,启动定时器/计数器定时或

29、计数。 下面我们通过两个实例 来讲解定时器0和定时器1 方式1的具体用法。 【例7.2.2】利用定时器0工作方式1,在实验板上实现第一个发光管以一秒亮灭闪烁。 #include/52系列单片机头文件#define uchar unsigned char#define uint unsigned intSbit led 1=P10;Uchar num;Void main()TMOD=0x01;/设置定时器0为工作方式1(M1M0为01)TH0=(65536-45872)/256;/装初值11.0592M晶振定时50ms数为45872TL0=(65536-45872)%256;EA=1;/开总中断

30、ET0=1;/开定时器0中断TR0=1;/启动定时器0While(1);/程序停止在这里等待中断发生Void T0_time()interrupt 1TH0=(65536-45872)/256;/重装初值TH0=(65536-45872)%256;Num+;/num每加1次判断一次是否到20次If(num=20)/如果到了20次,说明1秒时间到Num=0;/然后把num清0重新再计20次Led1=led1;/让发光管状态取反编译程序下载到实验板,我们可以看到实验板上第一个发光管以1s间隔闪动。分析:进入主程序后,首先是对定时器和中断有关的寄存器初始化,我们按照上面讲到的通常的初始化过程来操作。

31、定时50ms的初值我们在前面已讲过为45872。启动定时器后主程序停止在while(1)处,这里通常有很多人会有疑问:程序都停止在这里了,那么这个中断程序何时执行呢?主程序既然停止了为什么发光管却在闪烁呢?解释如下:一旦开启定时器,定时器便开始计数,当计数溢出时,自动进入中断服务程序执行代码,执行完中断程序后再回到原来处继续执行,也就是继续等待。就相当于你一旦打开火烧上开水后,不管你是洗衣服还是洗袜子,过一会儿水都会开,那么你就要停止当前活去处理开水问题,处理完后再回来继续洗你的衣服或是袜子。为了确保定时器的每次中断都是50ms,我们需要在中断函数中每次为TH0和TL0重新装入初值,因为每进入

32、一次中断需要时间50ms,在中断程序中做一判断是否进入了20次,也就是判断时间是否到了ls,若时间到则执行相应动作。注意:一般我们在中断服务程序中不要写过多的处理语句,因为如果语句过多,中断服务程序中的代码还未执行完毕,而下一次中断又来临,这样我们就会丢失这次中断,当单片机循环执行代码时,这种丢失累积出现,程序便完全乱套。一般我们遵循的原则是:能在主程序中完成的功能就不在中断函数中写,若非要在中断函数中实现功能,那么一定要高效、简洁。这样一来,例【7.2.2】中的20次判断我们就可写在主程序中,实现如下 While(1)处改为 While(1) If (num=2) /如果到了20次,说明1秒

33、时间到了Num=0; num清零重新在计算20次Led=led1;让发光管状态取反中断程序改为Void T0_time()interrupt 1TH0=(65536-45872)/256;/重装初值TH0=(65536-45872)%256;7.3串口通信7.3.1什么是串口通信 串口是计算机上一种非常通用设备通信的协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接

34、收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配: a,波特率:这是一个

35、衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是01

36、27(7位)。扩展的ASCII码是0255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简

37、单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。 串口是计算机上一种非常通用设备通信的协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPI

38、B兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。7.3.2串口通信的配置 上一节我们认识了串口通信,下面我们看看电脑、单片机是依靠什么实现串口通信的。大多数计算机、包含两个基于RS232的串口如图7-9图7-9 RS232串口实物图如下表7-7 是 RS232各引脚定义 表7-7 RS-232标准接口主要引脚定义 RS232-C接口连接器一般使用型号为DB-9的9芯插头座,只需3条接口线,即发送数据、接收数据和信号地即可传输数据在RS232的规范中,电压值在+3V+15V(一般使用+6V)称为0或ON。电压在-3V-15V(一般使用-6V)称为1或OFF;

39、计算机上的RS232高电位约为9V,而低电位则约为-9V。6、采用RS-232C接口存在的问题1、传输距离短,传输速率低 RS-232C总线标准受电容允许值的约束,使用时传输距离一般不要超过15米(线路条件好时也不超过几十米)。最高传送速率为20Kbps。2、有电平偏移 RS-232C总线标准要求收发双方共地。通信距离较大时,收发双方的地电位差别较大,在信号地上将有比较大的地电流并产生压降。3、抗干扰能力差 RS-232C在电平转换时采用单端输入输出,在传输过程中当干扰和噪声混在正常的信号中。为了提高信噪比,RS-232C总线标准不得不采用比较大的电压摆幅。 SCON 是一个特殊功能寄存器,用

40、以设定串行口的工作方式、接收/发送控制以及设置状态标志,如表7-8所示: 表7-8 SCON特殊功能寄存器 SM0和SM1为工作方式选择位,可选择四种工作方式:SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB80时不激活RI,收到的信息丢弃;RB81时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。在方式0时,SM2必须是0。在方式1时,若SM

41、2=1,则只有接收到有效停止位时,RI才置1。REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中该位未用。RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中

42、断服务程序中,必须用软件将其清0,取消此中断申请。RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。PCON中只有一位SMOD与串行口工作有关如表7-9所示 :表7-9 PCON寄存器SMOD(PCON.7) 波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。 7.3.3数据的发送与接受 80C51串行口的工作方式 一、方式0 方式0时,串行口为同步移位寄存器的输入输出方式

43、。主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据。 1、方式0输出如图7-10 图7-10 方式0输出方式0输入如图7-11 图7-11 方式0输入二、方式1 方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。 1、方式1输出如图7-12 图7-12 方式1输出 2、方式1输入如图7-13 图7-13 方式1输入 用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号