730 likes | 928 Views
第 7 章 串行口及串行通信技术. 串行通信基本知识 89C51 串口及其应用 两个单片机之间的通信 单片机与 PC 机之间的通信. 发送. 计算机 1 GND. 计算机 2 GND. 计算机 1 GND. 计算机 2 GND. 接收. 并行通信. 串行通信. 什么是串行通信?. 串行通信和并行通信. 快、多 (数据线)、 近. 并行通信:数据的各位 同时 传送;. 串行通信:数据 一位一位 顺序传送。. 慢、少、远.
E N D
第7章 串行口及串行通信技术 • 串行通信基本知识 • 89C51串口及其应用 • 两个单片机之间的通信 • 单片机与PC机之间的通信
发送 计算机1 GND 计算机2 GND 计算机1 GND 计算机2 GND 接收 并行通信 串行通信 什么是串行通信? • 串行通信和并行通信 • 快、多(数据线)、近 并行通信:数据的各位同时传送; 串行通信:数据一位一位顺序传送。 慢、少、远
A站 B站 单工通信 发送器 接收器 ( a ) 发 发 发 收 收 收 收 发 A站 B站 A站 B站 ( b ) ( c ) 串行通信制式:单工(a)、半双工(b)和全双工(c) (simplex half duplex full duplex)
串行通信的分类:异步(Asynchronous Communication) 同步(Synchronous Communication) • 异步通信,ASYNC (Asynchronous Data Communication):帧格式传送,信息量不大 • 1个起始位,0 • 5~8个数据位 • 奇偶校验位 • 1~2个停止位,0
…… 数据 数据 同步字符2 同步字符1 …… 数据 数据 数据 同步字符 • 同步通信,SYNC(Synchronous Data Communication):严格同步,发送同步字符,数据连续,信息量大,速度较高 • 按数据块传送——把要传送的字符顺序连接起来 数据块前有同步字符,后有检验字符 同步字符可由通信双方约定,也可采用ASCII码中规定的SYNC代码,即16H。 同步传送时,要求用时钟来实现发送端与接收端之间的同步。
波特率(Band rate) 通信线上传送的所有位信号都保持一致的信号持续时间,每一位的信号持续时间都由数据传送速度确定。 • 数据传送速率:每秒传送的二进制代码的位数。 • 波特率反映了串行通信的速率,也反映了对于传输通道的要求。波特率越高,要求传输通道的频率越宽,一般异步通信的波特率在50b/s~19200b/s之间。 • 相互通信的甲乙双方必须具有相同的波特率,否则无法成功地完成串行数据通信。
举例 • 假如在1秒内,89C51串口把100个FFH的数据发送出去,问波特率是多少?假若每个字符是包含一个起始位、一个终止位和8个数据位。
串行通信的基本特征是数据逐位顺序进行传送。串行通信的基本特征是数据逐位顺序进行传送。 根据串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平……等)不同,形成了多种串行通信的协议与接口标准。 常见的有: ☞通用异步收发器(UART)——本课程介绍的串口 ☞通用串行总线(USB) ☞I2C总线 ☞CAN总线 ☞SPI总线 ☞RS-485,RS-232C,RS422A标准……等等
串行口及串行通信技术 • 串行通信基本知识 • 89C51串口及其应用 • 两个单片机之间的通信 • 单片机与PC机之间的通信
89C51的串行接口 • 概述 • 有一个可编程全双工异步串行通信接口(UART) (Universal Asynchronous Receiver/Transmitter) • 管脚:TXD(P3.1)、RXD(P3.0) • 可同时发送、接收数据(Transmit/Receive) • 有四种工作方式,帧格式有8、10、11位。 • 波特率(Baud rate)可设置 波特率:每秒钟传送二进制数码的位数,也叫比特数,单位为b/s,即位/秒。
图7-7 return
串行口结构 引脚RXD (P3.0串行数据接收端) 引脚TXD (P3.1串行数据发送端) MOV SBUF, A :发送数据到串口引脚 MOV A , SBUF :接收数据 RI :从串口上接收数据到SBUF RI=1 TI :数据从SBUF向外发送完 TI=1
MCS-51串行接口寄存器 • SBUF——串行口数据缓冲器 • SCON——串行口控制寄存器 • PCON——电源及波特率选择寄存器
SM0 9FH SM1 9EH SM2 9DH 9CH REN TB8 9BH RB8 9AH TI 99H RI 98H 接收中断标志 工作方式选择 发送中断标志 多机通信控制位 允许串行接收位 接收数据的第9位 发送数据的第9位 控制寄存器SCON • SM2置1,多机通信,用于方式2和方式3 • D8=1,地址帧 • D8=0,数据帧 • SM2置0,不属于多机通信
SM0 SM1 工作方式 功能 波特率 0 0 方式0 8位同步移位寄存器 fosc/12 0 1 方式1 10位UART 可变 1 0 方式2 11位UART fosc/64或fosc/32 1 1 方式3 11位UART 可变 串行方式的定义 例:设串行口工作在方式1,允许接收,则指令为: MOV SCON,#01010000B
SMOD × × × GF1 GF0 PD IDL 电源及波特率选择寄存器PCON 87H 串行通信只用该位,为1时,波特率×2;为0时不变。
串行口四种工作方式应用比较 波特率的设定可参见表7.2,实际无需计算。 • 方式的选择由SM1、SM0实现。 表
方式0 在方式0下,串行口作同步移位寄存器用,其波特率固定为fosc/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口。 方式0用于扩展I/O口输出
方式1 串行口为波特率可调的10位通用异步接口UART。每发送或接收的一帧信息中,包括1位起始位0,8位数据位和1位停止位1。 10位的帧格式
方式2 串行口为11位UART,传送波特率与SMOD有关。发送或接收的一帧数据中包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验)和1位停止位1。 11位的帧格式
方式3 方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。
在方式2中,波特率取决于PCON中的SMOD值: • 当SMOD=0时,波特率为fosc/64; • 当SMOD=1时,波特率为fosc/32. • 即波特率 = 。 SMOD 2 f osc 64 MCS-51串行口的波特率 1.方式0和方式2的波特率是固定的 • 在方式0中,波特率为时钟频率的1/12,即fosc/12,固定不变 图
波特率/(b/s) fosc/MHz SMOD 定时器1 C/ 模式 初始值 方式0:1 M 方式2:375 k 方式1、3:62.5 k 19.2 k 9.6 k 4.8 k 2.4 k 1.2 k 137.5 k 110 110 12 12 12 11.059 11.059 11.059 11.059 11.059 11.986 6 12 × 1 1 1 0 0 0 0 0 0 0 × × 0 0 0 0 0 0 0 0 0 × × 2 2 2 2 2 2 2 2 1 × × FFH FDH FDH FAH F4H E8H 1DH 72H FEEBH T 波特率= 2. 方式1和方式3的波特率可变,由定时器1的溢出率决定 return RETURN
常用波特率及其产生条件 常用波特率通常按规范取1200、2400、4800、9600、…,若采用晶振12MHz和6MHz,则计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。 解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHz晶振。
串行口的应用 • 编程注意事项 • 设置串行口工作方式 • 设置波特率(SMOD,若是方式1、3,设置TI初值) • 若串行口接收数据,REN必须赋值为1 • TI和RI标志,须由软件清0 • 第9位
串行口工作方式0 用于扩展I/O口,外接74HC164(串入并出)或165(并入串出)。RXD作为数据输入/输出端,TXD作为同步时钟信号,接至时钟端。 8位数据为1帧,由低位到高位,无起始位和停止位。 波特率: fosc/12
89C51 RXD TXD P1.0 DATA CD4049 CLK STB 例 • 用89C51串行口外接CD4049或164串入-并出移位寄存器扩展8位并行口;8位并行口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。设发光二极管为共阴极接法。如图所示。
解:设数据串行发送采用中断方式,显示延迟通过延迟程序DELAY来实现。解:设数据串行发送采用中断方式,显示延迟通过延迟程序DELAY来实现。 • 程序清单: ORG 0000H LJMP MAIN ORG 0023H AJMP SBR ORG 2000H MAIN: MOV SCON, #00H;串行口方式0初始化 MOV A, #80H;最左一位发光二极管先亮 CLR P1.0;关闭并行输出 MOV SBUF, A;开始串行输出 LOOP: SJMP $ ;等待中断 SBR: SETB P1.0;启动并行输出 ACALL DELAY;显示延迟一段时间 CLR TI;清发送中断标志 RR A;准备右移一位显示 CLR P1.0;关闭并行输出 MOV SBUF, A;再一次串行输出 RETI
串行口工作方式1 • 10位通用异步串行口UART (Universal Asynchronous Receiver / Transmitter) ,1位起始位、8位数据、1位停止位。 • 波特率可调,由定时器T1的溢出率(定时时间)决定。 • 当一帧数据接收完毕后,必须同时满足以下条件,这次接收才真正有效: • REN =1 • RI=0, SBUF为空 • SM2=0或SM2=1时,收到停止位为1,收到的数据才能装到SBUF里。
串行口工作方式1 波特率 (定时器T1的溢出速率) PCON.7波特率选择位
例 89C51串行口按双工方式收发ASCII字符,最高位用作奇校验,要求传送码率为1200b/s,fosc=11.059MHz。 • 7位ASCII码+1位奇偶校验位=8 • A中1的个数为奇数,P=1,如果最高位为为P的值,则A的1的个数编程偶数,因此,要把P的值取反以后放入ASCII码最高位,才是奇校验。 • 设发送数据区的首地址为20H,接收首地址为40H 奇偶校验位:数据位和奇偶位中1的个数 偶校验:以上1的个数为偶数 奇校验:以上1的个数为奇数
ORG 0000H LJMP MAIN ORG 0050H MAIN: T1为模式2 时间常数,见表7-2 重装时常 启动T1 串行口方式1,允许接收 发送数据区首址 接收数据区首址 串行口开中断 CPU开中断 发送一个字符 等待中断 MOV TMOD, #20H; MOV TL1, #0E8H; MOV TH1, #0E8H; SETB TR1; MOV SCON, #50H; MOV R0, #20H; MOV R1, #40H; SETB ES; SETB EA; LCALL SOUT; SJMP $; 表
中断服务程序 ORG 0023H LJMP SBR1 ORG 0100H PUSH ACC PUSH PSW JNB RI,SEND LCALL SIN SJMP NEXT LCALL SOUT POP PSW POP ACC RETI SBR1: SEND: NEXT:
发送子程序 SOUT: CLR TI MOV A,@R0 MOV C,P CPL C MOV ACC.7,C MOV SBUF,A INC R0 RET ;取要发送的数据 ;若奇数个1,P=1 ;A中的ASCII码为奇校验 ;发送 ;修改发送数据区指针
接收子程序 SIN: ;读接收到的数据 CLR RI MOV A,SBUF JNB P,ER ANL A,#7FH MOV @R1,A INC R1 RET …… ;若偶数个1,出错 ;若奇数个1,ACC.7清0 ;数据存入接收区 ;修改接收数据区指针 ER: ;处理出错程序
串行口工作方式2和方式3 • 每帧11位:1位起始位,9位数据(D8~D0),1位停止位; • 第9位数据作为奇偶校验位或地址/数据标志位; • 发送时,第9位(D8)数据装入TB8;--串口自动完成 • MOV A ,DATA • MOV TB8, C • MOV SBUF, A • 接收时,第9位(D8)数据装入RB8; • D0~D7 SBUF • D8RB8 • RI =1 多机通信
串行口工作方式2和方式3 • 方式2,波特率位fosc/32或fosc/64; • 方式3,波特率可调,同方式1。
串行口初始化 地址指针R0长度 计数器R7置初值 取数据A PTB8 ASBUF TI =1? N Y 0TI,指针R0+1 N (R7)-1=0? Y 返回 用第9个数据位作奇偶校验位, 编制串行口方式2的发送程序。 • 例:设计一个发送程序,将片内RAM 50H~5FH中的数据串行发送;串行口设定为方式2状态,TB8作奇偶校验位,采用偶校验。
程序清单 TRT: MOV SCON, #80H ;方式2设定 MOV PCON, #80H ; 波特率=fosc/32 MOV R0,#50H ;首地址R0 MOV R7, #10H ;数据长度 LOOP:MOV A,@R0 ;取数据 MOV C, PSW.0 ;PTB8 MOV TB8, C MOV SBUF, A ;数据SBUF,启动发送 WAIT: JBC TI, CONT ;判断发送中断标志 SJMP WAIT CONT: INC R0 DJNZ R7, LOOP RET
串行口及串行通信技术 • 串行通信基本知识 • 89C51串口及其应用 • 两个单片机之间的通信 • 单片机与PC机之间的通信
两个单片机之间的通信 • 通信协议:帧格式、校验方式等 • 波特率
双机通信软件编程 查询方式 1) 甲机发送 编程将甲机片外1000H~101FH单元的数据块从串行口输出。定义方式2发送,TB8为奇偶校验位。发送波特率375 kb/s,晶振为12 MHz, SMOD=1。
参考发送子程序如下: MOV SCON,#80H ;设置串行口为方式2 MOV PCON,#80H ;SMOD=1 MOV DPTR,#1000H ;设数据块指针 MOV R7,#20H ;设数据块长度 START: MOVX A,@DPTR ;取数据给A MOV C,P MOV TB8,C ;奇偶位P送给TB8 MOV SBUF,A ;数据送SBUF,启动发送 WAIT: JBC TI,CONT ;判断一帧是否发送完。若送完,清TI,取下一个数据 AJMP WAIT ;未完等待 CONT: INC DPTR ;更新数据单元 DJNZ R7,START ;循环发送至结束 RET
2) 乙机接收 编程使乙机接收甲机发送过来的数据块,并存入片内50H~6FH单元。接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。 在进行双机通信时,两机应采用相同的工作方式和波特率。
参考接收子程序如下: MOV SCON,#80H ;设置串行口为方式2 MOV PCON,#80H ;SMOD=1 MOV R0,#50H ;设置数据块指针MOV R7,#20H ;设置数据块长度SETB REN ;启动接收WAIT:JBC RI,READ ;判断是否接收完一帧。若完,清RI,读入数据AJMP WAIT ;未完等待READ:MOV A,SBUF ;读入一帧数据a JNB PSW.0,PZ ;奇偶位为0则转JNB RB8, ERR ;P=1,RB8=0,则出错 SJMP RIGHT ;二者全为1,则正确PZ: JB RB8, ERR ;P=0,RB8=1,则出错RIGHT: MOV @R0, A ;正确,存放数据INC R0 ;更新地址指针DJNZ R7, WAIT ;判断数据块是否接收完CLR PSW.5 ;接收正确,且接收完清F0标志RET ;返回ERR: SETB PSW.5 ;出错,置F0标志为1 RET ;返回
7.3 多个89C51通信 • 多机通信步骤: • 主机SM2=0,所有从机的SM2=1,以便接收主机发来的地址。 • 主机发送地址,其中D8=1。 • 所有从机接收主机发来的地址,进入中断服务程序,并和本机地址比较,确认是否是被寻址从机。 • 被寻址从机清除SM2,以便接收数据,并向主机发回从机地址,供主机核对。其他从机保持SM2=1,并退出中断服务程序。 • 数据通信完毕,被寻址从机SM2=1,退出中断服务程序,等待下次通信。
串行口及串行通信技术 • 串行通信基本知识 • 89C51串口及其应用 • 两个单片机之间的通信 • 单片机与PC机之间的通信
PC机与单片机通信 • PC机是国内目前使用应用最广泛的微机,在与单片机串行接口后,可以方便地构成主从分布式多机系统。从机(单片机)作数据采集或实时控制,主机作数据处理或中央管理等。 • 这种多机系统在过程控制、仪表生产、生产自动化和企业管理等方面都有广泛的应用。此外微机和单片机串行接口后,可以大大方便单片机的开发过程。