第7章 串行数据通信P182-这84
- 格式:doc
- 大小:55.50 KB
- 文档页数:8
3.应用举例假定甲乙机以方式1进行串行数据通信,其波特率为1200。
甲机发送,发送数据在外部RAM 4000H~401FH单元中。
乙机接收,并把接收到的数据块首末地址及数据依次存入外部RAM 5000H开始的区域中。
解题说明:①假设晶振频率为6MHZ,按1200波特率,计算定时器1的计数初值:t,___ 6 X 10’XI__^-__。
___ttX一256-HH—256-13一243一FZH—一384 X 1200——”———“———一②sined—0,波特率不倍增,则应使PCON—00H。
③串行发送的内容包括数据块的首本地址和数据两部分内容。
对数据块首本地址以查询方式传送,而数据则以中断方式传送。
因此在程序中要先禁止串行中断,后允许单行中断。
④数据的传送是在中断服务程序中完成的。
数据为ASCll码形式,其最高位作奇偶校验位使用。
MCS-51单片机的PSW中有奇偶校验位P,当累加器A中1的数目为奇数时,P 一1。
但如果直接把P的值送入ASCll码的最高位,又变成了偶校验,与要求不符。
为此应把P值取反后送入最高位才能达到奇偶校验的要求。
下面是发送和接收的参考程序。
甲机发送主程序:ORG 8023HAJMP ACINTORG 8030HMOV TMOD,#20H;设置定时器1工作方式2MOV TLI,#FZH;定时器1计数初值MOV THI,#FZH;计数重装值SETB EA;中断总允许CLR ES;禁止审行中断MOV PCON,#00H;波特率不倍增SETB TRI;启动定时器1MOV SCON,#50H;设置串行口方式1,REN—lMOV SBUF,#40H;发送数据区首地址高位SOUTI:JNB TI,$;等待一帧发送完毕CLR TI;清发送中断标志MOV SBUF,#00H;发送数据区首地址低位SOUTZ:JNB TI,$;等待一帧发送完毕CLR TIMOV SBUF,#40HI发送数据区本地址高位SOUT3;JNB TI,$;等待一帧发送完毕CLR TI;清发送中断标志MOV SBUF,#IFH;发送数据区未地址低位SOUT4:JNB TI,$;等待一帧发送完毕CLR TIMOV DPTR,#4000H;数据区地址指针MOV R7,#20H;数据个数SETB ES;开放串行中断AHALT:AJMP$;等待中断甲机中断服务程序:ORG 8100HACINT:MOVX A,@DPTR;读数据CLR TI;清发送中断MOV C,P;奇偶标志赋予CCPL C;C取反MOV ACC.7,C;送ASCll码高位MOV SBUF,A;发送字符CJNE R7,#00H,AENDIS发送完转AENDIINC DPTRAJMP AENDZ;未发送完转AENDZAENDI:CLR ES;禁止串行中断CLR TRI;定时器1停止计数AENDZ:RETI;中断返回乙机接收主程序:ORG 8023HAJMP BCINTORG 8030HMOV TMOD,#20H;设置定时器1工作方式2MOV THI,#FZH;定时器1计数初值MOV TLI,#FZH;计数重装值SETB EA;中断总允许CLR ES o禁止串行中断MOV PCON,#00H;波特率不倍增SETB TRI;启动定时MOV SCON,#50H;设置串行口方式1,REN—1MOV DPTR,#5000H;数据存放首地址MOV R7,#24H;接收数据个数SINI:JNB RI,$;等待CLR RI;清接收中断标志MOV A,SBUF;接收数据区首地址高位MOVX@DPTR,A;存首地址高位INC DPTR;地址指针增量SINZ:JNB RI,$;CLR RIoMOV A,SBUF;接收数据区首地址低位MOVX@DPTR,A;存首地址低位INC DPTRISIN3:JNB RI,$;CLR RIMOV A,SBUF;接收数据区末地址高位MOVX@DPTR,A;存米地址高位INC DPTR oSIN4:JNB RI,$;CLR RI】MOV A,SBUF;接收数据区本地址低位MOVX@DPTR,A;存末地址低位INC DPTR;SETB ES;开放串行中断BHALT:AJMP$;等待中断乙机中断服务程序:ORG 8100HBCINT:MOV A,SBUF,接收数据MOV C,P;奇偶标志赋予CCPL C;C取反ANL A,#7FH;删去校验位MOV@DPTR,A;存数据CLR RI;清接收中断标志CJNE R7,#00H,BENDI;接收完转BENDIINC DPTRAJMP AENDZ;没接收完转BENDZBENDI:CLR ES;禁止审行中断CLR TRI;定时器豆停止计数BENDZ:RETI;中断返回73.3串行工作方式2/方式2是11位为一帧的串行通信方式,即1个起始位、9个数据位和1个停止位。
在方式2下,字符还是8个数据位。
而第9数据位既可作奇偶校验位使用,也可作控制位使用,其功能由用户确定,发送之前应先在SCON的TB8位中准备好。
这可使用如下指令完成:\SETB TBS ITBS位置1SETB TBS;TB。
位置0准备好第9数据位之后,再向SBUF写入字符的8个数据位,并以此来启动串行发送。
一个字符帧发送完毕后,将TI位置1,其过程与方式1相同。
方式2的接收过程也与方式1基本类似,所不同的只在第9数据位上,串行口把接收到的8个数据送入SBUF,而把第9数据位送入RBS。
方式2的波特率是固定的,且有两种。
一种是晶振频率的三十二分之一;另一种是晶振频率的六十四分之一。
即fosc/33和fosc/64。
如用公式表示则为:、。
__2.彼特率一十X fOSC”’“’64 即与PCON寄存器中SMOD位的值有关。
当SMOD—0时,波特率为fos。
的六十四分之一;当SMOD一1时,波特率等于f。
S。
的三十二分之一。
73.4串行H作方式3方式3同样是11位为一帧的串行通信方式,其通信过程与方式2完全相同,所不同的仅在于波特率。
方式2的波特率只有固定的两种,而方式3的波特率则可由用户根据需要设定。
其设定方法与方式1一样,即通过设置定时器1的初值来设定波特率。
单片机多机通信7.4.1 多机通信原理单片机的多机通信是指一台主机和多台从机之间的通信,其连接如图7-12所示。
图7-12主从式多机通信主机发送的信息可传送到各个从机或指定的从机,而各从机发送的信息只能被主机接收。
由于通信直接以TTL电平进行,因此主从机之间的连线以不超过一公尺为宜。
此外,各从机应当编址,以便主机能按地址寻找通讯伙伴。
多机通信时,主机向从机发送的信息分地址和数据两类。
以第9数据位作区分标志,为0 时表示数据,为1时表示地址。
通信是以主机发送信息,从机接收信息开始。
主机发送时,通过设置TB8位的状态来说明发送的是地址还是数据为0(时表示数据,为1时表示地址)。
而在从机方面,为了接收信息,初始化时应把SCON的SM2位置1。
因为多机通信时,串行口都工作在方式2或方式3下,接收数据要受SM2位的控制。
当SM2=1时,则只有接收到的第9数据位状态为1时,才将数据送SBUF,并置位RI,发出中断请求,否则接收的数据被舍弃。
而当SM2=0时,无论第9数据位是0还是1,都把接收到的数据控SBUF,并发出中断请求。
通信开始,主机首先发送地址。
各从机接收到地址时,由于SM2=1和RB8=1,所以各从机都分别发出中断请求,通过中断服务程序来判断主机发送的地址与本从机地址是否相符。
若相符,则把该从机的SM2位清0,以准备接收其后传送来的数据。
其余从机由于地址不符,则保持SM2=1状态。
此后主机发送数据,由于TB2=0,虽然各从机都能接收到,但只有SM2=0的那个被寻址的从机才能把数据送SBUF,其余各从机皆因SM2=1和RB8=0,而将数据舍弃。
这就是多机通信中主从机一对一的通信情况。
通信只能在主从机之间进行,如若进行两个从机之间的通信,需通过主机作中介才能实现。
综上所述,把多机通信的过程总结如下:①全部从机初始化为工作方式2或方式3,置位SM2;,允许中断。
②主机置位TB8,发送要寻址的从机地址。
③所有从机均接收主机发送的地址,并各自进入中断服务程序,进行地址比较。
④被寻址的从机确认后,把自身的SM2清0,并向主机返回地址供主机核对。
⑤核对无误后,主机TB8=0,向被寻址的从机发送命令,通知从机是进行数据接收还是进行数据发送。
⑤主从机之间进行数据通信。
742多机通信举例假定①从机地址为00H~FEH,即允许有255台从机。
②以地址形式发送的命令有FFH,其功能是使所有从机的SM。
位置1。
③以数据形式发送的命令有00H(从机接收数据)和01H(从机发送数据)。
④从机返回的状态字格式为夫一其中ERR——非法命令位。
ERR一1表示从机接收到的是非法命令。
TRDY——发送准备位。
TRDY=0从机发送未准备就绪;TRDY=1,从机发送准备就绪。
RRDY——接收准备位。
RRDY=0,从机接收来准备就绪;RRDY=1,从机接收准备就绪。
1.主机子程序主机通信以子程序调用形式进行,因此主机通信程序为子程序。
在调用主机子程序之前,·有关寄存器的内容如下:RO——主机接收的数据块首地址RI——主机发送的数据块首地址RZ——寻址的从机地址R3——主机发出的命令R4——主机发送的数据块长度/.一4HIW”主机通信子程序:厂化e主机串行口设定为工作方式。
,允许接收,置*尼为1.则样制率为11Oil611。
一助_。
MOV SCON,#DSH;串行口控制字MSIOI:MOV A,RZSMOV SBUF,A;发出从机地址JNB RI,$;等待从机应答CLR RI’;从机应答后清RIMOV A,SBUF;取出从机应答地址XRL A,RZ;核对应答地址~JZ MSIO3·;地址相将转’”’”’:“””’“””,””””;使所有从机’”。
-tSETB TBS;置地址标志SJMP MSIOI;重发地址***3:**R*挑;署命令标志MOV SBUF,R3;发送命令JNB RI,$;等待从机应答CLR RI;清RIMOV A,SBUF‘;取出应答信息JNB ACC.7,MSIO4;核对命令是否出错SJMP MSIOZ;命令接收错,重发*ac《:q*E*3,#00H,*a05;若为从机发送命令,转出JNB ACCO,MSIOZ;从机接收没准备好,重新联络5*x:*OV***F,@*0;主机发送数据JNB TI,$;等待一个字符发送结束CLR TI;为接收下一字符作准备INC RO;指向下一字符DJNZ R4,STX;未发送完,继续RET;发送完,返回MSIOS:JNB ACC.1,MSIOZ;从机发送没准备好,重新联络8*X:州Bm,$;等待主机接收完毕CLR RI;为接收下一字符准备MOV A,SBUF;取出接收到的字符MOV@RI,A;送数据缓冲区INC RI”;修改地址指针DJNZ R4,SRX;未接收完,继续RET;接收完,返回2从机子程序从机通信以中断方式进入,其主程序在收到主机发送来的地址后,即发出串行中断请求。