《C51的串行通信》PPT课件.ppt_第1页
《C51的串行通信》PPT课件.ppt_第2页
《C51的串行通信》PPT课件.ppt_第3页
《C51的串行通信》PPT课件.ppt_第4页
《C51的串行通信》PPT课件.ppt_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第6 6章章 80C5180C51的串行通信接口的串行通信接口 主要内容: n串行接口技术及其与外设连接 教学建议教学建议 u串行接口扩展外设是嵌入式系统应 提倡的理念。 u需要指出的是,这些接口知识具有 普遍意义,在其他类型的嵌入式系 统里同样有用。 教学目的教学目的 通过本章学习: u了解嵌入式系统接口技术的概念 u熟悉和掌握串行接口扩展外设的思 想和方法 6.1 80C516.1 80C51的通信接口技术的通信接口技术 u在计算机系统中,CPU和外部通信有两种通信 方式:并行通信和串行通信。 并行通信,即数据的各位同时传送; 串行通信,即数据一位一位顺序传送。 8.2.1 串行通讯的基本知识 图6.1 两种通信方式的示意图 n特点 u并行通信: 需要多根传输线 传输速度快, 但传输线数量多,成本高,适合近距离传输。 u串行通信: 传输数据的各位在一条传输线上传送,能够节省传 输线, 在数据位数很多且远距离数据传送时,比较经济; 缺点是传送速度比并行通信要慢。 1.串行通信的分类 u按照串行数据的时钟控制方式,串行通信可分 为同步通信和异步通信两类。 u异步通信(Asynchronous Communication) 在异步通信中,数据通常是以字符为单位组成字符 帧传送的。 字符帧由发送端一帧一帧地发送,每一帧数据是低 位在前,高位在后,通过传输线被接收端一帧一帧 地接收。 发送端和接收端可以由各自独立的时钟来控制数据 的发送和接收,这两个时钟彼此独立,互不同步。 u字符帧(Character Frame) 字符帧也叫数据帧,由起始位、数据位、奇偶校验位 和停止位等四部分组成 图6.2 异步通信的字符帧格式 u字符帧(Character Frame)格式 起始位:位于字符帧开头,只占一位,低电平,用于 向接收设备表示发送端开始发送一帧信息。 数据位:紧跟起始位之后,用户根据情况可取5位、6 位、7位或8位,低位在前、高位在后。 奇偶校验位:位于数据位之后,仅占一位,用来表征 串行通信中是采用奇校验还是偶校验。 停止位:位于字符帧最后,高电平。通常可取1位、1.5 位或2位,用于向接收端表示一帧字符信息已经发送完 ,也为发送下一帧做准备。 在串行通信中,两相邻字符帧之间可以没有空闲位, 也可以有若干空闲位,这由用户来决定。 u波特率(baud rate) 波特率为每秒钟传送二进制数码元的数目。波特率用 于表征数据传输的速度,波特率越高,数据传输速度 越快; 波特率和字符的实际传输速率不同,字符的实际传输 速率是每秒内所传字符帧的帧数,和字符帧格式有关 。通常,异步通信的波特率为50-9600bit/s。 异步通信的优点是不需要传送同步时钟,字符帧长度 不受限制,故设备简单。缺点是字符帧中因包含起始 位和停止位而降低了有效数据的传输效率。 u同步通信(Synchronous Communication) 同步通信是一种连续串行传送数据的通信方式,一次 通信只传输一帧信息。这里的信息帧和异步通信的字 符帧不同,通常有若干个数据字符。 图6.3 同步通信的字符帧格式 2. 串行通信的制式 n在串行通信中数据是在两个站之间进行传送的 ,按照数据传送方向,串行通信可分为: 单工(simplex) 半双工(half duplex) 全双工(full duplex)三种制式。 图6.4 单工、半双工和全双工三种制式示意图 3. 串行通信的接口电路 u能够完成异步通信的硬件电路称为UART,即 通用异步接收器/发送器(Universal Asynchronous Receiver/Transmitter); u能够完成同步通信的硬件电路称为USRT( Universal Synchronous Receiver/Transmitter ); u既能够完成异步又能同步通信的硬件电路称为 USART(Universal Synchronous Asynchronous Receiver/Transmitter)。 4. 串行通信总线标准及其接口 uRS-232C是使用最早、应用最多的一种异步串行通信 总线标准。它是美国电子工业协会(EIA)1962年公 布、1969年最后修定而成的。其中RS表示 Recommended Standard,232是该标准的标识号,C 表示最后一次修定。 uRS-232C主要用来定义计算机系统的一些数据终端设 备(DTE)和数据电路终接设备(DCE)之间的电气 性能。 uRS-232C串行接口总线适用于:设备之间的通信距离 不大于15米,传输速率最大为20kB/s。 (1) RS-232C信息格式标准 RS-232C采用串行格式,该标准规定:信息的开始为 起始位,信息的结束为停止位;信息本身可以是5、6 、7、8位再加一位奇偶位。如果两个信息之间无信息 ,则写“1”,表示空。 图6.5 RS-232C信息格式 (2) RS-232C电平转换器 RS-232C规定了自己的电气标准,由于它是在TTL电路 之前研制的,所以它的电平不是+5V和地,而是采用负 逻辑,即: 逻辑“0”:+5V-+15V 逻辑“1”:-5V- -15V 因此,RS-232C不能和TTL电平直接相连,使用时必须 进行电平转换,否则将使TTL电路烧坏。 常用的电平转换集成电路是传输线驱动器MC1488和传 输线接收器MC1489。 (3) RS-232C总线规定 RS-232C标准总线为25根,采用标准的D型25芯插头座 。 与PC机联机通信时一般采用9针的接插件将串行口的信 号送出。 接插件的引脚信号如表6.1所示。 表6.1 接插件的引脚信号 DB-9信号名称方向含 义 3TXD输出数据发送端 2RXD输入数据接收端 7RTS输出请求发送(计算机要求发送数据) 8CTS输入清除发送(MODEM准备接收数据) 6DSR输入数据设备准备就绪 5SG-信号地 1DCD输入数据载波检测 4DTR输出数据终端准备就绪(计算机) 9RI输入响铃指示 u在计算机进行串行通信时,选择接口标准必须注意 以下两点: 通信速度和通信距离 通常的标准串行接口,都有满足可靠传输时的最大通 信速度和传送距离指标,但这两个指标具有相关性, 适当降低传输速度,可以提高通信距离。 抗干扰能力 通常选择的标准接口,在保证不超过其使用范围时都 有一定的抗干扰能力,以保证可靠的信号传输。但在 一些工业测控系统,通信环境十分恶劣,因此在通信 介质选择、接口标准选择时,要充分考虑抗干扰能力 ,并采取必要的抗干扰措施。 6.2 80C516.2 80C51的串行接口的串行接口 n80C51内部有一个可编程全双工串行通信接口 ,它具有UART的全部功能; n该接口不仅可以同时进行数据的接收和发送, 也可做同步移位寄存器使用; n该串行口有4种工作方式,帧格式有8位、10位 和11位,波特率可由软件设置,由片内的定时/ 计数器产生。 1. 80C51串行口结构 n80C51内部有两个独立的接收、发送缓冲器 SBUF,SBUF属于特殊功能寄存器。 n发送缓冲器只能写入不能读出,接收缓冲器只 能读出不能写入,二者共用一个字节地址( 99H)。 图6.6 串行口结构示意图 n与80C51串行口有关的特殊功能寄存器 u串行口数据缓冲器SBUF 分为发送SBUF和接收SBUF,两个在物理上独立 发送SBUF用于存放待发送的8位数据,写入SBUF将同 时启动发送; 接收SBUF存放已接收成功的8位数据,供CPU读取。 SBUF,SCON,PCON uu串行口数据缓冲器串行口数据缓冲器SBUFSBUF 两个SBUF共用一个地址99H,通过读、写指令来区别 对接收或发送缓冲器所进行的操作; * 写数据到发送SBUF指令:MOV SBUF,A * 读取接收SBUF数据指令:MOV A ,SBUF CPU在写SBUF时,就是修改发送缓冲器; 读SBUF时,就是读接收缓冲器的内容。 uu串行口控制寄存器串行口控制寄存器SCONSCON 位地址9FH9EH9DH9CH9BH9AH99H98H 位符号SM0SM1SM2RENTB8RB8TIRI 特殊功能寄存器SCON用来控制串行口的工作方式和 状态,由软件设置单片机用何种工作方式; 该寄存器字节地址为98H,可以位寻址; 单片机复位时,所有位全为0。 图6.7 SCON的各位定义 uuSCONSCON的各位的说明:的各位的说明: SM0 SM1工作方式功能波特率 0 0方式0 8位同步移位寄存 器 fosc/12 0 1方式110位UART可变 1 0方式211位UARTfosc/64或fosc/32 1 1 方式311位UART可变 pSM0、SM1:串行方式选择位。 表6.2 SM0、SM1的功能定义 uuSCONSCON的各位的说明(续):的各位的说明(续): pSM2:多机通信控制位 用于方式2和方式3中 在方式2和方式3处于接收时,若SM2=1, 且接收到的 第9位数据RB8为0时,不激活RI; 若SM2=1,且RB8=1时,则置RI=1; 在方式2、3处于接收或发送方式,若SM2=0,不论接 收到第9位RB8为0还是为1,TI,RI都以正常方式被 激活; 在方式1处于接收时,若SM2=1,则只有收到有效的 停止位后,RI置1; 在方式0中,SM2应为0。 uuSCONSCON的各位的说明(续):的各位的说明(续): pREN:允许串行接收位 由软件置位或清零; REN=1时,允许接收; REN=0时,禁止接收。 pTB8:发送数据的第9位 在方式2和方式3中,由软件置位或复位; 可做奇偶校验位。 pRB8:接收数据的第9位 与TB8相对应。 uuSCONSCON的各位的说明(续):的各位的说明(续): pTI:发送中断标志位 在方式0中,发送完8位数据后,由硬件置位; 在其他方式中,发送停止位之初由硬件置位。因此TI 是发送完一帧数据的标志,可以用指令JBC TI,rel来 查询是否发送结束。TI=1时,也可向CPU申请中断, 响应中断后都必须由软件清除TI。 pRI:接收中断标志位 在方式0中,接收完8位数据后,由硬件置位; 在其他方式中,接收停止位的中间由硬件置位。 同TI一样,也可以通过JBC RI,rel来查询是否接收完 一帧数据。 RI=1时,也可申请中断,响应中断后都必须由软件清 除RI。 uu电源及波特率选择寄存器电源及波特率选择寄存器PCONPCON PCON (87H) D7D6D5D4D3D2D1D0 位符号SMODGF1GF0PDIDL PCON主要是为CHMOS型单片机的电源控制而设置的 专用寄存器,不可位寻址,字节地址为87H。 在HMOS的8051单片机中,PCON除了最高位以外大多 数位都未做定义。 与串行通信有关的只有D7位(SMOD),该位为波特 率倍增位 当SMOD=1时,串行口波特率增加一倍,当SMOD=0 时,串行口波特率为设定值; 当系统复位时,SMOD=0。 图6.8 PCON的各位定义 2. 80C51串行的工作方式 n80C51的串行口有4种工作方式,通过对SCON 中的SM1、SM0位来决定。 方式0:同步移位寄存器方式,用于扩展并行 I/O接口。特点为: 一帧8位数据,无起始位和停止位; RXD:数据输入/输出端; TXD:同步脉冲输出端,每个脉冲对应一个数据位; 波特率固定,B = fosc/12 如: fosc=12MHz,B=1Mbit/s,每位数据占1s。 u发送操作 当一个数据写入发送缓冲器SBUF时,启动发送,串行 口将8位数据以fosc/12的波特率从RXD引脚输出(低位 在前) 发送完后置中断标志TI为1,请求中断; 在再次发送数据之前,必须由软件清TI为0; 发送时序如图6.9(a)所示 图6.9(a) 0方式发送时序 写入SBUF RXD输出 TXD TI D0D1D2D3D4D5D6D7 图6.10 方式0用于扩展I/O口输出 具体接线图如图6.10所示。其中74LS161为串 入并出移位寄存器。 u接收操作 在满足REN=1和RI=0的条件下,串行口即开始从 RXD端以fosc/12的波特率输入数据(低位在前); 当接收完8位数据后,置中断标志RI为1,请求中断; 再次接收数据之前,必须由软件清RI为0; 接收时序如图6.9(b)所示 写REN=1 RI=0 RXD输入 RI 图6.9(b) 0方式接收时序 图6.11 方式0用于扩展I/O口输入 具体接线图如图6.11 所示。其中74LS165为并 入串出移位寄存器。 方式1 方式1是串行口为波特率可调的10位通用异步通信方式 一帧数据10位:8位数据位,1个起始位(0),1个停止位 (1); RXD:接收数据端, TXD:发送数据端; 波特率:用T1作为波特率发生器, B=(2SMOD/32)T1溢出率 图6.12 10位的帧格式 u发送操作 当TI=0时、执行“MOV SBUF,A”指令后启动发送 操作; 发送电路会自动在8位发送字符前后分别添加1位起始 位和停止位,并在移位脉冲作用下在TxD线上依次发送 一帧信息; 发送完后,维持TxD线为高电平并置中断标志TI为1; TI需由软件复位; 写入 SBUF 图6.13(a)方式1发送时序图 TXD 数据输出 TI D0D1D2D3D4D5D6D7 停止位 起始位 检测 负跳变 u接收操作 接收时,由REN置1允许接收; 接收器以所选用波特率的16倍的速率对RxD引脚进行 采样。当采样1到0的跳变时,再连续采样8次,如果采 样值都为0,表示接收到有效起始位,否则起始位无效 ,重新启动接收过程; 确认接收到起始位后,就开始接收本帧的其余数据, 在每一位信息的中间时刻采样3次,取其中两次以上相 同的值为该位信息的接收值,以保证可靠接收; 采样 RXD 输入数据 图6.13 (b)方式1接收时序图 D0D1D2D3D4D5D6D7 停止位 起始位 RI 检测 负跳变 u接收操作(续) 在接收到停止位时,接收电路必须满足两个条件: RI=0, 接收到的停止位为1 或者 SM2=0, 才能把接收到的8位数据存入SBUF(接收)中,把停 止位送入RB8中,同时置位中断标志RI,发串口中断 请求,完成一帧接收过程。 若不满足上述条件,所接收到的一桢信息将丢失,接 收器复位,并从新开始检测负跳变,以便接收下一帧 信息。 方式1接收时,应先用软件清除RI或SM2标志 方式2和方式3 方式2和方式3都是11位UART方式,由SCON中的SM0 、SM1两位编码确定; 一帧数据为11位:9位数据位,1个起始位(0),1个停止 位(1),第9位数据位在TB8/RB8中,常用作校验位和多 机通讯标识位。 RXD:接收数据端,TXD:发送数据端。 波特率: 方式2:B=(2SMOD/64)fosc 方式3:B=(2SMOD/32)T1溢出率 图6.14 11位的帧格式 u发送操作 发送时,先根据通信协议由软件设置TB8,然后用指令 将要发送的数据写入SBUF,启动发送器; 写SBUF的指令,除了将8位数据送入SBUF外,同时还 将TB8装入发送移位寄存器的第9位,并通知发送控制 器进行一次发送; 一帧信息就从TXD发送,在送完一帧信息后,TI被自 动置1; 在发送下一帧信息之前,TI必须由中断服务程序或查 询程序清0。 u接收操作 当REN=1时,允许串行口接收数据; 数据由RXD端输入,接收11位的信息; 当接收器采样到RXD端的负跳变、并判断起始位有效 后,开始接收一帧信息; 当接收器接收到第9位数据后,必须同时满足以下两个 条件: RI=0, SM2=0 或接收到的第9位数据为1 ,则接收数据有效,8位数据送入SBUF,第9位送入 RB8,并置RI=1; 若不满足上述两个条件,则信息丢失。 请注意: 与方式1不同, 方式2和3中装入RB8的是第9位 数据, 而不是停止位。所接收的停止位的值与SBUF、 RB8和RI都没有关系, 利用这一特点可用于多机通信中 。 图6.15 (a)方式1发送时序图 RXD输入 RI D0D1D2D3D4 D5 D6 RB8 停止位 起始位 D7 写入 SBUF TXD输出 TI D0D1D2D3D4 D5D6 TB8 停止位 起始位 D7 检测 负跳变 图6.15 (b)方式1发送时序图 u方式2/3发送与接收时序如图6.15所示 3. 80C51串行口的波特率 在串行通信中,收发双方对传送的数据速率即波特率 要有一定的约定; 80C51单片机的串行口通过编程可以有4种工作方式。 其中,方式0和方式2的波特率是固定的,方式1和方式 3的波特率可变,由定时器T1的溢出率决定。 方式0的波特率 在方式0中,波特率为时钟频率的1/12,即: 串行口方式0波特率 = fosc/12,固定不变。 方式2的波特率 在方式2中,波特率由波特率系数和系统时钟频率fosc 决定。当SMOD=0时,波特率为fosc/64;当SMOD=1 时,波特率为fosc/32。即: 在方式1和方式3下,波特率由定时器T1的溢出率和 波特率系数共同决定。即: 方式1和方式3的波特率 方式2波特率 = 方式1和方式3的波特率 = 溢出率 方式1和方式3的波特率计算 T1为方式2的时间常数: X = 28 - t/T 溢出时间: t= (28 -X)T = (28 -X)12/ fosc T1溢出率=1/t= fosc /12(28 -X) 波特率B=(2SMOD /32)fosc/12(28-X) 串行口方式1、3,根据波特率选择T1工作方式,计算 时间常数。 T1选方式2: TH1=X= 28-fosc/122SMOD/(32B) T1选方式1用于低波特率,需考虑T1重装时间常数时 间。 串行口初始化编程格式: SIO: MOVSCON ,#控制状态字 ;写方式字且TI=RI=0 (MOVPCON ,#80H);波特率加倍 (MOVTMOD ,#20H) ;T1作波特率发生器 (MOVTH1 ,#X) ;选定波特率 (MOVTL1 ,#X) (SETBTR1) (SETBEA) ;开串行口中断 (SETBES) 初始化编程: MOVTMOD,#20H MOVPCON,#80H MOVTH1,#0F3H MOVTL1,#0F3H SETB TR1 MOVSCON,#50H 【解】:x = 2562SMODfosc / (24003212) = 242.98243 = F3H 同理,fosc = 11.0592MHz,波特率为2400。设SMOD = 0 则 x = F4H 例:若fosc = 6MHz,波特率为2400,设SMOD = 1,则定 时/计数器T1的计数初值为多少?并进行初始化编程。 6.36.3 80C5180C51单片机串行通信应用单片机串行通信应用 n主要三个方面: 波特率的确定及初始化 串行口工作方式初始化 收/发数据操作 1.编程要点: 1. 1. 编编编编程要点程要点(续续续续):): u波特率:固定波特率、可变波特率 使用可变波特率时,必须先确定定时器T1的计数初 值,对T1进行初始化(不允许定时器T1中断)。 u串行通信的编程方式: 查询方式:查TI(发送)、RI(接收)是否为1。 中断方式:预先开串行中断,当TI或RI为1,自动产 生中断,在中断服务程序中,再查询TI、RI标志, 判断是发送还是接收中断。 u注意:不管采用何种方式,查询查询 完后必须须清 除TI或RI标标志,系统统不会自动动清除。 uu查询方式发送流程图查询方式发送流程图 uu查询方式接收流程图查询方式接收流程图 2. 2. 80C5180C51单单单单片机串行通信片机串行通信应应应应用用举举举举例例 n80C51单片机之间的串行通信主要可分为双机 通信和多机通信。 (1) 串口方式0应用 n 80C51单片机串行口方式0为移位寄存器方式 ,外接一个串入并出的移位寄存器,就可以扩 展一个并行口。 MOVSCON,#00H;选方式0 SETB P1.0;选通74LS164 MOVA,#DATA;置要发送的数据 MOVSBUF,A;数据写入SBUF并启动发送 WAIT: JNBTI,WAIT;一个字节数据发送完吗? CLRTI CLRP1.0;关闭74LS164选通 n发送:74LS164为串入并出移位寄存器。如图6.9所示: 例:方式0的应用。 MOVR0,#50H;R0作片内RAM地址指针 MOVR7,#02H;接收字节计数 RQ: CLRP1.0;允许置入并行数据 SETB P1.0;允许串行移位 MOVSCON,#10H;串口方式0,并入接收允许 JNBRI,$;等待接收一帧数据 CLRRI MOVA,SBUF MOVR0,A;存入片内RAM INCR0 DJNZ R7,RQ n接收:74LS165为8位并入串出移位寄存器。如图6.10 所示。 (2) 双机通信 u如果两个单片机系统距离较近,就可以将它们的串行 口直接相连,实现双机通信。如图6.13所示。 u对于双机异步通信的程序通常采用两种方法:查询方 式和中断方式。 图6.16 双机异步通信接口电路 查询方式 u甲机发送:编程将甲机片外1000H-101FH单元的数据 块从串行口输出。定义方式2发送,TB8为奇偶校验位 。发送波特率375K,晶振为12MHz,所以SMOD=1。 MOVSCON,#80H;设置串行口为方式2 MOVPCON,#80H;SMOD=1 MOVDPTR,#1000H;设数据块指针 MOVR7,#20H;设数据块长度 u发送子程序参考如下: START:MOVX A,DPTR;取数据给A MOVC,P MOVTB8,C;奇偶位P给TB8 MOVSBUF,A;数据送SBUF,启动发送 WAIT:JBCTI,CONT;发送完,清TI,取下一个数据 AJMP WAIT;未完等待 CONT: INCDPTR;更新数据单元 DJNZ R7,START;循环发送至结束 RET u发送子程序(续) MOVSCON,#80H ;设置串行口为方式2 MOVPCON,#80H ;SMOD=1 MOVR0,#50H ;设置数据块指针 MOVR7,#20H ;设置数据块长度 SETBREN ;启动接收 WAIT:JBCRI,READ ;接收完,清RI,读入数据 SJMPWAIT;未完等待 READ:MOV A,SBUF;读入一帧数据 u乙机接收:编程使乙机接收甲机发送过来的数据块, 并存入片内50H-6FH单元。接收过程要求判断RB8, 若出错置F0标志为1,正确则置F0标志为0,然后返回 。两机应采用相同的工作方式和波特率。 u接收子程序参考如下: JNBPSW.0,PZ;奇偶位为0则转 JNBRB8, ERR;P=1,RB8=0,则出错 SJMPRIGHT;二者全为1,则正确 PZ:JB RB8, ERR;P=0,RB8=1,则出错 RIGHT:MOVR0, A;正确,存放数据 INCR0;更新地址指针 DJNZR7, WAIT;判断数据块是否接收完 CLRPSW.5;接收正确,且接收完清F0标志 RET;返回 ERR: SETBPSW.5;出错,置F0标志为1 RET;返回 u接收子程序(续) 中断方式 n在很多应用中,双机通信的接收方都采用中断的方式 来接收数据,以提高CPU的工作效率;发送方仍然采 用查询方式发送。 u甲机发送 上面的通信程序,收发双方是采用奇偶位TB8来进行 校验的,这里介绍一种用累加和进行校验的方法。 编程将甲机片内60H-6FH单元的数据块从串行口发送 ,在发送之前将数据块长度发送给乙机,当发送完16 个字节后,再发送一个累加校验和。 定义双机串行口方式1工作,晶振为11.059MHz,波 特率2400,定时器T1按方式2工作,经计算得到定时 器预置值为0F4H,SMOD=0。 MOVTMOD,#20H;设置定时器1为方式2 MOV TL1,#0F4H;设置预置值 MOV TH1,#0F4H SETBTR1;启动定时器1 MOVSCON,#50H;设置串行口为方式1, ;允许接收 START: MOVR0,#60H;设置数据指针 MOVR5,#10H;设置数据长度 MOVR4,#00H;累加校验和初始化 MOVSBUF,R5;发送数据长度 WAIT1: JBCTI,TRS;等待发送 AJMPWAIT1 TRS:MOVA,R0;读取数据 u发送子程序参考如下: MOVSBUF,A;发送数据 ADDA,R4 MOVR4,A;形成累加和 INCR0;修改数据指针 WAIT2:JBCTI,CONT;等待发送一帧数据 AJMPWAIT2 CONT:DJNZR5,TRS;判断数据块是否发送完 MOVSBUF,R4;发送累加校验和 WAIT3:JBCTI,WAIT4;等待发送 AJMPWAIT3 WAIT4:JBCRI,READ;等待乙机回答 AJMPWAIT4 READ:MOVA,SBUF;接收乙机数据 JZRIGHT;00H,发送正确,返回 AJMPSTART;发送出错,重发 RIGHT:RET u发送子程序(续): u乙机接收 乙机接收甲机发送的数据,并存入以2000H开始的片外 数据存储器中; 首先接收数据长度,接着接收数据,当接收完16个字节 后,接收累加和校验码,进行校验; 数据传送结束后,根据校验结果向甲机发送一个状态字 ,00H表示正确,0FFH表示出错,出错则甲机重发; 接收采用中断方式。设置两个标志位(7FH,7EH位) 来判断接收到的信息是数据块长度、数据还是累加校验 和。 例:假定甲、乙机以方式 1 进进行串行数据通信,其波特率 为为 1200 。甲机发发送,发发送数据在外部 RAM 4000H 401FH 单单元中。乙机接收,并把接收到的数据块块首末地址 及数据依次存入外部 RAM 50000H 开始的区域中。 p编编程说说明: 假设晶振频率为 6 MHz ,按 1200 波特率,计算定时 器 1 的计数初值; SMOD0 ,波特率不倍增,PCON = 00H 。 p解题说题说 明: 串行发送的内容 包括数据块的首 末地址和数据两 部分内容。对数 据块首末地址的 传送以查询方式 进行,然后再以 查询方式传送数 据。 接收流程图如下 : p解题说题说 明: 串行接收的内容包 括数据块的首末地 址和数据两部分内 容。对数据块首末 地址的接收以查询 方式进行,而数据 则以中断方式接收 。因此在程序中要 先禁止串行中断, 后允许串行中断。 接收流程图如下: p数据发发送、接收均采用中断方式的程序清单单: p程序清单单(续续): p程序清单单(续续): p程序清单单(续续): p程序清单单(续续): p程序清单单(续续): (3) 多机通信 u80C51串行口的方式2和方式3有一个专门的应用领域 ,即多机通信。 u这一功能通常采用主从式多机通信方式,在这种方式 中,用一台主机和多台从机。 u主机发送的信息可以传送到各个从机或指定的从机, 各从机发送的信息只能被主机接收,从机与从机之间 不能进行通信。 u图6.13是多机通信的一种连接示意图。 u多机通信连接示意图 图6.17 多机通信连接示意图 n多机通信的实现 u主要依靠主、从机之间正确地设置与判断多机通信位 SM2和发送或接收的第9位数据来(TB8或RB8)完成 的,二者的作用如下: p在单片机串行口以方式2或方式3接收时,若SM2=1, 表示置多机通信功能位,有两种情况: 接收到第9位数据为1,此时数据装入SBUF,并置 RI=1,向CPU发中断请求; 接收到第9位数据为0,此时不产生中断,信息将 被丢失,不能接收。 p若SM2=0,则接收到的第9位信息无论是1还是0,都产 生RI=1的中断标志,接收的数据装入SBUF。根据这 个功能,就可以实现多机通信。 u在编程前,首先要给各从机定义地址编号。 u在主机想发送一个数据块给某个从机时,它必须先送 出一个地址字节,以辨认从机。 n编程实现多机通信的过程: 主机发送一帧地址信息,与所需的从机联络。主机应 置TB8为1,表示发送的是地址帧。 所有从机初始化设置SM2=1,处于准备接收一帧地址 信息的状态。 n n 编程实现多机通信的过程(续):编程实现多机通信的过程(续): 各从机接收到地址信息,因为RB8=1,则置中断标志 RI。中断后,首先判断主机送过来的地址信息与自己 的地址是否相符。对于地址相符的从机,置SM2=0, 以接收主机随后发来的所有信息。对于地址不相符的 从机,保持SM2=1的状态,对主机随后发来的信息不 理睬,直到发送新的一帧地址信息。 主机发送控制指令和数据信息给被寻址的从机。其中 主机置TB8为0,表示发送的是数据或控制指令。对 于没选中的从机,因为SM2=1,RB8=0,所以不会产 生中断,对主机发送的信息不接收。 n主从式多机通信亦存在通信协议问题。一般通信协议 都有通用标准,协议较完善,但很复杂。这里仅规定 几条基本的协议: 80C51单片机构成的多机通信系统最多允许255台从机 (因为主机通常把从机地址作为8位数据发送),其地 址分别为00H-FEH。 “地址”FFH是对所有从机都起作用的一条控制命令, 该命令使被寻址从机恢复SM2 =1的状态。 主机首先发送地址帧,被寻址的从机返回本机地址给 主机,再判断地址相符后主机给被寻址从机发送控制 命令,被寻址从机根据其命令向主机回送自己的状态 ,若主机判断状态正常,主机开始发送或接收的第一 个字节是数据块的长度。 D7D6D5D4D3D2 D1D0 ERR00000TRDYRRDY p假定主机发送的控制命令代码为: 00H:主机发送、从机接收; 01H:从机发送、主机接收; 其它:非法命令。 p从机状态字格式为: 其中:ERR=1,从机接收到非法命令; TRDY=1,从机发送准备就绪; RRDY=1,从机接收准备就绪。 主机程序 主机程序,由主机主程序和主机通信子程序组成; 主机主程序用于定时器T1初始化,串行口初始化和传 递主机通信子程序所需入口参数; 主机通信子程序用于主机和从机间一个数据块的传送 程序流程图如图6.14所示。 n通信程序包括主机程序和从机程序两部分。 图6.14 主程序流程图 n程序中所用寄存器分配如下: R0:存放主机发送数据块起始地址; R1:存放主机接收数据块起始地址; R2:存放被寻址从机地址; R3:存放主机发出命令; R4:存放发送数据块长度; R5:存放接收数据块长度。 START:MOVTMOD,#20H;定时器T1方式2 MOVTH1,#0F4H;定时器T1初值 MOVTL1,#0F4H;波特率为1200bps SETBTR1;启动T1工作 MOVSCON,#0D8H;串行口方式3,允许接收, ;SM2=0, TB8=1 MOVPCON,00H MOVR0,#40H;发送数据块首址送R0 MOVR1,#20H;接收数据块首址送R1 MOVR2,#SLAVE;被寻址从机地址送R2 MOVR3,#00H;主机发从机收命令 MOVR4,#20;发送数据块长度送R4 MOVR5,#20;接收数据块长度送R5 ACALL COMMUT;调用主机通信子程序 SJMP$;停机 u主机参考主程序: 从机程序 从机程序有从机主程序和从机中断服务程序组成。从 机主程序用于定时器T1初始化、串行口初始化和中断 初始化。从机中断服务程序用于对主机的通信。 从机主程序流程图如图6.14

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论