1、一一.串行通讯的基本方式串行通讯的基本方式(一一).).异步通讯异步通讯以字符为传送单位用起始位和停止位标识每个字符的开始和结束以字符为传送单位用起始位和停止位标识每个字符的开始和结束字符间隔不固定,只需字符传送时同步。字符间隔不固定,只需字符传送时同步。异步通讯常用格式:一个字符帧异步通讯常用格式:一个字符帧异步通讯的双方需要两项约定:异步通讯的双方需要两项约定:1.1.字符格式字符格式一帧字符位数的规定:数据位,校验位,起始位和停止位。一帧字符位数的规定:数据位,校验位,起始位和停止位。2.2.波特率波特率(位位/秒秒)对传送速率的规定对传送速率的规定例:要求每秒传送例:要求每秒传送120
2、120个字符,每帧为个字符,每帧为1010位。位。解:解:B=120B=12010=120010=1200波特波特每位每位0.83ms0.83ms数据位传输率数据位传输率=120=1208=9608=960位位/秒秒(二二).).同步通讯同步通讯以一串字符为一个传送单位,字符间不加标识位,在一串字符开以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符标识,硬件要求高,通讯双方须严格同步。始用同步字符标识,硬件要求高,通讯双方须严格同步。D0D1D2D3D4D5D6D7停止位停止位起始位起始位1.1.发送器:并发送器:并串数据格式转换,添加标识位和校验串数据格式转换,添加标识位
3、和校验位,一帧发送结束,设置结束标志,申请中断。位,一帧发送结束,设置结束标志,申请中断。2.2.接收器:串接收器:串并数据格式转换,检查错误,去掉标并数据格式转换,检查错误,去掉标识位,保存有效数据,设置接收结束标志,申请中断。识位,保存有效数据,设置接收结束标志,申请中断。3.3.控制器:接收编程命令和控制参数,设置工作方式:控制器:接收编程命令和控制参数,设置工作方式:同步同步/异步、字符格式、波特率、校验方式、数据位与同异步、字符格式、波特率、校验方式、数据位与同步时钟比例等。步时钟比例等。三三.串行数据传送方向串行数据传送方向单工通讯:数据单向传送。单工通讯:数据单向传送。半双工通讯
4、:数据可分时双向传送。半双工通讯:数据可分时双向传送。全双工通讯:可同时进行发送和接收。全双工通讯:可同时进行发送和接收。发送器接收器发送器接收器串行接口输入串行接口输入/输出引脚:输出引脚:TXD(P3.1)TXD(P3.1)、RXD(P3.0)RXD(P3.0)数据格式:按不同方式,一帧位数数据格式:按不同方式,一帧位数 8/10/118/10/11发送发送/接收接收时,数据皆低位在前。时,数据皆低位在前。一帧字符发送一帧字符发送/接收结束,置位标志位接收结束,置位标志位(TI/RI)(TI/RI)并申请并申请SIOSIO中断。中断。中断控制:中断允许位中断控制:中断允许位ESES中断入口
5、:中断入口:0023H0023HD0D1D2D3D4D5D6D7停止位停止位起始位起始位D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D8停止位停止位起始位起始位D7AT89C52AT89C52单片机的串行接口单片机的串行接口SBUF(发)(发)SBUF(收)(收)发送控制器发送控制器 TI接收控制器接收控制器 RI移位寄存器移位寄存器波波特特率率发发生生器器T1 1A累累加加器器(门门)移位寄存器移位寄存器RxDTxD去申请中断去申请中断引脚引脚引脚引脚 方式方式0 0:波特率:波特率B=fosc/12B=fosc/12 方式方式2 2:B=(2B=(2SMOD/64)/64)
6、foscfosc 方式方式1 1、3 3:B=(2B=(2SMOD/32)/32)T1T1溢出率溢出率 T1T1溢出率溢出率=1/t=fosc=1/t=fosc/12/12(2(2n n-X)-X)TH1TH1、TL1=X=2TL1=X=28 8-fosc/12-fosc/122 2SMOD/(32/(32B)B)(注意:(注意:T1T1工作于方式工作于方式2 2)PCON(87H)电源控制寄存器电源控制寄存器PCON中只有中只有SMOD位与串行口工作位与串行口工作有关。有关。串行口初始化编程格式:串行口初始化编程格式:SIOSIO:MOV SCONMOV SCON,#控制状态字;写方式字且控
7、制状态字;写方式字且TI=RI=0TI=RI=0 (MOV PCON (MOV PCON,#80H)#80H);波特率加倍;波特率加倍 (MOV TMOD(MOV TMOD,#20H)#20H);T1T1作波特率发生器作波特率发生器 (MOV TH1(MOV TH1,#X)#X);选定波特率;选定波特率 (MOV TL1(MOV TL1,#X)#X)(SETB TR1)(SETB TR1)(SETB EA)(SETB EA);开串行口中断;开串行口中断 (SETB ES)(SETB ES)MCS-51单片机串行口基本上是异步通信接口,但在方式单片机串行口基本上是异步通信接口,但在方式0时是同步
8、时是同步操作。外接串入操作。外接串入并出或并入并出或并入串出器件,可实现串出器件,可实现I/O的扩展。的扩展。串行口方式串行口方式0的数据传送可以采用中断方式,也可以采用查询方式。的数据传送可以采用中断方式,也可以采用查询方式。无论哪种方式,都要借助于无论哪种方式,都要借助于TI或或RI标志。标志。在串行口发送时,或者靠在串行口发送时,或者靠TI置位后引起中断申请,在中断服务程序中置位后引起中断申请,在中断服务程序中发送下一组数据;或者通过查询发送下一组数据;或者通过查询TI的值,只要的值,只要TI为为0就继续查询,直就继续查询,直到到TI为为1后结束查询,进入下一个字符的发送。后结束查询,进
9、入下一个字符的发送。在串行口接收时,由在串行口接收时,由RI引起中断或对引起中断或对RI查询来决定何时接收下一个字查询来决定何时接收下一个字符。无论采用什么方式,在开始串行通信前,都要先对符。无论采用什么方式,在开始串行通信前,都要先对SCON寄存器寄存器初始化,进行工作方式的设置。在方式初始化,进行工作方式的设置。在方式0中,中,SCON寄存器的初始化寄存器的初始化只是简单地把只是简单地把00H送入送入SCON就可以了。就可以了。例:用例:用MCS-51串行口外接串行口外接164串串入入并出移位寄存器扩展并出移位寄存器扩展8位并位并行口;行口;8位并行口的每位都接一个位并行口的每位都接一个发
10、光二极管,要求发光二极管从左发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断到右以一定延迟轮流显示,并不断循环。设发光二极管为共阴极接法,循环。设发光二极管为共阴极接法,如如图图所示。所示。解:设数据串行发送采用中断方式,解:设数据串行发送采用中断方式,显示的延迟通过调用延迟程序显示的延迟通过调用延迟程序DELAY来实现。来实现。CLR=0,关闭并行输出;,关闭并行输出;CLR=1,打开并行输出。,打开并行输出。程序清单:程序清单:ORG 0023H ;串行口中断入口串行口中断入口 AJMP SBR ;转入串行口中断服务程序转入串行口中断服务程序 ORG 2000H ;主程序起始地
11、址主程序起始地址 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 ;再一次串行输出再一次串行输出 RE
12、TI ;中断返回中断返回 用方式用方式0外加移位寄存器来扩展外加移位寄存器来扩展8位输出口时,要求移位寄存器带有位输出口时,要求移位寄存器带有输出控制,否则串行移位过程也会反映到并行输出口;另外,输出口输出控制,否则串行移位过程也会反映到并行输出口;另外,输出口最好再接一个寄存器或锁存器,以免在输出门关闭使(最好再接一个寄存器或锁存器,以免在输出门关闭使(STB=0)输出)输出又发生变化。又发生变化。用方式用方式0加上并入加上并入串出移位寄存器可扩展一个串出移位寄存器可扩展一个8位并行输入口。位并行输入口。移位寄存器必须带有预置移位寄存器必须带有预置/移位的控制端,由单片机的一个输出端子移位的
13、控制端,由单片机的一个输出端子加以控制,以实现先由加以控制,以实现先由8位输入口置数到移位寄存器,然后再串行移位输入口置数到移位寄存器,然后再串行移位从单片机的串行口输入到接收缓冲器,最后再读入到位从单片机的串行口输入到接收缓冲器,最后再读入到CPU中。中。例:用例:用MCS-51串行口外串行口外加移位寄存器加移位寄存器165或或166扩扩展展8位输入口,输入数据位输入口,输入数据由由8个开关提供,另有一个开关提供,另有一个开关个开关K提供联络信号。提供联络信号。当当K=0时,表示要求输入时,表示要求输入数据,输入的数据,输入的8位为开关位为开关量,提供逻辑模拟子程序量,提供逻辑模拟子程序的输
14、入信号。如所示。的输入信号。如所示。SHIFT=1,并行输入数据;,并行输入数据;SHIFT=0,开始串行移位输入。,开始串行移位输入。解:串行口方式解:串行口方式0的接收要用的接收要用SCON寄存器中的寄存器中的REN位作为开关来控制。位作为开关来控制。因此,初值化时,除了设置工作方式之外,还要使因此,初值化时,除了设置工作方式之外,还要使REN位为位为1,其余,其余各位仍然为各位仍然为0。对对RI采用查询方式来编写程序,当然,先要查询开关采用查询方式来编写程序,当然,先要查询开关K是否闭合。是否闭合。程序清单:程序清单:START:MOV SCON,#10H ;串行口方式串行口方式0初始化
15、初始化 JB P1.1,$;开关开关K未闭合,等待未闭合,等待 SETB P1.0 ;P/S=1,并行置入数据并行置入数据 CLR P1.0 ;P/S=0,开始串行移位开始串行移位 JNB RI,$;查询查询RI CLR RI ;查询结束,清查询结束,清RI MOV A,SBUF ;读数据到累加器读数据到累加器 ACALL LOGSIM ;进行逻辑模拟进行逻辑模拟 SJMP START ;准备下一次模拟准备下一次模拟例:例:MCS-51串行口按双工方式收发串行口按双工方式收发ASCII字符,最高位用字符,最高位用来作奇校验位,要求传送的波特率为来作奇校验位,要求传送的波特率为1200b/s。编
16、写有关。编写有关的通信程序。的通信程序。解:解:7位位ASCII码加码加1位奇校验共位奇校验共8位数据,故可采用串行口位数据,故可采用串行口方式方式1。MCS-51单片机的奇偶校验位单片机的奇偶校验位P是当累加器是当累加器A中中1的数目为的数目为奇数时,奇数时,P=1。如果直接把。如果直接把P的值放入的值放入ASCII码的最高位,码的最高位,恰好成了偶校验,与要求不符。因此,要把恰好成了偶校验,与要求不符。因此,要把P的值取反以的值取反以后放入后放入ASCII码最高位,才是要求的奇校验。码最高位,才是要求的奇校验。双工通信要求收、发能同时进行。实际上,收、发操作主要是在串双工通信要求收、发能同
17、时进行。实际上,收、发操作主要是在串行接口进行,行接口进行,CPU只是把数据从接收缓冲器读出和把数据写入发送缓只是把数据从接收缓冲器读出和把数据写入发送缓冲器。数据传送用中断方式进行,响应中断以后,通过检测是冲器。数据传送用中断方式进行,响应中断以后,通过检测是RI置位置位还是还是TI置位来决定置位来决定CPU是进行发送操作还是接收操作。发送和接收都是进行发送操作还是接收操作。发送和接收都通过调用子程序来完成,设发送数据区的首地址为通过调用子程序来完成,设发送数据区的首地址为20H,接收数据区,接收数据区的首地址为的首地址为40H,fosc为为6MHz,通过计算可知:定时器的初装值应,通过计算
18、可知:定时器的初装值应为为F3H。定时器。定时器T1采用工作模式采用工作模式2,可以避免计数溢出后用软件重装,可以避免计数溢出后用软件重装定时初值的工作。定时初值的工作。程序清单:程序清单:主程序主程序 MOV TMOD,#20H ;定时器定时器1设为模式设为模式2 MOV TL1,#0F3H ;定时器初值定时器初值 MOV TH1,#0F3H ;8位重装值位重装值 SETB TR1 ;启动定时器启动定时器1 MOV SCON,#50H ;设置为方式设置为方式1,;REN=1 MOV R0,#20H ;发送数据区首址发送数据区首址 MOV R1,#40H ;接收数据取首址接收数据取首址 ACA
19、LL SOUT ;先输出一个字符先输出一个字符 SETB ES SETB EA SJMP$;等待中断等待中断 中断服中断服 ORG 0023H ;串行口中断入口串行口中断入口 AJMP SBR1 ;转至中断服务程序转至中断服务程序 ORG 0100H SBR1:JNB RI,SEND ;TI=1,为发送中断为发送中断 ACALL SIN ;RI=1,为接收中断为接收中断 SJMP NEXT ;转至统一的出口转至统一的出口SEND:ACALL SOUT ;调用发送子程序调用发送子程序NEXT:RETI ;中断返回中断返回发送子程序发送子程序 SOUT:CLR TI MOV A,R0 ;取发送数据
20、到取发送数据到A MOV C,P ;奇偶标识赋予奇偶标识赋予C CPL C ;奇校验奇校验 MOV ACC.7,C;A中的最高位为奇校验中的最高位为奇校验 INC R0 ;修改发送数据指针修改发送数据指针 MOV SBUF,A ;发送发送ASCII码码 RET ;返回返回接收子程序接收子程序 SIN:CLR RI MOV A,SBUF ;读出接收缓冲区内容读出接收缓冲区内容 MOV C,P ;取出校验位取出校验位 JNC ERR ;奇校验错奇校验错 ANL A,#7FH ;删去校验位删去校验位 MOV R1,A ;读入接收缓冲区读入接收缓冲区 INC RI ;修改接收数据指针修改接收数据指针
21、RET ;返回返回 在主程序中已初始化在主程序中已初始化REN=1,则允许接收。以上,则允许接收。以上程序基本上具备了全双工通信的能力,但不能说程序基本上具备了全双工通信的能力,但不能说很完善。例如,再接收子程序中,虽然检验了奇很完善。例如,再接收子程序中,虽然检验了奇偶校验位,但没有进行出错处理;另外,发送和偶校验位,但没有进行出错处理;另外,发送和接收数据区的范围都很有限,也不能满足实际需接收数据区的范围都很有限,也不能满足实际需要。但有了一个基本的框架之后,逐渐完善还是要。但有了一个基本的框架之后,逐渐完善还是可以做到的。可以做到的。例:采用查询方式由串行口发送带奇偶校验位的数据块。例:
22、采用查询方式由串行口发送带奇偶校验位的数据块。解:本例由内部解:本例由内部RAM单元单元20H-3FH取出取出ASCII码数据,在最高码数据,在最高位上加位上加奇奇偶校验位后由串行口发出。采用偶校验位后由串行口发出。采用8位异步通信方式,位异步通信方式,波特率为波特率为1200b/s,fosc=11.059MHz。由要求可知,应把串行口设置为方式由要求可知,应把串行口设置为方式1,采用定时器,采用定时器1模式模式2作作为波特率发生器,预置值(为波特率发生器,预置值(TH1)=0E8H。程序清单:程序清单:主程序;主程序;MOV TMOD,#20H ;设置定时器设置定时器1为模式为模式2 MOV
23、 TL1,#0E8H ;初值,波特率为初值,波特率为1200b/s MOV TH1,#0E8H SETB TR1 ;启动启动T1运行运行 MOV SCON,#01000000B ;设置串行口为方式设置串行口为方式1 MOV R0,#20H MOV R7,#32 ;数据块长度数据块长度LOOP:MOV A,R0 ACALL SP-OUT JNB P,ERROR ;传输出错处理,由传输出错处理,由SP-OUT中中“CPL C”结果决定结果决定 INC R0 DJNZ R7,LOOP串行口发送子程序(奇校验);串行口发送子程序(奇校验);SP-OUT:MOV C,PSW.0 ;设置奇校验位,校验位设
24、置奇校验位,校验位P=1为奇校验为奇校验 CPL C ;奇校验(无此指令位偶校验)奇校验(无此指令位偶校验)MOV ACC.7,C ;ACC.7补补0或或1 MOV SBUF,A ;启动串行口发送过程启动串行口发送过程 CLR TI ;清清TI标志,允许在发送标志,允许在发送 RETERROR:(略)(略)例:由串行口接收带奇偶校验位的数据块。例:由串行口接收带奇偶校验位的数据块。解:采用查询方式,本例与上例相呼应,接收器解:采用查询方式,本例与上例相呼应,接收器把接收到的把接收到的32B数据存放在数据存放在20H-3FH单元内,波单元内,波特率同上,若奇偶校验出错则置进位位为特率同上,若奇偶
25、校验出错则置进位位为1。程序清单:程序清单:主程序;主程序;MOV SCON,#01010000B ;设串口方式设串口方式1,允许接收,允许接收MOV TMOD,#20H ;设置定时器设置定时器T1为模式为模式2MOV TL1,#0E8H ;初值,波特率为初值,波特率为1200b/sMOV TH1,#0E8H SETB TR1 ;启动启动T1运行运行MOV R0 ,#20H MOV R7 ,#32 ;数据块长度数据块长度LOOP:ACALL SP-IN ;调接收一帧子程序调接收一帧子程序 JC ERROR ;由由SP-IN中中“CPL C”结果决定结果决定 MOV R0,A ;存放接收的数据存
26、放接收的数据 INC R0 DJNZ R7,LOOP 接收一帧子程序;接收一帧子程序;SP-IN:JNB RI,$;RI由硬件置位由硬件置位 CLR RI ;软件清除软件清除RI MOV A,SBUF MOV C,P ;检查奇校验位检查奇校验位 CPL C ;置置C为主程序为主程序“JC ERROR”用用 ANL A,#7FH ;去掉奇校验位去掉奇校验位 RET ERROR:(略)(略)串行口方式串行口方式 2与方式与方式 3基本一样(只是波特率设置不同),基本一样(只是波特率设置不同),接收发送接收发送 11位信息:开始为位信息:开始为l位起始位(位起始位(0),中间),中间8位数位数据位,
27、数据位之后为据位,数据位之后为1位程控位(由用户置位程控位(由用户置SCON的的TB8决决定),最后是定),最后是1位停止位(位停止位(1)。只比方式)。只比方式l多了一位程控位。多了一位程控位。例:用第例:用第9个数据位作奇偶校验位,编制串行个数据位作奇偶校验位,编制串行口方式口方式2的发送程序。的发送程序。解:设计一个发送程序,将片内解:设计一个发送程序,将片内RAM 50H5FH中的数据串行发送;串行口设定为方式中的数据串行发送;串行口设定为方式2状态,状态,TB8作奇偶校验位。在数据写入发送作奇偶校验位。在数据写入发送缓冲器之前,先将数据的奇偶位缓冲器之前,先将数据的奇偶位P写入写入T
28、B8,这时,第这时,第9位数据作奇位数据作奇偶校验偶校验用。用。方式方式2发送程序流程图如发送程序流程图如图图所示。所示。程序清单如下:程序清单如下:TRT:MOV SCON,#80H ;方式方式2设定设定 MOV PCON,#80H ;取波特率为取波特率为fosc/32 MOV R7,#10H ;数据长度数据长度10HR7LOOP:MOV A,R0 ;取数据取数据A MOV C,PSW.0 ;PTB8 MOV TB8,C MOV SBUF,A ;数据数据SBUF,启动发送启动发送WAIT:JBC TI,CONT ;判断发送中断标志判断发送中断标志 SJMP WAITCONT:INC R0 D
29、JNZ R7,LOOP RET例例:编制一个串行口方式编制一个串行口方式2接收程序,并核对奇偶校接收程序,并核对奇偶校验位。验位。解:根据上面介绍的特点,在方式解:根据上面介绍的特点,在方式2、方式、方式3的发的发送过程中,将数据和附加在送过程中,将数据和附加在TB8中的奇偶位一块中的奇偶位一块发向对方。因此,作为接收的一方应设法取出该发向对方。因此,作为接收的一方应设法取出该奇偶位进行核对,相应的接收程序段为:奇偶位进行核对,相应的接收程序段为:RRR:MOV SCON,#90H ;选方式选方式2,并允许接收(,并允许接收(REN=1)LOOP:JBC RI,RECEIV ;等待接收数据并清
30、等待接收数据并清RI SJMP LOOPRECEIV:MOV A,SBUF ;将接收到的字符取出后,送到将接收到的字符取出后,送到ACC。注意,。注意,;传送指令影响传送指令影响PSW,产生接收端的奇偶值产生接收端的奇偶值 JB PSW.0,ONE ;判断接收端的奇偶值判断接收端的奇偶值 JB RB8,ERR ;判断发送端的奇偶值判断发送端的奇偶值 SJMP RIGHTONE:JB RB8,RIGHT SJMP ERRRIGHT:;接收正确接收正确 ERR:;接收有错接收有错当接收到一个字符时,从当接收到一个字符时,从SBUF转移到转移到ACC中时会产生接收端的奇偶中时会产生接收端的奇偶值,而
31、保存在值,而保存在RB8中的值为发送端的奇偶值,两个奇偶值应相等,否中的值为发送端的奇偶值,两个奇偶值应相等,否则接收字符有错。发现错误要及时通知对方重发。则接收字符有错。发现错误要及时通知对方重发。例:编制一个发送程序,将片内例:编制一个发送程序,将片内RAM中中50H5FH的数据串的数据串行发送。串行口设定为工作方式行发送。串行口设定为工作方式2,TB8作奇偶校验位。作奇偶校验位。解:在数据写入发送解:在数据写入发送SBUF之前,先将数据的奇偶标志之前,先将数据的奇偶标志P写写入入TB8,此时,第,此时,第9位数据便可作奇偶校验用。可采用查询位数据便可作奇偶校验用。可采用查询和中断两种方式
32、发送。和中断两种方式发送。(1)采用查询方式的程序段)采用查询方式的程序段 ORG 0000H AJMP MAIN ;上电,转向主程序上电,转向主程序 ORG 0100H ;主程序主程序MAIN:MOV SCON,#80H ;设工作方式设工作方式2 MOV PCON,#80H ;取波特率为取波特率为fosc/32 MOV R0,#50H ;首址首址50H送送R0 MOV R7,#10H ;数值长度送数值长度送R7LOOP:MOV A,R0 ;取数据取数据 MOV C,PSW.0 ;PC MOV TB8,C ;奇偶标志送奇偶标志送TB8 MOV SBUF,A ;发送数据发送数据WAIT:JBC
33、TI,CONT AJMP WAIT ;等待中断标志等待中断标志TI=1CONT:INC R0 DJNZ R7,LOOP ;数值尚未发送完,数值尚未发送完,继续发送下一个数据继续发送下一个数据 SJMP$END(2)采用中断方式的程序段)采用中断方式的程序段 ORG 0000H AJMP MAIN ;上电,转向主程序上电,转向主程序 ORG 0023H ;串行口的中断入口地址串行口的中断入口地址 AJMP SERVE ;转向中断服务程序转向中断服务程序 ORG 0100H ;主程序主程序MAIN:MOV SCON,#80H MOV PCON,#80H MOV R0,#50H MOV R7,#0F
34、H SETB ES ;允许串行口中断允许串行口中断 SETB EA ;CPU允许中断允许中断 MOV A,R0 MOV C,PSW.0 ;PC MOV TB8,C MOV SBUF,A ;发送第一个数据发送第一个数据 SJMP$SERVE:CLR TI ;清除发送中断标志清除发送中断标志 INC R0 ;修改数据地址修改数据地址 MOV A,R0 MOV C,PSW.0 ;PC MOV TB8,C MOV SBUF,A ;发送数据发送数据 DJNZ R7,ENDT ;判断数据块发送完否判断数据块发送完否 ;若未发;若未发 送完,送完,则转则转ENDT CLR ES;若发送完,则禁止串行口中断若
35、发送完,则禁止串行口中断ENDT:RETI ;中断返回中断返回 END 掌握多机通信的原理及实现过程,能设计简单的多机通信系统及程序。本节难点:SM2、TB8、RB8在通信过程中的作用典型应用:校园卡系统、智能楼宇、自动温控蔬菜大棚、大型粮库、工厂自动化;典型应用:校园卡系统、智能楼宇、自动温控蔬菜大棚、大型粮库、工厂自动化;1打卡机 2打卡机 3打卡机 n打卡机问题问题1:多机通信时主机如何寻找从机?多机通信时主机如何寻找从机?问题问题2:如何区分地址和数据信息?如何区分地址和数据信息?关键是关键是SM2与与TB8/RB8的关系!的关系!SM2RB8从 机 动 作10此时不能接收数据11能收
36、到主机发的数据(地址信息)00进入串口中断,对接收的数据进行处理01进入串口中断,对接收的数据进行处理所有同学坐着听讲老师喊同学名字所有同学听到名字与自己的名字比较名字相符的同学站起来老师与站起的同学进行提问回答课堂交流回答问题的同学坐下 设多机通信系统主、从机晶振为6MHz,波特率为2400bps,以方式3进行多机串行通信。每次通信时主机先发送对应的从机地址,然后发一个字节数据。RS-485从机0#主机 RS-485RS-485从机1#RS-485从机n#图1 多机通信系统硬件结构INIT:MOVTMOD,#20H MOV TH1,#0F9H;波特率为2400bps MOV TL1,#0F9
37、H MOV SCON,#0D0H;方式3,SM2=0,允许接收 SETBTR1 返回置地址信息标志发地址置数据信息标志发数据开始图2 主机通信子程序流程图INIT:MOVTMOD,#20H MOV TH1,#0F9H ;设置波特率为2400 MOV TL1,#0F9H MOV SCON,#0F0H ;方式3,SM2=1,允许接收 SETB TR1 SETB ES ;允许串行口中断 SETB EAWAIT:SJMP WAIT ;听号 SIO:CLRRIPUSHPSW ;现场保护PUSHACC MOVA,SBUF;接收串行数据XRLA,#ADDR;判断是否与本机地址相符JNZBACK;不相符则返回CLRSM2 ;相符则SM2为0 CLR ES ;关串口中断,避免中断嵌套MOVA,SBUF;接收数据WAIT:JNBRI,WAIT CLR RI MOV R0,A ;保存数据 SETB SM2 ;恢复多机通信,SETB ES ;开串口中断BACK:POPACC ;恢复现场POPPSWRETI