1、9.1 串行通讯基础串行通讯基础数据交换的方式总体上分为两种数据交换的方式总体上分为两种:即并行数据通信和串行数据通信即并行数据通信和串行数据通信.如果距离小于如果距离小于30m,可采用并行数据通信方式;,可采用并行数据通信方式; 当距离大于当距离大于30m时,则要采用串行数据通信方式。时,则要采用串行数据通信方式。第九章第九章 串行通讯接口设计串行通讯接口设计一一 、串行通讯的分类、串行通讯的分类(一一)、异步通讯、异步通讯1.发送端和接收端要有互相独立的时钟源。发送端和接收端要有互相独立的时钟源。 2.在帧格式中,一个字符数据由四部分组成:在帧格式中,一个字符数据由四部分组成:起始位、数据
2、位、奇偶校验位和停止位。起始位、数据位、奇偶校验位和停止位。起始位:起始位:起始位起始位“0”0”,在通讯线上不传送数据时保持逻辑,在通讯线上不传送数据时保持逻辑“1”1”。数据位:数据位:可以是可以是5 5、6 6、7 7或或8 8位,规定低位在前,高位在后。位,规定低位在前,高位在后。奇偶校验位:奇偶校验位:也可以用于确定一帧的字符所代表信息(地址也可以用于确定一帧的字符所代表信息(地址/ /数据等)。数据等)。停止位:停止位:(逻辑(逻辑“1”1”)是一个字符数据的结束标志。)是一个字符数据的结束标志。波特率波特率:-:-所传二进制位数所传二进制位数/ /秒秒字符传输速率字符传输速率:-
3、:-所传帧数所传帧数/ /秒秒 例例: 1200bps: 1200bps的字符帧的字符帧(13(13位位),), 则则: : 字符传输速率字符传输速率=1200/13=1200/13帧帧/ /秒秒(二二)、同步通讯、同步通讯仅在数据块开始时用同步字符仅在数据块开始时用同步字符SYNC来指示,来指示, 同步字符可以单同步字符,也可以使双同步字符方式。同步字符可以单同步字符,也可以使双同步字符方式。 国际标准为单字符国际标准为单字符 16H, 双字符双字符 EBH, 90H. 二二. 串行通讯的制式串行通讯的制式 1.半双工制式半双工制式单片机AUART单片机BUART.TXRXTXRXGNDGN
4、D.RTSRTS74125741252.2.全双工制式全双工制式单片机AUART单片机BUART.TXRXTXRX.GNDGND三三. 串行通讯中的调制解调器串行通讯中的调制解调器1.MODEM的作用和原理的作用和原理2.MODEM的分类的分类3.MODEM的调制的调制/解调解调三、串行通信中的调制解调器三、串行通信中的调制解调器 1、MODEM的作用和原理的作用和原理2、MODEM的分类的分类3、MODEM的调制的调制/解调解调1)应答式)应答式MODEM的发送器的发送器2050HZ发送空号(逻辑发送空号(逻辑0),),2225HZ -发送传号(逻辑发送传号(逻辑1)。)。2)应答式)应答式
5、MODEM的接收器的接收器RXD接收信号:接收信号:“1”(2225HZ) 上通道上通道 “0”(2025HZ) 下通道下通道四四. 串行串行I/O数据的实现数据的实现串行数据串行数据-并行数据的实现并行数据的实现(一一)软件实现软件实现(二二)硬件实现硬件实现 ORG 1000HSOUT : MOV R0, #20HNEXT: MOV R2, #0BH CLR C MOV A, R0 RLC A INC R0 LOOP: MOV R1, A ANL A, #01H ORL P1, A MOV A, R1 ACALL DELAY RRC A SETB C DJNZ R2, LOOP DJNZ
6、LEN , NEXT(一一).软件实现软件实现20H C7H21H . .LNE LP1.08031CYR1012345671T8数据0开始位移位脉冲TXD发送缓冲器TXBUF写缓冲命令.(二二) 硬件实现硬件实现12345678910 11 12 13 14 15TTTXCLK开始位TXD空闲.012345671R8数据0开始位移位脉冲RXD接收缓冲寄存器RXBUF读缓冲命令.停止位.对对RXD的采样的采样:(1)若连续采样若连续采样8个负脉冲个负脉冲RXD为低电平则为启动位为低电平则为启动位.(2)每隔每隔13个脉冲采样个脉冲采样2次次RXD,按按2/3原则确定数据值原则确定数据值(3).
7、错误校验错误校验五五. . 串行通讯的差错控制技术串行通讯的差错控制技术 在信息码元中增加一定数量的多余码元(称为监督码在信息码元中增加一定数量的多余码元(称为监督码元),在传输过程中如果受到干扰,某位码元发生了变化,元),在传输过程中如果受到干扰,某位码元发生了变化,相当于破坏了他们之间的约束关系。相当于破坏了他们之间的约束关系。 1 1奇偶校验奇偶校验在每个信息码组之后附加一位监督码元,使整个码组中在每个信息码组之后附加一位监督码元,使整个码组中“1”的个数成为奇数或偶数,分别称为奇校验或偶校验。的个数成为奇数或偶数,分别称为奇校验或偶校验。 2. 2. 校验和校验和在数据发送时,发送方对
8、块中数据简单求和,产生一单字在数据发送时,发送方对块中数据简单求和,产生一单字节校验字符(校验和)附加到数据块结尾,节校验字符(校验和)附加到数据块结尾, 3. 循环冗余码校验循环冗余码校验CRC 4. 海明码校验海明码校验六六. 设备地址问题设备地址问题 网络中每个节点都有一个唯一的地址码网络中每个节点都有一个唯一的地址码.产生方法产生方法: (1) 软件中直接写定软件中直接写定 方法简单方法简单,无附加电路无附加电路,修改不方便修改不方便,设备不能互换设备不能互换; (2) 通过外部开关进行设置通过外部开关进行设置 可以动态改变可以动态改变,组织灵活组织灵活,但占用资源但占用资源,机械开关
9、不可靠机械开关不可靠; (3) 用非易失存储器保存用非易失存储器保存,可以在线修改可以在线修改,灵活灵活,可靠可靠,但需但需要增加硬件设备要增加硬件设备,软件较复杂软件较复杂.七七. 传输介质、总线电气特性、负载量等问题传输介质、总线电气特性、负载量等问题 a .传输介质传输介质 普通双绞线普通双绞线 RVV2*1.0 建筑物内部建筑物内部,短距离场合短距离场合,干扰不严重情况干扰不严重情况 屏蔽双绞线屏蔽双绞线 RVVP2*1.0 建筑物之间空旷地带建筑物之间空旷地带,距离远距离远,干扰大情况干扰大情况 同轴电缆同轴电缆 SYV 75-5 适合做干线适合做干线 光导纤维光导纤维(单膜和多膜单
10、膜和多膜) 高速网络高速网络,主干主干线线,Internet接口接口,计算机之间局域网络计算机之间局域网络 b. 总线电气特性总线电气特性RS-485通讯信号的传输距离和波特率主要受总线分布通讯信号的传输距离和波特率主要受总线分布电容的影响电容的影响. 分布电容的实际测量值为分布电容的实际测量值为: 网线网线(5类线类线), 5000pf/100m=50pf/m RVV线线 , 6200pf/100m=62pf/m 工程实践证明工程实践证明:485总线负载电容上限为总线负载电容上限为75000pf 所以所以,使用使用RVV线时距离为线时距离为: L=75000/62=1209米米 使用使用5类
11、线时类线时L=75000/50=1500米米C .负载量负载量RS-485通讯发送驱动芯片的输出电流能力约为通讯发送驱动芯片的输出电流能力约为60mA,接收器吸收电流的情况有所不同接收器吸收电流的情况有所不同,所以有所以有32站、站、128站和站和256站的区别。站的区别。对于对于MAC1387E驱动器,等效负载约为并联电阻驱动器,等效负载约为并联电阻37欧姆。欧姆。第二节第二节 MCS-51的串行接口的串行接口一、串行口的结构一、串行口的结构RXD(P3.0)发送发送SBUF(99H)门门88 串行口结构框图串行口结构框图 TXD(P3.1)中断中断接收接收SBUF(99H)定定时时器器T1
12、fosc2分频器分频器发送控制器发送控制器接收控制器接收控制器串寄串寄行存行存控器控器制制 SCON (98H)输入移位寄存器输入移位寄存器TIRI内内 部部 总总 线线发送过程:发送过程: MOV A,#7FH MOV SBUF,A串口自动发送:串口自动发送:起始位,起始位,7FH,TB8,停止位停止位接收退出接收过程:接收过程: MOV A ,SBUFRXD检测起始位。检测起始位。串口自动接收:串口自动接收:7FH,TB8,停止位停止位二、串行口的工作方式二、串行口的工作方式1. 方式方式0同步移位寄存器同步移位寄存器2. 方式方式1 10位异步收发位异步收发3. 方式方式2 11位异步收
13、发位异步收发4. 方式方式3 11位异步收发位异步收发要求:要求:SCON,(,(SM2=0,RB8=0,TB8=0) MOV SBUF,A MOV A, SBUF 发送(发送(TI=0)时:)时: SBUF: TXD发移位脉冲。发移位脉冲。 RXD发送数据。发完一帧后,发送数据。发完一帧后,TI=1,中断,中断 接收(接收(RI=0,REN=1)时:)时: SBUF: TXD发移位脉冲。发移位脉冲。 RXD接收数据。接收一帧后,接收数据。接收一帧后,RI=1,中断,中断2.2.方式方式1(101(10位异步收发位异步收发) )要求要求:SCON:SCON中中(SM2 =0,TB8 =0)(S
14、M2 =0,TB8 =0)发送发送(TI=0)时时:发送开始发送开始:执行执行 MOV SBUF, A TXD发送发送: (起始位:起始位:1位位,数据位:数据位:8 8位位,停止位停止位: 1位位)发完一帧后发完一帧后:TI=1和和TXD=高电平高电平,并产生中断并产生中断接收接收(RI=0和和REN=1)时时:RXD接收字符帧接收字符帧若若RI=0和和SM2=0(或收到停止位或收到停止位),则接收字符送则接收字符送SBUF,停停止位送止位送RB8,RI=1, 发中断发中断.否则否则,字符不送字符不送SBUFTXDRXD3.3.方式方式2(112(11位异步收发位异步收发) )波特率固定波特
15、率固定(fosc/32, fosc/64)(fosc/32, fosc/64)发送发送(TI=0)时时:发送开始发送开始:执行执行 MOV SBUF, A TXD发送发送:(起始位起始位,数据位数据位, TB8 ,停止位停止位)发完一帧后发完一帧后:TI=1和和TXD=高电平高电平,并产生中断并产生中断接收接收(RI=0和和REN=1)时时:RXD接收字符帧接收字符帧若若RI=0和和SM2=0(或收到停止位或收到停止位),则接收字符送则接收字符送SBUF,第第9位送位送RB8, RI=1, 发中断发中断. 否则否则, 字符不送字符不送SBUF.TXDRXD4.4.方式方式3(113(11位异步
16、收发位异步收发) )波特率可调波特率可调, ,可利用可利用T1,T2T1,T2分频提供分频提供发送发送(TI=0)时时:发送开始发送开始:执行执行 MOV SBUF, A TXD发送发送:(起始位起始位,数据位数据位, TB8 ,停止位停止位)发完一帧后发完一帧后:TI=1和和TXD=高电平高电平,并产生中断并产生中断接收接收(RI=0和和REN=1)时时:RXD接收字符帧接收字符帧若若RI=0和和SM2=0(或收到停止位或收到停止位),则接收字符送则接收字符送SBUF,第第9位送位送RB8, RI=1, 发中断发中断. 否则否则, 字符不送字符不送SBUF.TXDRXD1. 方式方式0 波特
17、率固定为波特率固定为fosc/12 (fosc为单片机晶振频率为单片机晶振频率)三三. 串行口的通讯波特率串行口的通讯波特率3.方式方式1/3 波特率波特率=(2SMOD/32)(T1的溢出率的溢出率) =(2SMOD/32)(fosc/12(2K-x) ) 式中式中,K : 方式方式0, K=13 方式方式1, K=16 方式方式2 / 3, K=8根据给定的波特率根据给定的波特率,可以计算可以计算T1的计数初值的计数初值X。2. 方式方式2 波特率固定为波特率固定为(2SMOD/64)fosc.注意注意:1)T1初值和对应波特率间若有误差可通过初值和对应波特率间若有误差可通过fosc调整调
18、整. 2)T1在方式在方式1下的下的TC初值应考虑到重装时间初值应考虑到重装时间.第三节第三节 MCS-51串行口的应用串行口的应用1串行口在方式串行口在方式0下的应用下的应用串行移位输出串行移位输出例:串行通信方式例:串行通信方式0 0,扩展,扩展I/OI/O接口,接八个数码管,使内接口,接八个数码管,使内部数据存储器部数据存储器58H58H-5FH-5FH单元的内容为单元的内容为0XH0XH。 ORG 0050H SETB P3.3 ; 允许移位寄存器工作允许移位寄存器工作 MOV SCON, #0 ; 选串行通信方式选串行通信方式0 MOV R7, #08H ; 显示八个字符显示八个字符
19、 MOV R0, #5FH ; 先送最后一个显示字符先送最后一个显示字符 MOV DPTR, #TBA ; DPTR指向字形表首址指向字形表首址 DLO: MOV A, R0 ; 取待显示数码取待显示数码 MOVC A,A+DPTR ; 查字形表查字形表 MOV SBUF, A ; 送出显示送出显示 JNB TI, $ ; 一帧输出完?一帧输出完? CLR TI ; 已完,清中断标志已完,清中断标志 DEC R0 ; 修改显示数据地址修改显示数据地址 DJNZ R7, DLO CLR P3.3 ; 8位送完,关发送脉冲位送完,关发送脉冲 SJMP $ TBA: DB 0C0H,0F9H,0A4
20、H,B0H,99H,92H DB 82H,0F8H,80H,90H,83H,83H,0C6H DB 0A1H,86H,84H,0FFH,0BFH(一一) 串行口方式串行口方式1下的应用下的应用(查询方式查询方式)例:甲机只有收到乙机答应信号例:甲机只有收到乙机答应信号“00”后才可把存放在片外后才可把存放在片外RAM中的内容发送给乙机,中的内容发送给乙机,其发送数据格式为:其发送数据格式为:字节数字节数n数据数据1数据数据2数据数据n累加校验和累加校验和字节数字节数n:甲机将向乙机发送的数据字节数;甲机将向乙机发送的数据字节数;数据数据1数据数据n:甲机将向乙机发送的:甲机将向乙机发送的n个字
21、节数据;个字节数据;累加校验和:字节数累加校验和:字节数n,数据,数据1,数据,数据n,这(,这(n+1)的算术累加和(向高位进位丢失)。的算术累加和(向高位进位丢失)。乙机根据接收到的乙机根据接收到的“校验和校验和”判断收到的数据是否正确。判断收到的数据是否正确。若接收正确,向甲机发若接收正确,向甲机发“0F”信号,否则回发信号,否则回发“F0”信号。信号。 二二、串行口在其它方式下的应用串行口在其它方式下的应用(1)甲机查询方式发送子程序)甲机查询方式发送子程序发送程序约定:发送程序约定:波特率设置初始化:波特率设置初始化: 定时器定时器T1模式模式2工作,计数初值工作,计数初值F3H,
22、SMOD=1; 串行口初始化:串行口初始化: 方式方式1工作,启动发送;工作,启动发送;片内片内RAM和工作寄存器设置:和工作寄存器设置: 31H和和30H存放发送的数据块首地址;存放发送的数据块首地址; 2FH存放发送的数据块长度;存放发送的数据块长度; R6为累加和寄存器。为累加和寄存器。 甲机发送子程序框图如下:甲机发送子程序框图如下: 开始定时器,串行口初始化地址指针DPTR,长度计数器R7,校验寄存器R6置初值发送呼叫信号06H等待乙机回答是00H?发字节长度数发送数据发送完否?发送校验和等待乙机回答传送正确吗?返回FMT_RAM:TX_ACK:TX_BYTE:TX_NEW:TX_S
23、UM:NNYNY甲机发送子程序清单:甲机发送子程序清单:FMT_T_S:MOV TMOD,#20H ;波特率设置波特率设置MOV TH1,#0F3HMOV TL1,#0F3HSETB TR1MOV SCON,#50H ;串行口初始化,串行口初始化, 方式方式1并启动接收并启动接收MOV PCON,#80H ;置置SMOD=1FMT_RAM: MOV DPH,31H ;设置设置DPTR指针指针MOV DPL,30HMOV R7,2FH ;送字节数至送字节数至R7MOV R6,#00H ;清累加和寄存器清累加和寄存器TX_ACK:MOV A,#06H ;发呼叫信号发呼叫信号“06”MOV SBUF
24、,AWAIT1:JBCT1, RX_YES ;等待发送完一个字节等待发送完一个字节SJMP WAIT1RX_YES:JBCRI, NEXT1SJMP RX_YESNEXT1: MOV A,SBUF ;判断乙机是否同意接收,判断乙机是否同意接收, CJNEA,#00H,TX_ACK 不同意就继续呼叫不同意就继续呼叫TX_BYTES: MOV A,R7MOV SBUF,AADDA,R6 ;求累加和求累加和MOV R6,AWAIT2:JBCT1,TX_NEWSSJMP WAIT2TX_NEWS:MOVX A,DPTR ;发送数据发送数据MOV SBUF,AADDA,R6;形成累加和送形成累加和送R6
25、MOV R6,AINCDPTR;指针加指针加1WAIT3:JBCTI,NEXT2SJMP WAIT3NEXT2:DJNZ R7,TX_NEWS ;判发送结束判发送结束TX_SUM:MOV A,R6 ;数据已发送完,数据已发送完, 发累加和给乙机发累加和给乙机MOV SBUF,AWAIT4:JBCTI, RX_0FHSJMP WAIT4RX_0FH:JBCRI, IF_0FH;等待乙机回答等待乙机回答SJMP RX_0FHIF_0FH: MOV A, SBUF ;读入读入 CJNE A, #OFH, FMT_RAM ;判断传送则正确否判断传送则正确否 RET(2)乙机查询方式接收子程序乙机查询方
26、式接收子程序接收程序约定:接收程序约定:波特率设置初始化:同甲机发送子程序。波特率设置初始化:同甲机发送子程序。串行口初始化:同发送程序串行口初始化:同发送程序寄存器设置:寄存器设置:31H, 30H存放接收数据缓冲区首地址。存放接收数据缓冲区首地址。 R7数据块长度寄存器。数据块长度寄存器。 R6累加和寄存器。累加和寄存器。向甲机回答的状态信息:向甲机回答的状态信息:0FH为接收正常,为接收正常,FOH为传送出错,为传送出错,00H为同意接收数据。为同意接收数据。乙机接收子程序框图见下图乙机接收子程序框图见下图 开 始定 时 器 T1, 串 行 口 初 始 化地 址 指 针 赋 值 , 校
27、验 和寄 存 器 清 0FMT_RAM:接 收 呼 叫 信 号是 06H?向 甲 机 回 送 15H接 收 数 据 块 长 度向 甲 机 回 送 00HTX_15H:RX_BYTE:接 收 数 据 并 存入 片 外 RAMRX_NEW:地 址 指 针 DPTR加 1数 据 接 收 完 否 ?接 收 校 验 和RX_SUM:传 送 正 确 吗 ?向 甲 机 回 送 FOH向 甲 机 回 送 0FHTX_ERR:TX_RIG:返 回YNNYYN乙机接收子程序清单:乙机接收子程序清单:FMT_T_S:MOV TMOD,#20H ;T1初始化初始化 MOV TH1,#0F3H MOV TL1,#0F3
28、H SETB TR1 MOV SCON,#50H;串行口初始化方式串行口初始化方式1 , 并允许接收并允许接收 MOV PCON,#80H ;SMOD=1FMT_RAM: MOV DPH,31H;设置设置DPTR地址指针地址指针 MOV DPL,30H MOV R6,#00H;校验和寄存器清校验和寄存器清0RX_ACK:JBCRI,IF_06H;接收呼叫信号接收呼叫信号SJMP RX_ACKIF_06H:MOV A,SBUF ;判断呼叫信号是否有误判断呼叫信号是否有误CJNE A,#06H,TX_15HTX_00H:MOV A,#00H ;向甲机回送同意接收信号向甲机回送同意接收信号MOV S
29、BUF,AWAIT1:JBCTI,RX_BYTES ;等待应答信号发送完等待应答信号发送完SJMP WAIT1TX_15H:MOV A,#15H ;向甲机报告接收的向甲机报告接收的MOV SBUF,A 呼叫信号不正确呼叫信号不正确WAIT2:JBCTI,HAVE1SJMP WAIT2 HAVE1: LJMP RX_ACK;返回到开始接收呼叫返回到开始接收呼叫 信号状态信号状态RX_BYTES: JBCRI,HAVE2;接收数据块长度接收数据块长度SJMP RX_BYTESHAVE2: MOV A,SBUF;给长度寄存器赋值给长度寄存器赋值 MOV R7,A MOV R6,A;形成累加和形成累加
30、和RX_NEWS: JBCRI,HAVE3;接收数据接收数据SJMP RX_NEWSHAVE3:MOV A,SBUF;将接收到的数据存放入将接收到的数据存放入 MOVX DPTR,A外部外部RAMINCDPTRADDA,R6;形成累加和形成累加和MOV R6,ADJNZ R7,RX_NEWS ;判断是否接收完毕判断是否接收完毕RX_SUM:JBCRI,HAVE4;接收校验和接收校验和SJMP RX_SUMHAVE4:MOV A,SBUFCJNE A,R6,TX_ERRTX_RIGHT: MOV A,#0FH ;向甲机报告传输正确向甲机报告传输正确MOV SBUF,AWAIT3:JBCTI,GO
31、ODSJMP WAIT3TX_ERR:MOV A,#0F0H ;向甲机报告传送有误向甲机报告传送有误MOV SBUF,AWAIT4:JBCTI,AGAINSJMP WAIT4AGAIN:LJMP FMT_RAM;返回重新接收数据返回重新接收数据GOOD:RET;返回被调用的主程序返回被调用的主程序(二二).串行口方式串行口方式1下的应用下的应用(中断方式中断方式)(1)主程序框图)主程序框图 ORG 2100HTBLOCK DATA 20H LEN DATA 14H START: MOV TMOD, #20H; T1方式方式2 MOV TL1,#0F4H ;2400pbs MOV TH1, #
32、0F4H MOV PCON, #80H; SMOD=1 SETB TR1 MOV SCON, #40H; 串口方式串口方式1 MOV R0, #TBLOCK MOV A, LEN MOV R2, A MOV SBUF, A SETB EA WAIT: SETB ES SJMP WAIT 中断服务程序中断服务程序 ORG 0023H LJMP TXSVE ORG 2150HTXSVE: CLR RS; 串口关中断串口关中断 CLR TI MOV A, R0; 发送字符发送字符A MOV C, PSW.0; 形成奇校位形成奇校位 CPL C MOV ACC.7, C MOV SBUF, A DJN
33、Z R2, NEXT SJMP $ NEXT: INC R0 NN: RETI END(2)乙机中断接收子程序)乙机中断接收子程序设置三个标志位来判断设置三个标志位来判断所接收的信息所接收的信息 , 是数据是数据块长度,是数据还是校块长度,是数据还是校验和。验和。本例约定:本例约定:波特率:波特率:T1方式方式2工作,工作, 计数初值计数初值F4H, SMOD=1。串行口初始化:串行口初始化:方式方式1,启动接收。,启动接收。31H,30H存放在以存放在以 31H、30H (送(送DPTR)为地址)为地址 指针的片外指针的片外RAM中。中。32H数据块长度寄存单元。数据块长度寄存单元。33H累
34、加校验和寄存单元。累加校验和寄存单元。(三三).串行口方式串行口方式3下的应用下的应用(中断方式中断方式)设甲机发送,乙机接收,串行接口工作方式设甲机发送,乙机接收,串行接口工作方式3(每帧数据为(每帧数据为11位,第位,第9位用于奇偶校验),位用于奇偶校验),两机均选用两机均选用6MHz的振荡频率,波特率为的振荡频率,波特率为2400b/s,通信的功能为:通信的功能为:甲机:甲机:将片外将片外RAM 4000H407FH单元的内容向乙机发送,单元的内容向乙机发送,乙机乙机:对接收的信息进行奇偶校验对接收的信息进行奇偶校验(偶校验偶校验),P位值放位值放TB8中。中。若校验正确,则乙机向甲机回
35、发(若校验正确,则乙机向甲机回发(00H)。)。若奇偶校验有错,则乙机发出信号(若奇偶校验有错,则乙机发出信号(FFH)。)。接收甲机发送的数据,并写入以接收甲机发送的数据,并写入以4000H为首地址的片为首地址的片外外RAM中。中。(四四) 8051C语言通讯程序实例语言通讯程序实例1、通信协议的约定、通信协议的约定假定假定A机是发送者,机是发送者,B机是接收者。机是接收者。 当当A机开始发送时,先送一个机开始发送时,先送一个“AA”信号,信号, B机接收到后回答一个机接收到后回答一个“BB”,表示同意接收。表示同意接收。 当当A机收到机收到“BB”后,开始发送数据,每发送后,开始发送数据,
36、每发送一次求一次求“校验和校验和”,数据块发送完后发送,数据块发送完后发送“校验校验和和”。B机每接收到一个数据便计算一次机每接收到一个数据便计算一次“校验和校验和”,当收齐一个数据块后,当收齐一个数据块后,再接收再接收A机发来的校验和,并将它与机发来的校验和,并将它与B机求出的校验和进行比较。机求出的校验和进行比较。 若两者相等,说明接收正确,若两者相等,说明接收正确,B机回答机回答00H;若两者不等,说明接收不正确,若两者不等,说明接收不正确,B机回答机回答0FFH,请求重发。,请求重发。A机收到机收到00H回答结束发送;若收到的非零,则将数据再重发一次。回答结束发送;若收到的非零,则将数
37、据再重发一次。 双方约定的传输速率若为双方约定的传输速率若为1200b/s,查表可知,查表可知,在双方的在双方的fosc=11.0592MHz下,下,T1工作在定时器模式工作在定时器模式2,TH1=TL1=0E8H,PCON寄存器的寄存器的SMOD位为位为0。设置波特率启动定时器1设串行口工作方式发请求“AA”B机允许发送?指针初始化校验和清零发送一个数据字节并求校验和数据块已发送完发送检查和B机接收正确?返回NNNA机发送程序B机发送程序设置波特率启动定时器1设串行口工作方式等待A机联络A机请求发送发送应答信号“BB”指针初始化校验和清零接收一个数据字节并求校验和数据块收齐了吗?接受A机校验
38、和并与B机校验和比较接收正确?发出错标志“FFH”返回NN2、点对点通信程序、点对点通信程序人为规定一个为发送,一个为接收。人为规定一个为发送,一个为接收。要求两机串行口的波特率相同要求两机串行口的波特率相同。 A机发送程序机发送程序#include#defineucharunsigned char#defineTR 1 /发送接收差别值发送接收差别值TR=0发送发送uchar idata buf10;uchar pf;void init(void)/串行口初始化串行口初始化 TMOD=0 x20;/设设T1为定时器模式为定时器模式2TH1=0 xe8;/设定波特率设定波特率TL1=0 xe8
39、;PCON=0 x00;TR1=1;/启动启动T1SCON=0 x50; /串行口工作在方式串行口工作在方式1并允许接收并允许接收void send(uchar idata *d) uchar i;do SBUF=0 xaa; /发送联络信号发送联络信号“AA” while(TI= =0); /等待发送出去等待发送出去 TI=0; while(RI= =0); /等待等待B机回答机回答 RI=0; while(SBUF0 xbb)!=0); /B机未准备好,机未准备好, 继续联络(收到继续联络(收到“BB”吗)吗)do pf=0; /清校验和清校验和for(i=0;i16;i+) SBUF=d
40、i; /发送一个数据发送一个数据 pf+=di; /求校验和求校验和 while(TI=0);TI=0; SBUF=pf; /发送校验和发送校验和 while(TI= =0);TI=0; while(RI= =0);RI=0;/发送校验和发送校验和 while(SBUF!=0);/回答出错,则重发回答出错,则重发 void receive(uchar idata *d) uchar i; do while(RI=0);RI=0; while(SBUF0 xaa)!=0); /判判A机请求否机请求否 SBUF=0 xbb; while (TI=0);TI=0; while (1) pf = 0;
41、/清校验和清校验和 for(i=0;i16;i+) while (RI= =0);RI=0; di=SBUF;/接收数据接收数据 pf + =di; /求校验和求校验和 while (RI= =0);RI=0; /接收接收A机校验和机校验和 if(SBUFpf) = = 0) /比较校验和比较校验和 SBUF=0 x00; /检验和相同发检验和相同发“00” break; else SBUF=0 xff; /出错发出错发“FF”,重新接收,重新接收 while (TI=0);TI=0; B机接收程序机接收程序void main(void)init();if (TR= =0) send(buf)
42、; else receive(buf); 第四节第四节 8051多机通讯技术多机通讯技术在许多场合,需要多台单片机互相配合才能完成某个过程在许多场合,需要多台单片机互相配合才能完成某个过程或任务。以完成各种功能。或任务。以完成各种功能。 网络形式有网络形式有4种:种:星形网络、串行总线形网络、环形网络、树形网络结构星形网络、串行总线形网络、环形网络、树形网络结构. 串行总线形主从式多机通信全双工串行总线形主从式多机通信全双工 串行总线形主从式多机通信半双工结构串行总线形主从式多机通信半双工结构 (一)(一) 主从式多机通信主从式多机通信 1.特点:特点:1)一台是主机,其余的为从机,)一台是主
43、机,其余的为从机,2)主机、从机均工作于方式)主机、从机均工作于方式2或方式或方式3。 2.原理原理1)主机)主机(SM2=0), TB8=1-发送地址标志发送地址标志 TB8=0- 命令、数据标志命令、数据标志 从机从机(SM2=1) 若若 RB8=1 则则 接收主机地址进入中断接收主机地址进入中断 RI=02)从机在中服完成)从机在中服完成本机本机 / 从机地址从机地址比较比较 若本机若本机接收地址,则本机未被选中,令接收地址,则本机未被选中,令SM2=1,退中断退中断3)若本机地址)若本机地址=接收地址,则本机被选中接收地址,则本机被选中令令SM2 = 0 ,回送所接收地址,完成主机,回
44、送所接收地址,完成主机-从机通信。从机通信。4) 从机完成主机从机完成主机-从机间通讯后,令从机间通讯后,令SM2=1,退出中服,退出中服3。主机。主机给从机给从机1发地址发地址地址符合地址符合(二)主从式多机通讯实例(二)主从式多机通讯实例主机通讯(主机通讯(1200bps)1)所用命令所用命令/状态字状态字(1)各从机均有自己的)各从机均有自己的 本机地址本机地址(2)控制字)控制字 00H-主机发和从机收命令主机发和从机收命令 01H-从机发和主机收命令从机发和主机收命令(3从机状态字从机状态字ERR00000TRDYRRDY0合法合法1非法非法0从机未准备好接收从机未准备好接收1从机准
45、备好接收从机准备好接收0从机未准备好发送从机未准备好发送1从机准备好发送从机准备好发送2)主机通讯程序(装入主机)主机通讯程序(装入主机)R0主机发送数块始址主机发送数块始址R1主机接收数块始址主机接收数块始址R2被寻址从机地址被寻址从机地址R3主机发出的命令主机发出的命令R4发送数块长度发送数块长度R5接收数块长度接收数块长度(1)主机主程序)主机主程序 ORG 2000HSTART:MOV TMOD , #20H ;T1方式方式2 MOV TH1, # 0F4H ;1200bps MOV TL1,#0F4H SETB TR1 ;启动启动T1 MOV SCON, #0D8H ;方式;方式3,
46、 MOV PCON, #00H ;接收;接收TB8=1 MOV R0,#40H ;发送数块始址发送数块始址 MOV R1,#20H ;接收数块始址接收数块始址 MOV R2,#SLAVE ;被寻址从机地址被寻址从机地址 MOV R3,#00H/01H ;主机发出的命令主机发出的命令 MOV R4,#20 ;发送数块长度发送数块长度 MOV R5,#20 ;接收数块长度接收数块长度 ACALL MCOMMU ;调主机通讯程序;调主机通讯程序 SJMP $(2)主机通讯)主机通讯 程序框图程序框图(3)主机通讯程序)主机通讯程序 ORG 2100HMCOM: MOV A, R2 ; 从机地址送从机
47、地址送A MOV SBUF,A ; 发送从机地址发送从机地址 JNB RI, $ ; 等待接收从机等待接收从机 CLR RI ; 应答地址应答地址 MOV A, SBUF ;从机应答地址送从机应答地址送A XRL A, R2 ;核对两个地址;核对两个地址 JZ MTXD2 ;相符,转相符,转MTXD2MTXD1: MOV SBUF ,#0FFH;从机复位命令;从机复位命令 SETB TB8 ;地址桢标志送;地址桢标志送TB8 SJMP MCOMMTXD2: CLR TB8 ;准备发送命令准备发送命令 MOV SBUF, R3 ;发送命令字发送命令字 JNB RI ,$;(00/01)等待从机应
48、答)等待从机应答 CLR RI MOV A, SBUF;等待从机应答状态字;等待从机应答状态字 JNB ACC.7, MTXD3;正确,;正确,MTXD3 SJMP MTXD1;错误,重新联络;错误,重新联络MTXD3: CJNZ R3,#00H,MRXD;若从机发;若从机发 ;主机收,主机收,MRXD JNB ACC.0 ,MTXD1;若从机接收;若从机接收 ;未就绪,未就绪,MTXD1MTXD4: MOV SBUF, R0 ;若从机接收就;若从机接收就 JNB TI, $ ;绪,则开始发送绪,则开始发送 CLR TI INC R0 DJNZ R4, MTXD4;若数块未发;若数块未发 RE
49、T 完,则继续完,则继续 MRXD: JNB ACC.1, MTXD1;从机发送未;从机发送未 ;就绪,重新联络就绪,重新联络MRXD1: JNB RI, $ ;等待接收完毕;等待接收完毕 CLR RI MOV A, SBUF ;接收数据送;接收数据送A MOV R1,A INC R1 DJNZ R5, MRXD1若未接完,继续若未接完,继续 RET3)从机通讯程序(装入从机)从机通讯程序(装入从机)R0从机发送数块始址从机发送数块始址 R1从机接收数块始址从机接收数块始址 R2发送数块长度发送数块长度R3接收数块长度接收数块长度 ORG 1000HSTART: MOV TMOD, #20H;
50、T1方式方式2 MOV TH1, #0F4H; 1200bps MOV TL1, #0F4H; SETB TR1 MOV SCON, #0F8H ; 方式方式3,允许,允许 MOV PCON, #00H ; 接收,接收,TB8=1 MOV R0,# 20H; MOV R1, #40H; MOV R2, #20 MOV R3, #20 SETB EA SETB ES CLR RI SJMP $ ORG 0023H SJMP SINT ORG 0100HSINT:CLR RI PUSH ACC PUSH PSW MOV A,SBUF; 接收从机地接收从机地 XRL A,#SLAVE;址送址送A J