1 / 48

模块四 内部资源(三) ---- 串行口及应用

模块四 内部资源(三) ---- 串行口及应用. 一、案例 ---- 基于串行口的彩灯控制系统 功能: 1 、彩灯 0.5S 移动 1 次 ; 2 、彩灯输出控制由串行口实现。 前面介绍的彩灯输出控制都是基于并行口的,本次课讨论另外的实现方法 --- 串行输出。. 数据输入 RXD 1 2 TXD 移位脉冲 74LS164 8 8051 3 4 5 6 10 11 12 13.

honey
Download Presentation

模块四 内部资源(三) ---- 串行口及应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 模块四 内部资源(三)----串行口及应用 一、案例----基于串行口的彩灯控制系统 功能:1、彩灯0.5S移动1次; 2、彩灯输出控制由串行口实现。 前面介绍的彩灯输出控制都是基于并行口的,本次课讨论另外的实现方法---串行输出。 数据输入 RXD 1 2 TXD 移位脉冲 74LS164 8 8051 3 4 5 6 10 11 12 13 D7 D6 D5 D4 D3 D2 D1 D0

  2. 要求:(1)8个发光管全亮;(2)从左向右依次变灭,每次减少一个,直到全灭;(3)从左向右依次点亮,每次亮一个;(4)从右向左依次点亮,每次亮一个;(5)从左向右依次点亮,每次增加一个,直到全亮;(6)返回(2)循环。要求:(1)8个发光管全亮;(2)从左向右依次变灭,每次减少一个,直到全灭;(3)从左向右依次点亮,每次亮一个;(4)从右向左依次点亮,每次亮一个;(5)从左向右依次点亮,每次增加一个,直到全亮;(6)返回(2)循环。 ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV SCON,#0 CLR ES MOV DPTR,#TAB LOOP:MOV R0,#0 L1: MOV A,R0

  3. MOVC A,@A+DPTR CLR P1.0 MOV SUBF,A JNB TI,$ CLR TI SETB P1.0 ACALL DELAY INC R0 CJNE R0,#34,L1 SJMP LOOP TAB: DB 0FFH DB 0FFH,7FH,3FH,1FH,0FH,7,3,1,0,80H,40H DB 20H,10H,8,4,2,1,1,2,4,8,10H,20H,40H,80H,80H DB 0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH END 请试验上段程序,看一下运行效果。 计算机串行通信基础

  4. 并 行 数 据 传 送 串 行 数 据 传 送 原 理 各数据位同时传送 数据位按位顺序进行 优 点 传送速度快、效率高 最少只需一根传输线即可完成:成本低 缺 点 数据位数→传输线根数:成本高 速度慢 应 用 传送距离<30米,用于计算机内部 几米~几千公里,用于计算机与外设之间 二、 串行通信基础知识 并行 数据传送 同步 串行 异步(用于单片机中)

  5. 通信:并行通信与串行通信 • 并行通信 特点:传送控制简单、速度快,但传输线较多,成本高。

  6. 串行通信 特点:传送控制复杂、速度慢,传输线少,成本低

  7. 1.串行通信的基本概念 • 异步通信与同步通信 • 异步通信 收、发设备时钟独立,以字符(帧)为单位传输

  8. 异步通信帧格式 • 起始位(1位); • 数据位(8位); • 奇偶校验位(1位,可无校验位); • 停止位(1位)。 特点 • 易于实现 • 效率不高 • 同步通信(发、收时钟直接连接,效率高。板内元件间的SPI接口)

  9. 串行通信的传输方向 • 单工 • 半双工 • 全双工 80C51有1个全双工串行口

  10. 信号的调制与解调 调制解调器 • 调制 • 解调 DTE:数据终端设备 DCE:数据通信设备

  11. 2.串行通信接口标准 RS-232C定义的是DTE与DCE间的接口标准。 • 机械特性 DB-25 连接器 DB-9 连接器

  12. RS-232C采用负逻辑电平,规定(-3~-25V)为逻辑“1”,(+3~+25V)为逻辑“0”。-3V~+3V是未定义的过渡区。试比较:RS-232C采用负逻辑电平,规定(-3~-25V)为逻辑“1”,(+3~+25V)为逻辑“0”。-3V~+3V是未定义的过渡区。试比较: • 电气特性 电平转换电路(如MAX232)。

  13. 远程通信,需要调制解调器 • 过程特性

  14. 近程通信,不需要调制解调器 无联络线方式 联络线短接(伪连接)方式

  15. RS-232C电平与TTL电平转换驱动电路 早期常用MC1488、MC1489 近期常用MAXM232: 片内带有自升压电路 仅需+5V电源 内含2个发送器,2个接收器

  16. 采用RS-232C接口存在的问题 传输距离短、速率低 通常不超过15米,速率20Kbps 有电平偏移 RS-232收发共地,地电流会使电平偏移出现逻辑错误。 抗干扰能力差 RS-232常用单端输入,易混入干扰。 新标准RS-485改善了传输特性,应用广泛。

  17. 单片机与单片机间的通信 • 硬件连接 近程连接 (直连) 远程连接 (电平转换)

  18. 电平转换器件与接线

  19. 通信协议 • 串口方式1,2400 Baud,T1定时方式2, 晶振选11.0592MHz,查表知:TH1=TL1=F4H,SMOD=0 • A机发“E1”联络,B机同意接收发“E2”响应 A机收到“E2”后,发数据块及校验字节。 • B机接收数据块及校验字节,判传输是否正确 正确时向A机发送“00H”,否则发送“FFH” • A机接收到“00H”则本次传输结束。否则重新传输数据

  20. 流程图

  21. 单片机与PC机间的通信 • 硬件连接 直接连接 交叉连接

  22. 通信协议 • 串口方式1,1200 Baud,T1定时方式2, 晶振选11.0592MHz,查表知:TH1=TL1=E8H,SMOD=0 • PC机发“E1”联络,单片机响应后向PC机发送数据 • PC机再发“E1”联络, 单片机会再一次发送数据

  23. 程序流程

  24. 三、80C51单片机的串行口 1个全双工串口:通信或接口扩展 1.80C51串行口的结构及SBUF 接收发送缓冲器逻辑同名、物理分开;接收双缓冲。

  25. 发送SBUF和接收SBUF共用一个地址99H。 1)发送SBUF存放待发送的8位数据,写入SBUF将同时 启动发送。发送指令: MOV SBUF,A 2)接收SBUF存放已接收成功的8位数据,供CPU读取。 读取串行口接收数据指令: MOV A,SBUF

  26. 2.80C51串行口的控制寄存器 • 串行口控制寄存器SCON • SM0和SM1:工作方式选择位

  27. SM2:多机通信控制位 SM2=1时,接收机处于地址帧筛选状态。若RB8=1,该地址帧信息可进入SBUF,并使RI为1,进而在中断服务中再进行地址号比较;若RB8=0,该帧不是地址帧,应丢掉,且保持RI=0。 SM2=0时,接收机处于地址帧筛选被禁止状态。不论收到的RB8为0或1,均可以使收到的信息进入SBUF,并使RI=1。此时的RB8通常为校验位。 • REN:串行接收使能位,软件置1时,启动接收过程

  28. TB8:多机方式发送的第9位 多机方式的地址/数据帧标志。也可作为奇偶校验位。 • RB8:多机方式接收的第9位 多机方式的地址/数据帧标志。也可作为奇偶校验位。 • TI:发送中断标志位,要由软件清0 • RI:接收中断标志位,要由软件清0

  29. 电源控制寄存器PCON • SMOD:波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。

  30. 3. 80C51串行口的工作方式 方式0:同步移位寄存器,用于扩展并行口 • RXD:输入或输出引脚 • TXD:移位脉冲输出 • 接收和方式都是8位 • 波特率固定为:fosc/12

  31. 数据输出: CLR用于对74LS164清0

  32. 先发送一个字符,等待TI=1后再发送下一个字符。先发送一个字符,等待TI=1后再发送下一个字符。 发送程序: 1、查询方式: TRAM: MOV SCON,#00H ;方式 MOV IE,#00H MOV SBUF,A ;发送一个字符 WAIT: JBC TI,NEXT ;等待发送结束 SJMP WAIT NEXT: CLR TI SJMP TRAM 2、中断方式: ORG 0023H ;串行口中断入口 AJMP SINT MAIN: MOV SCON,#00H;初始化编程 SETB ES SETB EA TRAM: MOV SBUF,A ;发送第一个字符 H: SJMP H ;其它工作 SINT: CLR TI ;中断服务程序 MOV A,@ R0;取数据 MOV SBUF,A ;发送下一个字符 RETI

  33. 数据输入: S/L负脉冲将并行数据装入,高电平时启动单片机进行数据输入。

  34. REN=1、RI=0等待接收,当RI=1,从SBUF读取数据。 接收程序: 1.查询方式: WAIT: JBC RI,NEXT ;查询等待 SJMP WAIT NEXT: MOV A,SBUF ;读取接收数据 MOV @R0,A ;保存数据 CLR RI INC R0;准备下一次接收 SJMP WAIT 2.中断方式: ORG 0023H AJMP RINT MAIN: … ;初始化编程 H: SJMP H ;其它任务 RINT: CLR RI;清中断标志 MOV A,SBUF;读取接收数据 MOV @R0,A;保存数据 INC R0 RETI

  35. 方式1:10位帧,用于双机通信 • 起始位:1位 • 数据位:8位 • 停止位:1位

  36. 串行发送:(写SBUF启动发送过程) 串行接收:(置REN=1启动接收过程)

  37. 方式2和方式3:11位帧,用于多机通信 • 起始位:1位 • 数据位:9位 • 停止位:1位

  38. 串行发送:(写SBUF启动发送过程) 串行接收:(置REN=1启动接收过程)

  39. 4.80C51波特率确定与初始化步骤 波特率的确定 • 波特率的计算 固定波特率: 方式0波特率= fosc/12 方式2波特率=(2SMOD/64)*fosc 可变波特率: 方式1波特率=(2SMOD/32)*(T1溢出率) 方式3波特率=(2SMOD/32)*(T1溢出率) T1 溢出率 = fosc /{12×[256 -(TH1)]}

  40. 串行接口控制: 1.数据缓冲器SBUF 发送SBUF和接收SBUF共用一个地址99H。 1)发送SBUF存放待发送的8位数据,写入SBUF将同时 启动发送。发送指令: MOV SBUF,A 2)接收SBUF存放已接收成功的8位数据,供CPU读取。 读取串行口接收数据指令: MOV A,SBUF 2.节电控制寄存器PCON SMOD(PCON.7):波特率加倍控制位。 SMOD=1,波特率加倍; SMOD=0,则不加倍。

  41. (四)计算波特率 方式0为固定波特率:B=fosc/12 方式2可选两种波特率: B=(2SMOD/64)×fosc 方式1、3为可变波特率,用T1作波特率发生器。 B=(2SMOD/32)×T1溢出率 T1为方式2的时间常数: X = 28 - t/T 溢出时间: t= (28 -X)T = (28 -X)×12/ fosc T1溢出率=1/t= fosc /[12×(2n -X)] 波特率B=(2SMOD/32)×fosc/[12×(28-X)] 串行口方式1、3,根据波特率选择T1工作方式,计算时间常数。 T1选方式2: TH1= X = 28 - fosc/12×2SMOD/(32×B) T1选方式1用于低波特率,需考虑T1重装时间常数时间。 也可选工作方式3。

  42. 四、单片机串行口的应用 串行口初始化编程格式: SIO:MOV SCON,#控制状态字 ;写方式字且TI=RI=0 ( MOV PCON,#80H ) ;波特率加倍 ( MOV TMOD,#20H ) ;T1作波特率发生器 ( MOV TH1,#X ) ;选定波特率 ( MOV TL1,#X ) ( SETB TR1) ( SETB EA) ;开串行口中断 ( SETB ES)

  43. 先发送一个字符,等待TI=1后再发送下一个字符。先发送一个字符,等待TI=1后再发送下一个字符。 发送程序: 1、查询方式: TRAM: MOV A,@R0;取数据 MOV SBUF,A ;发送一个字符 WAIT: JBC TI,NEXT ;等待发送结束 SJMP WAIT NEXT: CLR TI INC R0;准备下一次发送 SJMP TRAM 2、中断方式: ORG 0023H ;串行口中断入口 AJMP SINT MAIN: … ;初始化编程 TRAM: MOV A,@ R0;取数据 MOV SBUF,A ;发送第一个字符 H: SJMP H ;其它工作 SINT: CLR TI ;中断服务程序 INC R0 MOV A,@ R0;取数据 MOV SBUF,A ;发送下一个字符 RETI

  44. REN=1、RI=0等待接收,当RI=1,从SBUF读取数据。 接收程序: 1.查询方式: WAIT: JBC RI,NEXT ;查询等待 SJMP WAIT NEXT: MOV A,SBUF ;读取接收数据 MOV @R0,A ;保存数据 CLR RI INC R0;准备下一次接收 SJMP WAIT 2.中断方式: ORG 0023H AJMP RINT MAIN: … ;初始化编程 H: SJMP H ;其它任务 RINT: CLR RI;清中断标志 MOV A,SBUF;读取接收数据 MOV @R0,A;保存数据 INC R0 RETI

  45. ORG 0023H ;串行口中断入口 AJMP TRANI TRANI: PUSH A ;保护现场 PUSH PSW CLR TI ;清发送结束标志 DJNZ R7,NEXT ;是否发送完? CLR ES ;发送完,关闭串行口中断 SJMP TEND NEXT: INC R0 ;未发送完,修改指针 MOV A,@R0 ;取下一个字符 MOV C,P ;加奇偶校验 MOV TB8,C MOV SBUF,A ;发送一个字符 POP PSW ;恢复现场 POP A TEND: RETI  ;中断返回

  46. 接收程序:串行输入16个字符,存入片内RAM的50H起 始单元,串行口波特率为2400(设晶振为11.0592MHz)。 RECS: MOV SCON,#50H ;串行口方式1允许接收 MOV TMOD,#20H ;T1方式2定时 MOV TL1,#0F4H ;写入T1时间常数 MOV TH1,#0F4H SETB TR1  ;启动T1 MOV R0,#50H ;设数据指针 MOV R7,#10H ;接收数据长度 WAIT: JBC RI,NEXT ;等待串行口接收 SJMP WAIT NEXT: MOV A,SBUF ;读取接收字符 MOV @R0,A ;保存一个字符 INC R0 ;修改指针 DJNZ R7,WAIT ;全部字符接收完? RET

  47. RECS: MOV SCON,#0D0H ;串行口方式3允许接收 MOV TMOD,#20H ;T1方式2定时 MOV TL1,#0F4H ;写入T1时间常数 MOV TH1,#0F4H SETB TR1  ;启动T1 MOV R0,#50H ;设数据指针 MOV R7,#10H ;接收数据长度 WAIT: JBC RI,NEXT ;等待串行口接收 SJMP WAIT NEXT: MOV A,SBUF ;取一个接收字符 JNB P,COMP ;奇偶校验 JNB RB8,ERR ;P≠RB8,数据出错 SJMP RIGHT ;P=RB8,数据正确 COMP: JB RB8,ERR RIGHT: MOV @R0,A ;保存一个字符 INC R0 ;修改指针 DJNZ R7,WAIT ;全部字符接收完? CLR F0 ;F0 =0,接收数据全部正确RETERR: SETB F0 ;F0 =1,接收数据出错 RET 接收程序:串行输入16个字符,进行奇偶校验。

More Related