收藏 分享(赏)

第6章 定时器计数器和串行通信.ppt

上传人:fmgc7290 文档编号:8306532 上传时间:2019-06-19 格式:PPT 页数:119 大小:1.88MB
下载 相关 举报
第6章 定时器计数器和串行通信.ppt_第1页
第1页 / 共119页
第6章 定时器计数器和串行通信.ppt_第2页
第2页 / 共119页
第6章 定时器计数器和串行通信.ppt_第3页
第3页 / 共119页
第6章 定时器计数器和串行通信.ppt_第4页
第4页 / 共119页
第6章 定时器计数器和串行通信.ppt_第5页
第5页 / 共119页
点击查看更多>>
资源描述

1、第6章 定时器/计数器和串行通信,6.1 定时器/计数器的结构及工作原理 6.2 定时器/计数器的应用 6.3 串行口的结构及工作方式 6.4 串行口的应用 6.5 RS-232C串行通信接口,6.1 定时器/计数器的结构及工作原理,MCS-51单片机内部有两个16位的可编程的定时器计数器,称为定时器0、定时器1,分别用T0、T1表示。它们均可独立编程,具有四种工作方式 。 6.1.1 定时器/计数器的结构,6.1.1 定时器/计数器的结构,6.1.1 定时器/计数器的结构,在作定时器使用时,是对内部的机器周期进行计数。 每个机器周期包含12个振荡周期,即定时器的输入脉冲是对外部晶振进行12分

2、频后得到的。例如,外部晶振频率为12MHz,则定时器的输入时钟脉冲频率为1MHz,即每隔1us接收到一个脉冲,计数值加1。所以,实际上是通过对机器周期的计数实现计算时间的功能。,当定时器用作为外部事件计数时,是对引脚T0或T1上外部输入的负脉冲信号做加法计数。 将外部输入信号接到T0(P3.4)或T1(P3.5)引脚,当检测到的电平由高跳变到低时,计数器就加1。因此,为了确保得到可靠的采样值,需要2个机器周期来识别一个从“1”到“0”的跳变,这就要求外部计数脉冲的高电平与低电平保持时间至少为一个完整的机器周期。所以最高计数频率为晶振频率的1/24。,6.1.1 定时器/计数器的结构,不管是定时

3、还是计数,T0或T1在对内部时钟或外部事件计数时都不占用CPU时间,只有定时器计数器产生溢出时,才会向CPU发出中断请求。CPU也可重新设置定时器计数器的工作方式和计数初值,以改变定时器的操作。 设计数的最大值为M,所需的计数值为N,则初值X的计算方法如下:计数状态: X=MN定时状态: X=M定时时间/T 其中,T=12晶振频率,6.1.1 定时器/计数器的结构,6.1.2 工作方式和控制寄存器,1. 工作方式寄存器TMOD 寄存器TMOD是可编程的特殊功能寄存器,字节地址为89H,不可位寻址。其中低4位控制T0,高4位控制T1 。GATE:控制方式选择位,用来控制定时器启动操作方式。 当G

4、ATE=0时,只能由软件控制TR0或TR1位来控制定时器的启停。TRi(i=0,1)位为1,定时器启动;TRi(i=0,1)为0时,定时器停止工作; 当GATE=1时,定时器的启动要由外部中断引脚和TRi(i=0,1)位共同控制。只有当外部中断引脚为高时,TRi(i=0,1)置1才能启动定时器工作。,6.1.2 工作方式和控制寄存器,C/T:计数/定时方式选择位,当C/T=0时设置为定时器工作方式;当C/T=1时设置为计数器工作方式。 M1、M0:工作方式控制位,对应于4种工作方式。例 要设定T1为定时器,方式2,T0为计数器,方式1,并由内部TRi控制启停。则TMOD=25H,可用下面指令赋

5、值:MOV TMOD, #25H,6.1.2 工作方式和控制寄存器,2. 控制寄存器TCON TCON字节地址为88H,位地址为88H8FH。TF1和TF0:定时器T1和定时器T0的溢出标志位。 TR1和TR0:定时器T1和定时器T0的启动控制位。 IE1和IE0:外部中断INT1和外部中断INT0的中断请求标志位。 IT1和IT0:外部中断INT1和外部中断INT0的触发方式选择位。 TCON中低4位是与外部中断有关的位,高4位为定时器控制位。对T0的启、停控制可以通过以下位操作指令完成:SETB TR0 ;启动T0计数CLR TR0 ;停止T0计数,6.1.3 定时器/计数器的工作方式,1

6、. 工作方式0 TMOD中M1M000时,定时/计数器被选为工作方式0,计数器长度为13位。由TLi(i=0,1)的低5位(TL的高3位未用)和THi(i=0,1)的8位构成13位计数器(对T0、T1都适用)。,当C/T=0为定时方式时,T0对机器周期进行计数。设定时时间为t,则计数初值 例6-1设T0工作方式0,定时时间t=1ms,fosc=12MHz,计算T0的计数初值。7192=11100000 11000B= E0H 18H高8位 低5位TH0计数初值为E0H,TL0计数初值为18H。,6.1.3 定时器/计数器的工作方式,6.1.3 定时器/计数器的工作方式,当C/T=1为计数方式时

7、,外部计数脉冲由T0引脚输入。当外部信号电平发生由1至0的跳变时,计数器加1。,6.1.3 定时器/计数器的工作方式,2. 工作方式1 TMOD中M1M001时,定时计数器设定为工作方式1,工作方式1是16位定时计数器,其结构和工作过程几乎与方式0完全相同,唯一的区别是计数器的长度为16位。 设定时时间为t,则计数初值X为:,6.1.3 定时器/计数器的工作方式,3. 工作方式2 方式2为能自动重装初值的8位计数器。,6.1.3 定时器/计数器的工作方式,3. 工作方式2 方式2优点:省去了由软件重新赋初值的麻烦,所以它常用于定时控制或串行口的波特率发生器。 方式2缺点:定时/计数长度短。 设

8、定时时间为t,则计数初值X为:,6.1.3 定时器/计数器的工作方式,工作方式3只适用定时器T0,而T1无此工作方式,若将T1设置为方式3,相当于TR1=0,T1停止工作。此时,T0被拆成两个独立的8位计数器TH0和TL0。,6.1.3 定时器/计数器的工作方式,其中TL0使用原来T0的一些控制位和引脚,他们是C/T、GATE、TR0、TF0和T0(P3.4)引脚及 (P3.2)引脚。此方式下的TL0作为8位计数器,其功能和方式0、方式1一样,可以实现定时和计数两种功能,只不过是一个8位的计数器;而TH0只能完成定时功能,对机器周期进行计数。它借用原定时器T1的控制位TR1和溢出标志位TF1,

9、同时占用了T1的中断请求信号。 工作方式3为定时器T0增加了一个8位的定时器,此时的T1仍可以设置为工作方式0、1、2,用在任何不需要中断的场合。T0工作于模式3 时,T1一般用作串行口波特率发生器。,6.2 定时器/计数器的应用,1. 工作方式0的应用 例6-2设单片机晶振频率fosc=6MHz,使用定时器T1以方式0产生周期为600s的等宽方波脉冲,并由P1.7输出,以查询方式完成。(1)计数初值。 欲产生周期为600s的等宽方波脉冲,只需在P1.7端交替输出300s的高低电平即可,应此定时时间为300s。设待求计数初值为N,则将低5位0AH写入TL1,将高8位FBH写入TH1中。,6.2

10、 定时器/计数器的应用,(2)工作方式寄存器TMOD初始化 因定时计数器1为工作方式0,所以应使M1M0=00。为实现定时功能应使当C/T=0,为实现定时器的软件控制启动应使GATE=0,因此控制寄存器TMOD=00H。(3)TR1=1为启动,TR1=0为停止。程序如下:,ORG 0000HLJMP STARTORG 0030H START: MOV TCON, #00H ;清TCONMOV TMOD, #00H ;工作方式设定MOV TH1, #0FBH ;计数初值设定MOV TL1, #0AH MOV IE, #00H ;关中断SETB TR1 ;启动定时器 LOOP0: JBC TF1,

11、 LOOP1 ;查询是否溢出SJMP LOOP0 LOOP1: MOV TH1, #0FBH ;重新设值MOV TL1, #0AHCPL P1.7 ;输出取反SJMP LOOP0 END,法2:采用中断方式 ORG 0000H LJMP STARTORG 001BHLJMP T1INTORG 0100H START: MOV SP, #30HMOV TCON, #00HMOV TMOD, #00HMOV TH1, #0FBHMOV TL1, #0AH ,SETB TR1 SETB ET1 SETB EA MAIN: AJMP MAIN T1INT: MOV TH1, #0FBH MOV TL1

12、, #0AHCPL P1.7 RETI,6.2 定时器/计数器的应用,2. 工作方式1的应用 例6-3设单片机晶振频率fosc=12MHz,使用定时器T0以方式1产生周期为3ms、占空比为1:2的脉冲波,并由P1.7输出,以查询方式完成。(1)计数初值。 欲产生周期为3ms、占空比为2:3的脉冲波,可设定定时时间为1ms,在程序中加入P1.7口的状态判断,当P1.7为高电平时,需溢出两次才对端口取反。设待求计数初值为N,则 将低8位18H写入TL0,将高8位FCH写入TH0中。,6.2 定时器/计数器的应用,(2)TMOD初始化 因定时计数器T0为方式1,所以M1M0=01。为实现定时功能应使

13、当C/T=0,为实现定时器的软件控制启动应使GATE=0,因此设定工作方式控制寄存器TMOD=01H。 (3)由TR0启动和停止定时器。TR0=1为启动,TR0=0为停止。 程序如下: ORG 0000HLJMP MAINORG 0030H MAIN: MOV TMOD,#01H ;T0为16位定时模式MOV TL0, #18H ;定时器赋初值MOV TH0, #0FCH ;定时器赋初值,6.2 定时器/计数器的应用,MOV R2, #02H ;R2赋初值SETB TR0 ;开启定时器LOOP: JBC TF0, CPLP ;定时时间到,转CPLP并将TF0清零 AJMP LOOP ;TF0为

14、0则转LOOP循环等待 CPLP: MOV TL0, #18H ;定时器重装初值MOV TH0, #0FCH ;定时器重装初值JB P1.7,CPLP1 ;P1.7为1则转CPLP1CPL P1.7 ;P1.7为0则取反MOV R2, #02H ;R2重新赋值AJMP LOOP ;转LOOP等待定时时间到 CPLP1: DJNZ R2, LOOP ;2ms未到转LOOP CPL P1.7 ;2ms到对P1.7口取反AJMP LOOP ;转LOOP等待定时时间到END ;程序结束,【练习1】 已知某生产线的传送带上不断地有产品单向传送,产品之间有较大间隔。使用光电开关统计一定时间内的产品个数。假

15、定红灯亮时停止统计,红灯灭时才在上次统计结果的基础上继续统计,试用单片机定时器/计数器T1的方式1完成该项产品的计数任务。,(1) 初始化: TMOD=11010000B=0D0H(GATE=1, C/T=1, M0M1=01)TCON=00H(2) T1在方式1时, 溢出产生中断, 且计数器回零, 故在中断服务程序中, 需用R0计数中断次数, 以保护累积计数结果。,(3) 启动T1计数, 开T1中断。 程序清单如下:,ORG 0000H AJMP START ; 复位入口ORG 001BHAJMP T1INT ; T1中断入口ORG 0100HSTART: MOV SP, 60H ; 初始化

16、程序MOV TCON, 00HMOV TMOD, 0D0HMOV TH1, 00H,MOV TL1, 00HMOV R0, 00H ; 清中断次数计数单元MOV P3, 28H; 设置P3.3,P3.5第二功能SETB TR1 ; 启动T1SETB ET1; 开T1中断SETB EA ; 开总中断MAIN: ACALL DISP ; 主程序, 调显示子程序ORG 0A00HT1INT: INC R0 ; 中断服务子程序RETIDISP: ; 显示子程序RET,6.2 定时器/计数器的应用,3. 方式2的应用 例6-4使用定时器T0以方式2产生200s定时,在P1.0口输出周期为400s的连续方

17、波。已知晶振频率fosc=6MHz。 (1)计数初值(2)TMOD初始化 工作方式2时,M1M0=10,实现定时功能C/T=0,GATE=0。定时器T1不用,无关位设置为0,可得TMOD=02H。,ORG 0000HLJMP STARTORG 000BHLJMP LOOP0ORG 0030H START: MOV TCON, #00HMOV TMOD, #02H ;定时器方式2MOV TH0, #9CH ;设置计数初值MOV TL0, #9CH ;设置计数初值SETB EA ;允许总中断SETB ET0 ;T0中断允许SETB TR0 ;启动T0 HERE: SJMP HERE ;等待中断OR

18、G 0500H ;中断服务子程序 LOOP0:CPL P1.0 ;P1.0取反RETIEND,【练习2】某MCS-51应用系统对单相电度表进行用电检测和管理,电度表每运转一圈产生一个脉冲,假设电度表每转200圈为1度电,试利用T1模式2对脉冲进行计数,每计200个脉冲对用电量加1,假设用电量存放在片内RAM的50H单元。计数初值:X=M-计数值=28-200=56D=38H 采用查询方式,编程如下:,MOV TMOD,60H ;设置T1模式2计数功能MOV TH1,38H ;保存计数初值MOV TL1,38H ;设置计数初值SETB TR1 ;启动计数LP:JBC TF1,LOOP ;查询是否

19、计数溢出 AJMP LP LOOP:INC 50HAJMP LP,6.2 定时器/计数器的应用,4. 方式3的应用 例6-5 设某用户系统,已使用了两个外部中断源,并置定时器T1于方式2,作串口波特率发生器用,现要求再增加一个外部中断源,并由P1.0口输出一个5KHz的方波,fosc=12MHz。,分析:可把定时器/计数器T0置于工作方式3,利用外部引脚T0作附加的外部中断输入端,把TL0预置为0FFH,这样做当T0端出现由1至0的负跳变时,TL0溢出,申请中断,相当于边沿触发的外部中断源。在方式3下,TH0总是作8位定时器用,可以靠它来控制由P1.0输出5KHz方波。 TL0的计数初值为0F

20、FH,TH0的计数初值计算如下:因为P1.0输出5KHz方波,即每隔100s电平变化一次。则TH0中的初值:X=256-10012/12=156,6.2 定时器/计数器的应用,程序如下:ORG 0000HLJMP STARTORG 000BHLJMP TL0INTORG 001BHLJMP TH0INTORG 0100H START: MOV TL0, #0FFH ;置TL0计数初值 MOV TH0, #156 ;置TH0计数初值MOV TL1, #data ;data是根据波特率要求设置的常数,MOV TH1, #dataMOV TMOD, #27H ;T0方式3,TL0计数器方式MOV T

21、CON, #55H ;启动T0、T1,置边沿触发MOV IE, #9FH ;开放全部中断SJMP $ORG 0200H ;TL0溢出中断服务程序 TL0INT: MOV TL0, #0FFH ;外部引脚T0引起中断处理程序RETIORG 0300H ;TH0溢出中断服务程序 TH0INT: MOV TH0, #156CPL P1.0RETIEND,6.2 定时器/计数器的应用,5. 外部脉冲频率的测量 例6-6通过定时器/计数器测量外部引脚T1上的脉冲信号频率Fx,设晶振频率fosc=6MHz。,(1)设计思路 采用定时闸门计数方法测量脉冲频率,设定时器/计数器0为定时方式,提供100ms的基

22、准闸门时间T,在10T期间,定时器/计数器T1对外部脉冲进行计数,所获得的计数值m即为被测脉号频率。 (2)定时器/计时器参数设定 设定时器/计数器0用来提供100ms的闸门时间,单片机时钟振荡频率fosc=6MHz,定时器/计数器1用来对外部脉冲计数。设定时器/计数器0采用方式1,定时器状态,由内部TR0控制启动、停;设定时器/计数器1采用方式1、计数器状态,由TR1控制启、停。因此,6.2 定时器/计数器的应用,TMOD=01010001B=51H T0的计数初值: 频率测量子程序如下: MSFC: MOV TMOD,#51H ;设T0、T1控制字 MOV R0, #0AH ;100ms定

23、时的10倍扩展MOV TL1, #00H ;T1计数器清零MOV TH1, #00H MOV TL0, #0B0H ;T0计数器装入计数初值MOV TH0, #3CH ;T0计数器装入计数初值SETB P3.5 ;置T1引脚为输入方式,JB P3.5,$ ;等待FX低电平 SETB TR0 ;启动T0计数SETB TR1 ;启动T1计数WAIT: JBC TF0, SECC ;查询100ms定时,定时到转SECCSJMP WAIT ;100ms定时时间未到,等待SECC: MOV TL0, #0B0H ;重装计数初值MOV TH0, #3CH DJNZ R0, WAIT ;查询1s定时时间,未

24、到转WAITCLR TR1 ;1s定时到,停止T1计数CLR TR0 ;停止T0计数MOV 31H, TH1 ;将T1计数值送入31H,30HMOV 30H, TL1RET,【练习3】 照相机快门打开信号接在INT0(P3.2)引脚,使用T0并利用门控位GATE测照相机快门打开的时间。结果存放在30H和31H单元。 实质:检测外部输入正脉冲的宽度。,解:外部脉冲由INT0(P3.2)输入,其宽度为TP,如图所示。T0工作于定时方式,模式1(16位计数器)。 测试时,在INT0=0时,设置TR0=1;当INT0=1时,启动计数;当INT0=0时,停止计数。使TR0=0,读出TH0、TL0的计数值

25、,用计数值乘以定时脉冲周期即得被检测正脉冲的宽度TP。,MOV TMOD,09H ;设T0为模式1,定时,GATE=1MOV TL0,00H ;设置计数初值为0MOV TH0,00H MOV R0,30H ;地址指针送R0JB INT0, ;等待INT0变低SETB TR0 ;准备启动定时器0JNB INT0, ;等待INT0变高JB INT0, ;变高,启动计数,等待INT0再次变低CLR TR0 ;停止计数MOV R0,TL0 ;读取计数值INC R0MOV R0,TH0,6. 实时时钟 例6-7设计实时时钟程序。 (1)实现时钟计时的基本方法 本例涉及到了定时器与中断的联合应用。时钟计时

26、的最小单位是秒,但使用单片机定时器/计数器进行定时,即使按方式1工作,其最大定时时间也达不到1秒。鉴于此,可把定时器的定时时间定为100ms,这样,计数溢出10次即得到时钟计时的最小单位秒;而10次计数可用软件方法实现。,假定使用定时器T1,以工作方式1进行100ms的定时。如单片机晶振频率为6MHz,为得到100ms定时,计数初值 X=15536=0011110010110000B=3CB0H 采用中断方式进行溢出次数的累计,计满10次即得到秒计时。从秒到分和从分到时的计时是通过累加和数值比较实现的。 这里,只给出时间计算的程序。,(2)程序流程图及程序清单 主程序流程如图6-9所示。,中断

27、服务程序的主要功能是进行计时操作。程序开始先判断计数溢出是否满了10次,不满10次表明还没达到最小计时单位秒,中断返回;如满10次则表示已达到最小计时单位,程序继续向下运行,进行计时操作。 要求满1s则“秒位”32H单元内容加1,满60s则“分位”31H单元内容加1,满60min则“时位”30H单元内容加1,满24h则将30H,31H,32H的内容全部清0。,ORG 0000HAJMP MAIN ;上电,转向主程序ORG 001BH ;T1的中断入口地址AJMP SERVE ;转向中断服务程序ORG 0100H MAIN: MOV TMOD,#10H ;设T1工作于方式1MOV 20H, #0

28、AH ;转入中断次数CLR AMOV 30H, A ;时单元清0MOV 31H, A ;分单元清0MOV 32H, A ;秒单元清0SETB ET1 ;允许T1中断SETB EA ;允许CPU中断MOV TH1, #3CH ;赋计数初值MOV TL1, #0B0H ;赋计数初值SETB TR1 ;启动定时器T1SJMP $ ;等待中断(可反复调用显示子程序),SERVE: PUSH PSW ;中断服务程序PUSH ACC ;保护现场MOV TH1, #3CH ;重新赋计数初值MOV TL1, #0B0HDJNZ 20H, RETUNT ;1s未到,返回MOV 20H, #0AH ;重置中断次数

29、MOV A, #01HADD A, 32H ;秒位加1DA A MOV 32H, A ;转换为BCD码CJNE A, #60, RETUNT;未满60s,返回MOV 32H, #00H ;计满60s,秒位清0MOV A, #01HADD A, 31H ;分位加1DA AMOV 31H, A ;转换为BCD码,CJNE A, #60, RETUNT;未计满60min,返回MOV 31H, #00H ;计满60min,分位清0MOV A, #01HADD A, 30H ;时位加1DA AMOV 30H, A ;转换为BCD码CJNE A, #24, RETUNT;未计满24h,返回MOV 30H,

30、 #00H ;计满24h,时位清0 RETUNT: POP ACCPOP PSW ;恢复现场RETI ;中断返回END,6.3 串行口的结构及工作方式,6.3.1串行通信的概念1并行通信与串行通信 CPU与外部设备进行数据传输时,有并行通信和串行通信两种方式。 并行通信是利用计算机的并行口,将数据的多个位同时进行传输,特点是传送速度快、效率高,并行传送的数据有多少位,就需要有多少根传输线。当传送距离较远时,位数太多就会使通信的线路成本过大,因此并行通信仅适合于短距离传输。,6.3 串行口的结构及工作方式,6.3.1串行通信的概念1并行通信与串行通信 串行通信是将数据的各个位按顺序一位一位的进行

31、传输,特点是只要一对传输线就可以实现通信,对传输的数据较多、距离较远时,它可以大量节约系统的硬件资源。因此,在远距离的数据通信系统中,一般采用串行通信方式,其缺点是传送速度较低。,6.3.1串行通信的概念,2.异步通信与同步通信 异步通信是指发送方和接收方采用独立的时钟,即双方没有一个相同的参考时钟作为基准。异步通信是按帧传送数据,它利用每一帧的起、止信号来建立发送与接收之间的同步,一个字符作为一帧,一帧数据一般由起始位(0)、数据位、奇偶校验位(可省略)和停止位(1)四部分组成。,在异步通信时,通信双方必须事先约定: (1)字符格式。 双方要事先约定数据位的位数、奇偶校验形式等。 例如:用A

32、SC码通信,有效数据为7位,加一个奇偶校验位、一个起始位和一个停止位共10 (2)波特率(Baud rate)。波特率就是传送速率,即每秒传送的二进制位数。单位为bit/s或波特。,波特率与字符的传送速率之间的关系为:波特率= 一个字符的二进制编码位数*字符数/秒.要求发送端与接收端的波特率必须一致。 假设:数据传送率是120字符/s,每个字符格式包含十个代码位(一个起始位、一个终止位、8个数据位),波特率为:10120=1200bit/s=1200波特 异步通信由于要在每个数据前后附加起始位、停止位,每发送一个字符约有20%的附加数据,占用了传输时间,因此降低了传送效率。,6.3.1串行通信

33、的概念,同步通信 同步通信去掉每个数据的起始位和停止位,把要发送的数据按顺序连接成一个数据块,在数据块的开头附加12个同步字符,即检测到规定的同步字符后,下面就连续按顺序传送数据,直到通信告一段落。,同步通信要求:发送和接收双方要保持完全的同步,所以,要求发送和接收设备必须使用同一时钟。 解决办法: (1)对于近距离通信:采用在传输线中增加一根时钟信号线来解决。 (2)对于远距离通信:通过解调器从数据流中提取同步信号,用锁相技术实现收、发频率完全相同的时钟信号。 总的来说,异步通信技术较为简单,应用范围广;同步通信传输速率高,适用于高速率、大容量的数据通信,但硬件复杂。,3单工通信与双工通信

34、在串行通信中,按照数据传送的方向,可分为单工(Simplex)、半双工(Half Duplex)和全双工(Full-duplex)三种方式。,6.3.2串行口基本组成,MCS-51单片机串行口的结构如图所示。串行口由发送控制、接收控制、波特率输入管理和发送/接收缓冲器SBUF组成。,6.3.3串行口的寄存器,1发送/接收缓冲器SBUF SBUF属于特殊功能寄存器,其字节地址为99H,不可位寻址。SBUF只能与累加器A实现数据传送。CPU写SBUF的同时,启动数据的串行发送;接收时,就是读取SBUF的过程。 下列指令可以分别完成一次发送和接收: MOV SBUF, A ;启动一次数据发送 MOV

35、 A, SBUF ;完成一次数据接收,SM0、SM1:工作方式选择位,由软件置位或清零。,2串行口控制寄存器SCON SCON用于串行口的工作方式设定和数据传送控制,字节地址为98H,可位寻址,位地址为98H-9FH。,6.3.3串行口的寄存器,SM2:多机通信控制位。 在方式2和3中,若SM2=1,则允许多机通信。在主从式多机通信中,SM2用于从机的接收控制。当SM2=1时:只有接收到的第9位数据(RB8)为1时(数址帧),才将接收到的前8位数据送入SBUF中,并置位RI,以产生中断申请。否则将接收到的数据丢弃,不启动接收中断标志RI(即RI=0)。若SM2=0,不属于多机通信情况,从机可接

36、收所有信息;不论第9位数据是0还是1,都置RI=1,接收到的数据都装入到SBUF中。,6.3.3串行口的寄存器,在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。 在方式0时,SM2必须是0。 REN:允许接收位。REN=1时,允许接收;REN=0时,禁止接收。REN由指令置位或清零。 TB8:在方式2和方式3时,TB8为所要发送的第9位数据。多机通信中TB8表明主机发送的是地址还是数据,TB8=0为数据,TB8=1为地址。也可用作数据的奇偶校验位。TB8由指令置位或清零。,6.3.3串行口的寄存器,RB8:接收到的第9位数据。可作为奇偶校验位或地址帧/数据帧的标志。多机通信中用

37、来存放接收到的第9位数据,表明所接收的数据的特征。方式1时,若SM2=0,则RB8是接收到的停止位。在方式0时,不使用RB8位。 TI:发送中断标志。方式0时,发送完8位数据后由硬件置位,其它方式下,发送停止位时由硬件置位,并请求中断。TI=1表示帧发送结束,意味着接收缓冲器已空,CPU可以准备发送下一帧数据。TI必须由指令清零。,6.3.3串行口的寄存器,RI:接收中断标志。方式0时,接收完8位数据后由硬件置位,其它方式下,接收到停止位时由硬件置位,并请求中断。RI=1表示帧接收完成,意味着接收缓冲器已满,要求CPU取走数据。CPU响应中断后,RI必须由软件清0。 TI和RI是同一个中断源,

38、CPU事先不知道是哪一个产生的中断请求,所以,在全双工通信时,必须通过软件查询来判别。,6.3.3串行口的寄存器,3电源控制寄存器PCON 电源控制寄存器PCON直接地址为87H,不可位寻址,只有最高位SMOD(串行口波特率系数控制位)与串行口工作有关。SMOD:串行口波特率系数控制位。在串行口工作方式1、工作方式2和工作方式3中,当SMOD=1时,串行口的波特率加倍;SMOD=0时,串行口的波特率不加倍。复位时,SMOD=0。,6.3.4串行口的工作方式,1. 工作方式0 方式0为同步移位寄存器输入/输出方式,可外接移位寄存器以扩展I/O口,也可以外接同步输入输出设备。 方式0分为输出和输入

39、两种状态。 在方式0下,不管输出还是输入,通信数据总是从RXD(P3.0)管脚输入或输出,发送和接收的是8位数据,低位在前,高位在后。,6.3.4串行口的工作方式,1. 工作方式0 TXD(P3.1)管脚总是用于输出移位脉冲,每个脉冲使RXD端输入或输出一位二进制码。 在TXD端的移位脉冲实际上就是方式0的波特率,其值是固定的,为晶振频率fOSC的1/12,即每个机器周期移动一位数据。 方式0不属于通信,当串行口别无它用时,可以和外接的移位寄存器结合来扩展并行I/O口。 优点:不占用片外RAM地址,而且还能简化单片机系统的硬件结构。缺点:操作速度较慢。,6.3.4串行口的工作方式,(1)发送操

40、作 当执行一条MOV SBUF, A 指令时,启动发送操作,由TXD输出移位脉冲,通过RXD由低到高串行发送SBUF中的数据,波特率fosc/12,发送完8位数据后硬件自动置发送中断标志TI=1,请求中断。也可通过查询TI位来确定是否发送完一组数据。若要继续发送数据,必须用指令将TI清零。 【例】在模式0时外接一个串入/并出的移位寄存器,就可以扩展一个8位并行输出口。所用的移位寄存器应该带有输出允许控制端,这样可以避免在数据串行输入时,并行输出端出现不稳定的输出。,常用CD4094(也可用74LS164)进行串/并转换,CD4094是串行输入、8位并行输出的移位寄存器,它与单片机的连接电路如图

41、所示。,外接移位寄存器输出,(1)先对SCON寄存器初始化,进行工作模式设置:只把00H送入SCON即可设置为模式0。 (2)数据输出可采用两种方式。中断方式:TI=1,产生中断申请,中断后才发下一组数据。查询方式:TI=0,继续查询;TI=1,结束查询,发下一组数据。,【练习4】 用8751串行口外接CD4094扩展8位并行输出口,8位输出端的各位都接一个发光二极管。要求编程实现:发光二极管从左到右以一定延迟轮流点亮,并不断循环。假设发光二极管为共阴极,则电路连接如图所示。,ORG 0200H BFS0:MOV SCON ,#00H ;串行口模式0的初始化 CLR ES ;禁止串行中断 MO

42、V A ,#80H ;拟先点亮最左边一位 LOOP:CLR P1.0 ;关闭并行输出MOV SBUF ,A ;数据送SBUF,启动串行输出 JNB TI ,$ ;查询TI=0,未发送完等待 SETB P1.0 ;TI=1,发送完启动并行输出ACALL DELAY ;调延时程序 CLR TI ;软件清TI RR A ;右移一位,准备显示下一位 SJMP LOOP ;转移,继续发送 RET,(2)接收操作 当串行口工作在方式0时,同时满足REN=1和RI=0条件时,就会启动一次接收过程。由TXD端输出移位脉冲,数据依次由低位到高位经RXD端接收到SBUF中,一帧数据接收完成后,硬件置RI为1。若要

43、再次接收一帧数据,要用指令将RI清零(RI=0)。 串行接口工作在方式0时,尽量用查询方式。 复位时,SCON被清零,接收前,必须先置位REN=1才允许接收数据。,查询方式发送程序如下:MOV SBUF, AJNB TI, $CLR TI 查询方式接收程序如下:JNB RI, $CLR RIMOV A, SUBF,【例】 扩展并行输入口 模式0输入时,常用移位寄存器CD4014(也可用74LS165)进行并/串转换,CD4014是8位并行输入、串行输出的移位寄存器,它与单片机的连接电路如图所示。,【练习5】 用8751串行口外接CD4014扩展8位并行输入口,输入数据由8个开关提供,另有一个开

44、关S提供联络信号,电路连接如图6-7所示。当S=0时,要求输入数据,并转存到内部RAM 40H单元中。试编程实现。,ORG 0300H BJS0:JB P1.0 ,LP2 ;开关K未闭合,转返回 CLR ES ;禁止串行中断 MOV SCON ,#10H ;设模式0,RI清0,启动接收LP: SETB P1.1 ;P/S=1,并行置入开关数据 CLR P1.1 ;P/S=0,开始串行接收 LP1:JNB RI,LP1 ;查询RI,RI=0,未接收完等待CLR RI ;接收完,清RI,准备接收下一个MOV A ,SBUF ;读取数据送入累加器 MOV 40H ,A ;送内部RAMLP2:RET

45、;接收完,子程序返回,2. 工作方式1 工作方式1为8位通用异步通信接口,一帧数据为10位,一位起始位,8位数据位,一位停止位。波特率由T1的溢出率及SMOD的状态决定。 (1)发送操作 当执行一条MOV SBUF, A 指令时,数据从TXD引脚输出,此时的发送移位脉冲即发送波特率,是由定时器T1送来的溢出信号经过16分频或32分频(取决于SMOD的值)而得到的。发送完一帧数据后硬件置TI=1并请求中断,完成一次发送过程。如果要继续发送数据,需要用指令将TI清零。,6.3.4串行口的工作方式,(2)接收操作 在REN=1的条件下,串行口采样RXD端得到1至0的跳变时,就认定为接收到起始位,随后

46、在移位脉冲的控制下,数据从RXD端输入,直到停止位到来时,把停止位送入RB8中,置位RI请求中断并通知CPU从SBUF中取走接收的数据。再次接收数据时,需用指令将RI清零。 注意:通常串行口以方式1工作时,SM2设置为“0”。,6.3.4串行口的工作方式,3. 工作方式2 串行接口的工作方式2为9位异步通信接口,传送一帧数据共有11位,包括一位起始位,8位数据位,1位可编程位,一位停止位。,(1)发送操作 发送数据前,由指令设置TB8(奇偶校验或标志位),将要发送的数据由A写入SBUF中后启动发送操作。同时把TB8装入发送移位寄存器的第9位,并通知发送控制器要求进行一次发送。发送完毕后硬件自动

47、置TI=1。 多机通信的发送时,TB8=1为地址帧,TB8=0为数据帧。 工作方式2下,SMOD=0,波特率为fosc/64;SMOD=1,波特率为fosc/32。,(2)接收操作 当REN=1且RI=0时,启动接收操作,串行口RXD端电平采样,当采样到1至0的跳变时,就认定为接收到起始位,随后在移位脉冲的控制下,数据从RXD端输入。在方式2的接收中,接收数据真正有效的条件为: RI=0; SM2 =0 或接收到的第9位数据为“1”。 当两个条件都满足时,接收的前8位数据装入SBUF,第9位数据装入RB8中,并置RI=1。否则,这次接收无效,也不置位RI。再次接收数据时,需用指令将RI清零。,6.3.4串行口的工作方式,4. 工作方式3 方式3与方式2唯一的差别是波特率不同。方式2的波特率是固定的,即为fOSC / 32或 fOSC / 64;而方式3的波特率与方式1相同。它是方式1和方式2的综合运用。,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报