版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 MCS-51系列单片机的内部功能模块及其应用 MCS-51系列单片机的典型产品的内部功能模块包括P0、Pl、P2、P3四个双向8位并行口,T0、T1二个16位定时/计数器(52子系列还有第3个定时/计数器T2)和一个串行口。MCS-51系列所有的产品一般都具有这些I/O部件除此以外,一些增强功能的新型5l系列的单片机还有多功能定时器、A/D转换器、实时时钟、I2C 串行BUS口、watchdog等一些功能模块。 6.1 MCS-51单片机内部的并行口MCS-51系列单片机中称为P0、Pl、P2、P3的并行接口,每个接口主要由4部分构成:数据锁存器、输入缓冲器、输出驱动器和接口引脚,每一
2、条I/O都能独立的用作输入或输出,作输入时,数据可以锁存;作输出时,数据可以缓冲。4个接口的功能不完全相同,其内部结构也略有不同,但在作I/O操作方式时,其特性基本相同。如图(a)(d)分别给出了P0、P1、P2、P3口的l位的结构框图。 P0、P1、P2、P3口的l位的结构框图在第2章已详细地介绍了MCS-51单片机的并行I/O端口,下面举个并行接口应用的例子,以加深对并行接口使用的理解。【例例6-1】对例6-1的电路图,单片机的P1.4P1.7接4个发光二极管,P1.0P1.3接4个开关,要求每按键中断一次,发光二极管显示开关状态。图 6-1 例6-1的电路图 要求对应的发光二极管亮或灭,
3、只需把P1端口的内容读入,高、低4位互换,通过P1端口输出即可。汇编语言参考程序为: ORG 0000H LJMP START ORG 0003H LJMP EXT0 ORG 0030H START: SETB EA ;开中断总开关 SETB EX0 ;允许中断 SETB IT0 ;下降沿产生中断 MOV P1,#0FH ;设定P1端口低4位为输入状态 SJMP $ ORG 0100H EXT0: MOV A,P1 SWAP A MOV P1,A RETI C语言参考程序为: #include INT0 () interrupt 0 /* 中断函数 */ P1=0 x0f; /*设定P1端口低
4、4位为输入状态,输入端先置1,灯灭 */ P=4; /*读入开关状态,并左移4位,使开关反映在发光二极管上*/ main() EA=1; /*开中断总开关*/ EX0=1; /*允许中断*/ IT0=1; /*下降沿产生中断*/ while(1); /*等待中断*/ 6.2 MCS-51单片机内部的定时器/计数器 通常实现定时/计数有3种主要方法:(1)软件定时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。 (2)时基电路硬件定时:用小规模集成电路器件构成的硬件定时电路,电路简单,但要改变定时范围,必须改变电阻和电容,修改不方便,即不可编程。 。 (3)可编程定时/计数器
5、定时:它是为方便微机系统的设计和应用而研制的一种芯片,它采用硬件定时,且很容易通过软件来确定和修改定时值,通过初始化编程,能够满足各种不同的定时和计数要求,在单片机、嵌入式系统的设计和应用中得到广泛的应用。 6.2.1 实现定时/计数器的办法单片机内部的定时/计数器也属于上面的第3种采用可编程定时/计数器实现定时,只不过这种可编程定时/计数器的硬件模块被集成到单片机内部而已。6.2.2 MCS-51单片机内部的定时/计数器定时/计数器是MCS-51系列单片机的重要部件,其工作方式灵活,编程简单,它的使用大大减轻了CPU的负担并且简化了外围电路。在MCS-51系列单片机中,51子系列单片机有2个
6、定时/计数器T0和T1,52子系列单片机除了有上述两个定时/计数器以外,还有一个定时/计数器T2,后者的功能比前两者强。图6-2是MCS-51系列单片机内部定时/计数器结构框图。图6-2 MCS-51系列单片机内部定时/计数器结构框图 定时/计数器主要由特殊功能寄存器TH0、TL0、TH1、TL1以及TMOD、TCON组成。 定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。其中: TH0(高8位)、TL0(低8位)构成16位加1计数器T0,用来存放T0的计数初值; TH1(高8位)、TL1(低8位)构成加116位计数器T1,用来存放T1的计数初值; 这两个16位计数器
7、都是16位的加1计数器。 TMOD用来控制两个定时/计数器的工作方式,TCON用作中断溢出标志并控制定时器的启停。 加1计数器输入的计数脉冲有两个来源。 (1)是由系统的时钟振荡器输出脉冲经12分频后送来; (2)是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。 如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。因此,由溢出时计数器的值减去计数初值才是加1计数器的计数值。1)定时/计数器设置为定时器模
8、式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。2)定时/计数器设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期采样T0或T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 s。 6.2.2.1 定时器/计数器的控制
9、寄存器单片机定时/计数器T0、T1 的工作主要由TMOD、TCON、IE 3个特殊功能寄存器控制。其中:TMOD用来设置各个定时/计数器的工作方式、选择定时或计数功能;TCON用于控制启动运行以及作为运行状态的标志等;IE用于对定时/计数器中断允许进行控制。1工作方式控制寄存器TMODTMOD寄存器是一个用于设定定时/计数器工作方式的特殊功能寄存器,其低4位用于控制T0,而高4位用于控制T1。字节地址为89H,不能位寻址,设置TMOD须用字节操作指令。复位时TMOD为00H。它的各位定义见图6-3图6-3 TMOD各位定义(1)M1、M0:工作方式选择位表6-1 定时/计数器的方式选择M1、M
10、0用来选择工作方式,对应关系如表6-1所示。(2)C/ :定时/计数功能选择位TC/ =0为定时方式。在定时方式中,以振荡输出时钟脉冲fosc的12分频信号作为计数信号,如果单片机采用12MHz晶体,则计数频率为1 MHz,计数脉冲周期为1s,即每1 s计数器加1一次。C/ =1为计数方式。在计数方式中,单片机在每个机器周期对外部计数脉冲进行采样。如果前一个机器周期采样为高电平,后一个机器周期采样为低电平,即为一个有效的计数脉冲。在下一机器周期进行计数。因此,外部事件计数时最高计数频率是单片机晶振频率的1/24。如果单片机采用12MHz晶体,则外部事件计数脉冲最短周期为2s,即最快可以做到每2
11、s计数器加1。TT(3)GATE:门控位GATE=1,定时/计数器的运行受外部引脚输入电平的控制,即 控制T0运行, 控制T1运行。GATE=0,定时/计数器的运行不受外部输入引脚的控制。INT0INT12定时器控制寄存器TCONTCON寄存器是一个用于控制启动运行以及作为运行状态的标志的特殊功能寄存器。TCON寄存器既参与定时控制又参与中断控制,其高4位用于控制T0、T1,而低4位用于控制外部中断 、 。TCON的字节地址为88H,它可位寻址。复位时TCON为00H。它的各位定义见图6-4 INT1INT0图6-4 TCON各位定义TCON低4位与外中断 、 有关,高4位功能定时控制有关。I
12、NT0INT1(1)TF0和TF1:计数溢出标志位 当计数器计数溢出(计满)时,该位置1。使用查询方式时,此位作状态位供查询,但应注意查询有效后应用软件方法及时将该位清0;使用中断方式时,此位作中断标志位,在转向中断服务程序时由硬件自动清0。(2)TR0和R1:定时器运行控制位 TR0(TR1)=0,停止定时/计数器工作;TR0(TR1)=1,启动定时/计数器工作。该位根据需要靠软件来置1或清0,以控制定时器的启动或停止。3中断允许控制寄存器IEIE寄存器与定时/计数器有关的位为ET0和ET1,它们分别是定时/计数器0、1的中断允许控制位。当ET0(或ET1)=0时,禁止定时/计数器0(或1)
13、中断;而当ET0(或ET1)=1时,允许定时/计数器0(或1)中断。6.2.2.2 定时器/计数器的工作方式 1方式013位计数结构的工作方式,定时/计数器T0、T1都可以设置工作方式0,T0(或T1)的计数器由TH0(或TH1)高8位和TL0(或TL1)的低5位构成,TL0(或TL1)的高3位未用。图6-5、图6-6分别为工作方式0的逻辑电路结构、工作原理框图。当TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。 图6-5 工作方式0的逻辑电路结构 图6-6 工作方式0的工作原理框图 当C/ =0时,多路开关接通振荡脉冲的12分频输出,13位计
14、数器以此进行计数,这就是定时方式。当C/ =1时,多路开关接通计数引脚P3.4(T0),外部计数脉冲由引脚P3.4输入。当计数脉冲发生负跳变时,计数器加1,这就是计数方式。不管是定时方式还是计数方式,当TL0的低5位计数溢出时,向TH0进位,而全部13位计数溢出时,则向计数溢出标志位TF0进位。在满足中断条件时,向CPU申请中断,若需继续进行定时或计数,则应用指令对TL0、TH0重新置数,否则,下一次计数将会从0开始,造成计数或定时时间不准确。这里要说明的是:T0能否启动,取决于TR0、GATE和引脚 的状态。当GATE=0时,GATE信号封锁了或门,使引脚 信号无效。而或门输出端的高电平状态
15、却打开了与门。这时如果TR0=1,则与门输出为1,模拟开关接通,定时/计数器0工作。如果TR0=0,则断开模拟开关,定时/计数器0不能工作。当GATE=1,同时TR0=1时,模拟开关是否接通由 控制。当 =1时,与门输出高电平,模拟开关接通,定时/计数器0工作;当 =0时,与门输出低电平,模拟开关断开,定时/计数器0停止工作。这种情况可用于测量外信号 的脉冲宽度。INT0TTINT0INT0INT0INT0INT0方式0是13位的定时/计数方式,因而最大计数值(满值)为M=213=8192。若计数值为N,则置入的初值X为:X=8192-N例如,定时/计数器T0的计数值为1000,则初值为719
16、2,转换成二进制数为1110000011000B,则TH0=11100000B=E0H,TL0=xxx11000B=18H(把xxx当作000时 2方式116位计数结构的工作方式,定时/计数器T0、T1都可以设置工作方式1,T0(或T1)的计数器由TH0(或TH1)高8位和TL0(或TL1)的低8位构成,其逻辑电路和工作情况与工作方式0基本相同。所不同的只是组成计数器的位数,它比工作方式0有更宽的计数范围,因此,在实际应用中,工作方式1可以代替工作方式0。图6-7、图6-8分别为工作方式0的逻辑电路结构、工作原理框图。图6-7 工作方式l的逻辑电路结构图6-8 工作方式1的工作原理框图 由于是
17、16位的定时/计数方式,因而最大计数值(满值)为M=216=65536。若计数值为N,则置入的初值X为: X=65536-N例如,定时/计数器T0的计数值为1000,则初值为65536-1000=64536,转换成二进制数为1111110000011000B,则TH0=11111100B=FCH,TL0 = 00011000B =18 H。3方式2具有自动重装初值的、8位计数结构的工作方式,定时/计数器T0、T1都可以设置工作方式2。在方式2下,16位计数器被分为两部分,即以TL0(或TL1)作计数器,而以TH0(或TH1)作预置寄存器(即保存计数初值),初始化时把8位的计数初值分别装人TL0
18、(或TL1)和TH0(或TH1)中。当TL0(或TL1)计数溢出后,不是像前两种工作方式那样通过软件方法,而是由预置寄存器TH0(或TH1)以硬件方法自动给计数器TL0(或TL1)重新加载。图6-9、图6-10分别为工作方式2的逻辑电路结构、工作原理框图。 图6-9 工作方式2的逻辑电路结构 图6-10 工作方式2的工作原理框图由于是8位的定时/计数方式,因而最大计数值(满值)为M=28=256。若计数值为N,则置入的初值X为:X=256-N例如,定时/计数器T0的计数值为100,则初值为256-100=156,转换成二进制数为10011100B,则TH0=TL0=10011100B。注意:由
19、于方式2计满后,溢出信号会触发三态门自动地把TH0(或TH1)的值装入TL0(或TL1)中,因而如果要重新实现N个单位的计数,不用重新置入初值。 4工作方式3工作方式3只适用于定时器T0。如果企图将定时器T1置为方式3,则它将停止计数,其效果与置TR1=0相同,即关闭定时器T1。 当T0工作在方式3时,它被拆成两个独立的8位计数器TL0和TH0。图6-11、图6-12分别为工作方式3的逻辑电路结构、工作原理框图。 图6-11 工作方式3的逻辑电路结构图6-12 工作方式3的工作原理框图 图6-11中,上方的8位计数器TL0使用原定时器T0的控制位C/ 、GATE、TR0和,TL0既可以计数使用
20、,又可以定时使用,其功能和操作与前面介绍的工作方式0或工作方式l完全相同。下方的TH0只能作为简单的定时器使用。而且由于定时/计数器0的控制位巳被TL0独占,因此只好借用定时/计数器l的控制位TR1和TF1。即以计数溢出去置位TF1,而定时的启动和停止则受TR1的状态控制。TINT0由于TL0既能作定时器使用也能作计数器使用,而TH0只能作定时器使用却不能作计数器使用,因此在工作方式3下,定时/计数器0可以构成两个定时器或一个定时器和一个计数器。注意:在方式3下,T0和T1的工作有很大的不同。其差别如下:1)若把T1置于方式3,则Tl停止计数,其效果与置TR1=0相同,即关闭定时器T1。此进,
21、定时器T1保持其内容不变。因此,一般不会把T1置于方式3。2)若把T0置于方式3,则16位计数器拆开为两个独立工作的8位计数器TL0和 TH0。但这两个8位计数器的工作是有差别的。首先,它们的工作方式不同: 对TL0来说它既可以按计数方式工作,也可以按定时方式工作; 而TH0则只能按定时方式工作。另外,它们的控制方式也不同。 3)当T0处于方式3时,此时T1可工作为方式0、1、2,但由于此时T1已没有控制通断TR1和溢出中断TF1的功能,T1只能作为串行口的波特率发生器使用,或不需要中断的场合。6.2.2.3 定时器/计数器的计数初值计算MCS-51的定时器/计数器采用增量计数。根据定时/计数
22、器的计数结构,其最大计数为2m,其中m为计数器的位数,对于工作方式0,m=13,其最大计数为213=8192;对于工作方式1,m=16,其最大计数为216=65536;对于工作方式2和工作方式3,m=8,其最大计数为28=256。在实际应用中,经常会有少于2m个计数值的要求,例如,要求计数到1000就产生溢出,这时可在计数时,不从0开始,而是从一个固定值开始,这个固定值的大小,取决于被计数的大小。如要计数1000,预先在计数器里放进(2m 1000)的数,再来1000个脉冲,就到了2m,就会产生溢出,置位TF0。这个(2m 1000)的数称作计数初值,也称作预置值。定时也有同样的问题,并且也可
23、采用同样的方法来解决。当定时/计数器为工作方式0,并假设单片机的晶振是12MHz,那么每个计时脉冲是1s,计满213=8192个脉冲需要8.192ms,如果只需定时1ms,可以作这样的处理:1ms即l000s,也就是计数1000时满。因此,计数之前预先在计数器里放进2131000=81921000=7192,开始计数后,计满1000个脉冲到8192即产生溢出。如果计数初值为X,则计算定时时间 t 为:t =(2NX)Tcy=(2NX)12/fosc式中:Tcy为机器周期,fosc为晶振周期。例如,如果定时/计数器为工作方式0,需要定时3ms(3000s),fOSC为12MHz。设计数初值为X,
24、则根据上述公式可得:3000=(2mX)12fOSC=(213X)12/12由此可得,X =5192需要说明的是,单片机中的定时器通常要求不断重复定时,一次定时时间到之后,紧接着进行第二次的定时操作。一旦产生溢出,计数器中的值就回到0,下一次计数从0开始,定时时间将不正确,为使下一次的定时时间不变,需要在定时溢出后马上把计数初值送到计数器。6.2.2.4 定时/计数器的初始化编程及应用定时器/计数器的功能是由软件编程确定的,在使用定时器,计数器前都要对其进行初始化。MCS-51单片机定时/计数器的初始化编程步骤为:(1)根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。(2)根据定
25、时时间要求或计数要求,计算定时/计数器的计数值,再由计数值求得初值,送计数初值的高8位和低8位到TH0(或TH1)和TL0(或TL1)寄存器中。定时/计数器的初值因工作方式的不同而不同。设最大计数值为M,则各种工作方式下的M值为:方式0 时M=213=8192;方式1 时M=216=65536;方式2 时M=28=256;方式3时,T0分成两个8位计数器,所以两个定时器的M值均为M=256。由于定时器计数器工作的实质是做“加1计数,所以,当最大计数值M 值为已知且计数值为N 时,初值X 可计算为:X=MN(3)如果工作于中断方式,则根据需要开放定时/计数器的中断,即对IE寄存器赋值(后面还需编
26、写中断服务程序)。(4)设置定时/计数器控制寄存器TCON的值(即将其TR0或TR1置位),启动定时/计数器开始工作。(5)等待定时/计数时间到,定时/计数到则执行中断服务程序;若用查询处理,则需编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。【例例6-2】 T0运行于定时器状态,时钟振荡周期为12MHz,要求定时100s。试求不同工作方式时的定时初值X。当fosc =12MHz,时,Tcy=1s,N=100s/1s=100= 64H方式0(13位方式):X=21364H=1F9CH方式1(16位方式):X=21664H=FF9CH方式2、3(8位方式):X=2864H=9CH注意:
27、工作方式0的初值装入方法:1F9CH= 1 1111 100 1 1100 B TH0的8位 TL0的低5位可见,TH0=0FCH,TL0=1CH MOV TH0,#0FCH MOV TL0,#1CH6.2.2.5 定时器/计数器的应用举例【例例6-3】设系统时钟频率为12MHz,利用定时器/计数器T0编程实现从P1.0输出周期为20ms的方波。从P1.0输出周期为20ms的方波,只需P1.0每隔10ms取反一次。当系统时钟为12MHz,定时器/计数器T0工作于方式1时,最大的定时时间为65536us,满足10ms的定时要求。系统时钟为12MHz,计数值为10000,初值X=65536-100
28、00=D8F0H,则TH0=D8H、TL0=F0H。 如果定时时间大于65536s,这时用一个定时/计数器直接处理不能实现,这时可用:1个定时/计数器配合软件计数方式处理,2个定时/计数器共同处理。 1采用查询方式编程汇编语言参考程序为: ORG 0000H AJMP MAIN ORG 0300H MAIN: MOV TMOD,#01H ;定时器,计数嚣T0工作于方式1 HH1: MOV TH0,#0D8H MOV TL0,#0F0H SETB TR0 LOOP: JBC TF0,NEXT ;查询计数溢出 SJMP LOOP NEXT: CPL P1.0 SJMP HH1 SJMP $C语言参
29、考程序为: # include sbit P_1=P0; void main()char i; TMOD=0 x01; TR0=1; For(; ;) TH0=0 xD8; TL0=0 xF0; do while (!TF0) P1_0=!P1_0; TF0=0; /查询计数溢出 2采用中断方式编程 汇编语言参考程序为: ORG 0000H LJMP MAIN ORG 000BH ;中断处理程序 CPL P1.0 MOV TH0,#0D8H MOV TL0,#0F0H RETI ORG 0200H ;主程序 MAIN: MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#
30、0F0H SETB EA SETB ET0 SETB TR0 SJMP $C语言参考程序为:# include /包含特殊功能寄存嚣库sbit P1_0=P10;void main ( ) TMOD=0 x01; TH0=0 xD8; TL0=0 xF0; EA=1; ET0=1; TR0=1; while (1); void time0_int (void) interrupt 1 /中断服务程序 P1_0=!P1_0; TH0=0 xD8; TL0=0 xF0; 【例例6-4】如图6-13所示,在P1.7端接一个发光二极管LED,要求利用定时控制使LED亮1s灭1s周而复始地闪烁,设时钟频
31、率fosc=6MHZ。 图6-13 例6-8的电路图当 fosc=6MHz时,工作方式0、1、2均不能满足定时1s的要求。如,16位定时最大为216 2s=131.072ms,显然不能满足要求,可用以下两种方法解决。 方法1:采用T0产生周期为200ms脉冲,即P1.0每100ms取反一次作为T1的计数脉冲,T1对下降沿计数,因此T1计5个脉冲正好1s。通过P1.7反相,改变LED的状态。T0采用方式1,定时100ms。计数初值为:X= 216100103/2 =3CB0H。T1采用方式2,计5个脉冲,计数初值:X = 285=FBH均采用查询方式,其流程图如图6-14所示。图6-14 例6-
32、4的流程图汇编参考程序为: ORG 0000H MAIN: CLR P1.7 SETB P1.0 MOV TMOD,#61H MOV TH1,#0FBH MOV TL1,#0FBH SETB TR1 LOOP1: CPL P1.7 LOOP2: MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 LOOP3: JBC TF0,LOOP4 SJMP LOOP3 LOOP4: CPL P1.0 JBC TF1,LOOP1 AJMP LOOP2 END 方法2:T0每隔100ms中断一次,利用软件对T0的中断次数进行计数,中断10次即实现了1s的定时。汇编参考程序为: ORG 0
33、000H AJMP MAIN ORG 000BH ;T0中断服务程序入口 AJMP IP0 ORG 0030H ;主程序开始 MAIN:CLR P1.7 MOV TMOD,#01H ;T0定时100ms MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA MOV R4,#0AH ;中断10次计数 SETB TR0 SJMP $ ;等待中断 IP0:DJNZ R4,RET0 ;未到10次转重新定时 MOV R4,#0AH ;到10次 CPL P1.7 ;P1.7的灯变反 RET0:MOV TH0,#3CH ;重新定时100ms MOV TL0,#0B0H SE
34、TB TR0 RETIC语言参考程序为:#includesbit P1_0=P10;sbit P1_7=P17;timer0 interrupt 1 using 1 /*T0中断服务程序*/ P1_0=! P1_0; /*10ms定时时间到, P1.0反相*/ TH0=(65536-50000)/256; /*计数初值重装载*/ TL0=(65536-50000)%256;timer1 interrupt 3 using 2 /*T1中断服务程序入口*/ P1_7=! P1_7; /*1s定时时间到, 灯改变状态*/main( ) P1_7=0; /*置灯初始灭*/P1_0=1; /*保证第1
35、次反相便开始计数*/TMOD=0 x61; /* T0工作在方式1定时,T1工作在方式2计数 */TH0=(65536-50000)/256; /*预置计数初值*/TL0=(65536-50000)%256;TH1=256-5;TL1=256-5;IP=0 x08; /*置优先级寄存器*/EA=1; /*CPU开中断*/ET0=1; /*开T0中断*/ET1=1; /*开T1中断*/TR0=1; /*启动T0*/TR1=1; /*启动T1*for (;)【例例6-10】利用定时器T0测量某正脉冲信号宽度,脉冲从P3.2(即 )输入。已知此脉冲宽度小于10ms,系统时钟频率为12MHz。要求测量
36、此脉冲宽度,并把结果顺序存放在以片内 30H 单元为首地址的数据存储单元中。利用门控位的功能,当GATE为1时,只有 =1且软件使TRx置1,才能启动定时器。 利用这个特性,便可测量输入脉冲的宽度(系统时钟周期数)。INT0INTx汇编参考程序为: ORG 0000H AJMP MAIN ORG 0300HMAIN: MOV TMOD,#09H ;定时器,计数器T0工作于计数方式,GATE=1 MOV TH0,#00H ;装入计数初值 MOV TL0,#00H LP: JB P3.2,LP ;等待变低 SETB TR0 ;开始计数LOOP: JNB P3.2,LOOP ;等待变高,即脉冲上升沿
37、HERE: JB P3.2,HERE ;等待变低,即脉冲下降沿 CLR TR0 ;停止计数 MOV 30H,TL0 MOV 31H,TH0 SJMP $C语言参考程序为: #include sbit P3_2=p32;void main ( ) unsigned char *P;P=0 x30; /指针指向片内30H单元TMOD=0 x09; /GATE=1,工作方式为计数器TL0=0 x00;TH0=0 x00; /装入初位do while (P3_2=1); /等待变低 TR0=1; while (P3_2=0); /等待变高,即脉冲上升沿 while P3_2=1); /等待变低,即脉冲
38、下降沿 TR0=0; /停止计数 *P=TL0; /读入TL0值(十六进制),存放在30H单元 P+ *P=TH0; /读入TH0值(十六进制),存放在31H单元6.3 MCS-51单片机内部的串行接口6.3.1 计算机串行通信基础计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。1通信的基本方式计算机与外界的通信有并行通信和串行通信两种基本方式。其中:并行通信通常是将数据字节的各位用多条数据线同时进行传送;串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。图6-15为计算机与外界的通信方式。 并行通信的传送控制简单、传输速度快,但由
39、于传输线较多,长距离传送时成本高,且接收方的各位同时接收存在困难。串行通信的传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂、传输速度慢。它们的特点可归纳为表6-2。(a) 并行通信 (b) 串行通信 图6-15 计算机与外界的通信方式表6-2 两种通信方式的特点2串行通信的方式串行通信按信息的格式又可分为异步通信和同步通信两种方式。(1)异步通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 此方式的数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态
40、,空闲线路约定为高电平“1”。见图6-16。 异步通信是以字符为单位进行传输,传送一个字符又称为一帧信息,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间是异步的(字符之间不一定有“位间隔”的整数倍的关系),但同一字符内的各位是同步的(各位之间的距离均为“位间隔”的整数倍)。传送时每一个字符前加一个低电平的起始位,然后是数据位,数据位可以是58位,低位在前,高位在后,数据位后可以带一个奇偶校验位,最后是停止位,停止位用高电平表示,它可以是1位、1位半或2位。异步通信的数据格式如图6-17所示。 图6-16 异步通信的示意图 图6-17 异步通信数据格
41、式 异步通信的特点:不要求收发双方时钟的严格一致,对发送时钟和接收时钟的要求相对不高,实现容易,设备开销较小;但由于一次只传送一个字符,因而一次传送的位数比较少,每个字符还要附加23位用于起止位,各帧之间还有间隔,因此传输效率不高。(2)同步通信同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过外同步法、自同步法两种方法实现。其中:外同步法是发送端发送数据之前先发送同步时钟信号,接收方用这一同步信号来锁定自己的时钟脉冲频率,以此来达
42、到收发双方位同步的目的;而自同步法是接收方利用包含有同步信号的特殊编码(如曼彻斯特编码)从信号自身提取同步信号来锁定自己的时钟脉冲频率,达到同步目的。图6-18为两种同步方法的示意图。 同步通信是以数据块为传输单位,每个数据块的头部和尾部都要附加一个特殊的字符或比特序列,标记一个数据块的开始和结束,一般还要附加一个校验序列,以便对数据块进行差错控制。其格式如图6-19所示。 (a) 外同步 (b) 自同步 图6-18 两种同步方法的示意图图6-19 同步通信数据格式根据同步通信规程,同步传输又分为面向字符的同步传输和面向位流的同步传输。1) 面向字符的同步传输 面向字符的同步格式图6-20所示
43、。传送的数据和控制信息都必须由规定的字符集(如ASCII码)中的字符所组成。图中帧头为1个或2个同步字符SYN(ASCII码为16H)。SOH为序始字符(ASCII码为01H),表示标题的开始,标题中包含源地址、目标地址和路由指示等信息。STX为文始字符(ASCII码为02H),表示传送的数据块开始。数据块是传送的正文内容,由多个字符组成。数据块后面是组终字符ETB(ASCII码为17H)或文终字符ETX(ASCII码为03H)。然后是校验码。典型的面向字符的同步规程如IBM的二进制同步规程BISYNC(BSC)。2) 面向位流的同步传输 面向位流的同步格式图6-21所示。此时,将数据块看作数
44、据位流,而不是作为字符流来处理,并用一个特殊的比特序列01111110来标记数据块的开始和结束。为了避免在数据流中出现序列01111110时引起的混乱,发送方总是在其发送的数据流中每出现5个连续的1就插入一个附加的0;接收方则每检测到5个连续的1并且其后有一个0时,就删除该0。典型的面向位的同步协议如ISO的高级数据链路控制规程HDLC和IBM的同步数据链路控制规程SDLC。图6-20 面向字符的同步格式 图6-21 面向位的同步格式同步通信的特点是一次连续传送任意多个字符或数据位,传输的效率高;但对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂。3串行通信的传输方向按照数据
45、传送的方向,串行通信可分为单工、半双工和全双工3种制式,如图6-22所示。图6-22 串行通信制式(a) 单工 (b) 半双工 (c) 全双工 1)单工 单工是指甲乙双方通信时只能单一方向的传送数据,不能实现反向传输,发送方和接收方固定。 2)半双工 半双工是指通信双方都具有发送器和接收器,既可发送也可接收,但不能同时接收和发送,需要分时进行,即发送时不能接收,接收时不能发送。3)全双工 全双工是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时也能发送。4串行信号的调制与解调计算机的信号是数字信号,不便于远距
46、离通讯,若远距离直接传输数字信号,信号会发生畸变。因此,在远距离通讯中,一般需要利用电话线(或光缆、专用通信电缆)连接两台计算机。由于计算机内的信息是由“0”和“1”组成数字信号,而在电话线上传递的却只能是模拟电信号。于是,当两台计算机要通过电话线进行数据传输时,就需要一个设备负责数模的转换,这个包括调制器和解调器的数模转换器就是调制解调器(Modem,简称“猫”)。计算机在发送数据时,先由Modem把数字信号转换为相应的模拟信号,这个过程称为“调制”,其调制方法主要有频率调制法、幅度调制法和相位调制法;经过调制的信号通过电话线载波传送到另一台计算机之前,也要经由接收方的Modem负责把模拟信
47、号还原为计算机能识别的数字信号,这个过程称为“解调”。正是通过这样一个“调制”与“解调”的数模转换过程,从而实现了两台计算机之间的远程通讯。图6-23为Modem的工作原理图。 图6-23 Modem工作原理 5串行通信的错误校验(1)奇偶校验 在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。这种校验方法比较简单,目前广泛应用于异步通信中,但它只能检测出数据中奇数个位数出错,不能检查出
48、偶数个位数出错。(2)代码和校验(也称累加和校验) 代码和校验是发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,相符则无差错,否则即认为传送过程中出现了差错。这种校验方法无法检验出字节位序(或1、0位序不同)的错误。 (3)循环冗余校验 循环冗余码校验的基本原理是将一个数据块看成一个位数很长的二进制数,然后用一个特定的数去除它,将余数作校验码附在数据块后一起发送。接收端收到该数据块和校验码后,进行同样的运算来校验传送是否出错。这种校验方法纠错能力强
49、,目前CRC已广泛用于数据存储和同步数据通信中,并在国际上形成规范,已有不少现成的CRC软件算法。6串行的传输速率与传输距离(1)传输速率 比特率是每秒钟传输二进制代码的位数,单位是:位秒(bps)。如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:10位240个/秒 = 2400 bps。 波特率表示每秒钟调制信号变化的次数,单位是:波特(Baud)。 在异步通信中,传输速度往往又可用每秒传送多少个字节来表示(Bps)。它与波特率的关系为: 波特率(Baud)=1个字符的二进制位数字符/秒(bps) 例如:每秒传送200个字符,每个字符
50、1位起始位、8个数据位、1个校验位和1个停止位。则波特率为2200bps。 波特率和比特率不总是相同的,对于将数字信号1或0直接用两种不同电压表示的所谓基带传输,比特率和波特率是相同的。所以,我们也经常用波特率表示数据的传输速率。(2)传输距离与传输速率的关系 串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性有关。当传输线使用每0.3m(约1英尺)有50PF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小。当比特率超过1000 bps 时,最大传输距离迅速下降,如9600 bps 时最大距离下降到只有76m(约250英尺)。7串行接口的基本任务(1)实现数据格式
51、化 因为CPU发出的数据是并行数据,接口电路应实现不同串行通信方式下的数据格式化任务, 如自动生成起止方式的帧数据格式(异步方式)或在待传送的数据块前加上同步字符等。(2)进行串、并转换 在发送端,接口将CPU送来的并行信号转换成串行数据进行传送;而在接收端,接口要将接 收到串行数据变成并行数据送往CPU,由CPU进行处理。(3)控制数据的传输速率 接口应具备对数据传输率波特率的控制选择能力,即具有波特率发生器。(4)进行传送错误检测 在发送时,对传送的数据自动生成校验位或校验码,在接收端能检查校验位或校验 码,以确定传送中是否有误码。 MCS-51系列单片机内有一个全双工的异步通信接口,通过
52、对串行接口写控制字可以选择其数据格 式,同时内部有波特率发生器,提供可选的波特率,可完成双机通信或多机通信。 8串行通信总线的接口标准及其接口在串行传输中,通信的双方都按通信协议进行,所谓通信协议就是通信双方必须共同遵守的 一种约定,约定包括数据的格式、同步的方式、传送的步骤、检纠错方式及控制字符的定义等。串行接口通常分为两种类型:串行通信接口和串行扩展接口。其中:串行通信接口是指设备之间的互连接口,它们互相之间距离比较长,根据通信距离和抗干扰性要求,可选择TTL电平传输、RS-232C/RS-422A/RS-485等串行通信总线接口标准进行串行数据传输;串行扩展接口是设备内部器件之间的互连接
53、口。常用的串行扩展总线接口标准有SPI、I2C等,串行接口扩展的芯片很多,可以根据需要选择。(1)TTL电平通信接口 微机串行口的输入、输出一般均为TTL电平。如果两个微机相距在1.5m之内,它们的串行口可直接交叉相连,即甲机的接收端RXD与乙机发送端TXD相连,而乙机接收端RXD与甲机发送端TXD端相连。 TTL电平传输的抗干扰性差、传输距离短、传输速率低。为提高串行通信的可靠性,增大串行通信的距离和提高传输速率,通常都采用RS-232、RS-422A、RS-485等标准串行接口进行串行数据传输。(2)RS-232C串行接口标准 RS-232C是美国电子工业协会(EIA)1969年修定的一种
54、国际通用的串行接口标准。它最初是为远程通信连接数据终端设备(DTE)和数据通信设备(DCE)制定的标准,目前已广泛用做计算机与终端或外部设备的串行通信接口标准。该标准规定了通信设备之间信号传送的机械特性、信号功能、电气特性及连接方式等。1) 机械特性。RS-232C接口规定使用25针和9针连接器,连接器的尺寸及每个插针的排列位置都有明确的定义,如图6-24所示。 (a) DB25插座/插头 (b) DB9插座/插头 图6-24 DB25和DB9插座/插头2) 电气特性。因通信时(有干扰)信号要衰减,因此RS232采用电平负逻辑,拉开“0”和“1”的电压档次,以免信息出错。RS232负逻辑(EI
55、A电平):“0”为+3V+25V(典型值+5V+15V);“1”为 -3V -25V(典型值-5V -15V)。其最大传输信息的长度为15m。而TTL电平采用正逻辑:“0”为0 -2.4V;“1”为3.6V-5V;高阻为2.4V-3.6V。TTL电平的直接传输距离一般不超过1.5m。3)功能特性。表6-3列出了RS-232C信号线名称、符号以及对应在DB-25和DB-9上的针脚号。4) RS-232C电平与TTL电平转换驱动电路。由于RS-232C总线上传输的信号的逻辑电平与TTL逻辑电平差异很大,所以就存在这两种电平的转换问题,常用的RS232电平转换器芯片有MC1488/ 1489、MAX
56、232等。这些专用接口芯片称为收发器。图6-25 为采用MC1488/ MC1489芯片实现RS-232C与TTL之间电平转换电路。 MAX232只需单一的+5V供电,由内部电压变换器产生士10V。芯片内有2个发送器(TTL电平转换成RS232电平),2个接收器(RS232电平转换为TTL电平)。MAX232的内部结构及引脚信号如图6-26所示。表6-3 RS-232C标准接口的主要引脚定义(a) RS-232C电平与TTL电平转换芯片 (b) RS-232C-TTL电平转换芯片之间连接关系图6-25 RS-232C与TTL之间电平转换芯片MC1488/ MC1489 图6-26 MAX232
57、的内部结构及引脚信号 5) 过程特性 过程特性规定了信号之间的时序关系,以便正确地接收和发送数据。如果通信距离在1.515m之间时,可采用RS-232C标准接口直接把它们连接起来;如果通信距离超过15m,还需把信号通过MODEN和电话线后再把它们连接起来。图6-27为RS-232C的两种连接形式。6) 采用RS-232C接口存在的问题a 传输距离短、传输速率低 RS-232C总线标准受电容允许值的约束,使用时传输距离一般不要超过15m。最高传送速率为20 Kbps。b 有电平偏移 RS-232C总线标准要求收发双方共地。通信距离较大时,收发双方的地电位差别较大,在信号地上将有比较大的地电流并产
58、生压降。c 抗干扰能力差 RS-232C在电平转换时采用单端驱动、单端接收方式进行数据的输入输出,在传输过程中当干扰和噪声混在正常的信号中。为了提高信噪比,RS-232C总线标准不得不采用比较大的电压摆幅。(a) 近程通信连接 (b) 远程通信连接 图6-27 RS-232C的两种连接形式(3)RS-422A串行接口标准 RS-232C有明显缺点:传输速率低、通信距离短、接口处信号容易产生串扰等。国际上又推出了RS-422A标准。与RS-232C的主要区别是,收发双方的信号地不再共地,RS-422A采用了双端平衡驱动和差分接收的方法。用于数据传输的是两条平衡导线,这相当于两个单端驱动器。两条线
59、上传输的信号电平,当一个表示逻辑“1”时,另一条一定为逻辑“0”。若传输中信号中混入干扰和噪声(共模形式),由于差分接收器的作用,就能识别有用信号并正确接收传输的信息,并使干扰和噪声相互抵消。 RS-422的干扰抑制性极好,又因为它的阻抗低,无接地问题,所以RS-422A能在长距离、高速率下传输数据。它的最大传输率为10 Mbps,电缆允许长度为12m,如果采用较低传输速率时,最大传输距离可达1219m。 图6-28为RS-422典型的4线接口电路。图中的SN75174、SN75175是TTL电平到RS-422A电平与RS-422A电平到TTL电平的电平转换芯片。 图6-28 RS-422A典
60、型的4线接口电路 (4)RS-485串行接口标准 RS-422A双机通信需4芯传输线,这对长距离通信很不经济,故在工业现场,通常采用双绞线传输的RS-485串行通信接口,实现半双工的多机通信。 RS-485是RS-422A的变型,它与RS-422A 的区别:RS-422A 为全双工,采用两对平衡差分信号线;RS-485为半双工,采用一对平衡差分信号线。RS-485对于多站互连是十分方便的,很容易实现多机通信。RS-485允许最多并联32台驱动器和 32 台接收器。 如果在一个网络中连接的设备超过 32 个,还可以使用中继器。与RS-422A一样,最大传输距离约为1219m,最大传输速率为10M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 赛项规程-高职学生组(艺术专业技能原创插画设计)
- 2024-2025学年山东省德州市夏津县统编版六年级上册期中考试道德与法治试卷
- 教育技术并购策略
- 车站石材购销施工协议
- 珠宝首饰招投标法规解读
- 地铁隧道沉井施工协议
- 生产安全目标承诺书
- 污水处理厂防腐工程招投标文件
- 互联网平台债务清欠管理办法
- 炸药厂事故死亡赔偿书
- 卫生监督典型案例分析(食品安全)-文本资料课件
- CAD培训课件(基础教程)
- 人工智能1第一章绪论课件
- 肾囊肿去顶减压术病人的医疗护理
- 一汽-夏利48pin维修手册-ver
- 《自然语言处理课程设计》课程教学大纲
- 中国风书香校园宣传主题班会PPT
- 妊娠剧吐课件
- 世界足球日介绍主题班会模板课件
- 电大学前教育本教育实习教学活动设计
- 河北省廊坊市各县区乡镇行政村村庄村名居民村民委员会明细
评论
0/150
提交评论