您好,欢迎访问三七文档
二、串口的多机通信一、串行口的应用举例第七章MCS-51的串行口例7-1方式2发送在双机通讯中的应用。下面的发送中断服务程序,是在双机通讯中,以TB8作为奇偶校验位,处理方法为数据写入SBUF之前,先将数据的奇偶校验位写入TB8,以保证采用偶校验发送。2、串行口方式2的应用停止位数据位9位起始位LSBMSB空闲空闲D0D71帧共11位RB8/TB89位共偶数个1,通过TB8补0或补1来实现什么是偶校验?当数据本身为偶数个1时(P=0)补0;当数据本身为奇数个1时(P=1)补1;结论:令TB8=P一、串行口的应用举例PIPTI:PUSHPSW;现场保护PUSHAccSETBRS1;选择第2组工作寄存器区CLRRS0CLRTI;发送中断标志清“0”MOVA,@R0;取数据MOVC,P;校验位送TB8,采用偶校验MOVTB8,CMOVSBUF,A;启动发送INCR0;数据指针加1POPAcc;恢复现场POPPSWRETI;中断返回例7-2方式2接收在双机通讯中的应用本例与上例相对应。若第9位数据为校验位,在接收程序中作偶校验处理,设1组寄存器区的R0为数据缓冲器指针。PIRI:PUSHPSWPUSHAccSETBRS0;选择1组寄存器区CLRRS1CLRRIMOVA,SBUF;收到数据送AMOVC,PJNCL1;C=0。跳L1JNBRB8,ERP;ERP为出错处理程序AJMPL2L1:JBRB8,ERP;RB8=1,跳ERPL2:MOV@R0,AINCR0POPAccPOPPSWERP:………;出错处理程序段………RETIRB8=0?P=0?YRB8=1?YNYYERPN补充两个数据块的发送接收例题补例7-3:编制一个发送程序,将片内RAM中50H~5FH的数据串行发送。串行口设定为工作方式2,TB8作奇偶校验位。解:在数据写入发送SBUF之前,先将数据的奇偶标志P写入TB8,此时,第9位数据便可作奇偶校验用。分别采用查询和中断两种方式发送。返回ORG0000HAJMPMAIN;上电,转向主程序ORG0100H;主程序MAIN:MOVSCON,#80H;设工作方式2MOVPCON,#80H;取波特率为fosc/32MOVR0,#50H;首址50H送R0MOVR7,#10H;数值长度送R7LOOP:MOVA,@R0;取数据MOVC,PSW.0;P→CMOVTB8,C;奇偶标志送TB8MOVSBUF,A;发送数据WAIT:JBCTI,CONTAJMPWAIT;等待中断标志TI=1CONT:INCR0DJNZR7,LOOP;数值尚未发送完,继续发送下一个数据SJMP$END返回(1)采用查询方式的程序段数据发送完?是初始化串口初始化数据区中断初始化发送第一个数据开始主程序等待中断清中断标志发送下一个数据关中断中断入口中断服务子程序返回;发送一个数据MOVA,@R0MOVC,PSW.0;P→CMOVTB8,CMOVSBUF,A;写写看!(2)采用中断方式的流程图ORG0000HAJMPMAIN;上电,转向主程序ORG0023H;串行口的中断入口地址AJMPSERVE;转向中断服务程序ORG0100H;主程序MAIN:MOVSCON,#80HMOVPCON,#80HMOVR0,#50HMOVR7,#0FH;?够吗SETBES;允许串行口中断SETBEA;CPU允许中断MOVA,@R0MOVC,PSW.0;P→CMOVTB8,CMOVSBUF,A;发送第一个数据SJMP$SERVE:CLRTI;清除发送中断标志INCR0;修改数据地址MOVA,@R0MOVC,PSW.0;P→CMOVTB8,CMOVSBUF,A;发送数据DJNZR7,ENDT;判断数据块发送完否;若未发送完,则转ENDTCLRES;若发送完,则禁止串行口中断ENDT:RETI;中断返回END返回(2)采用中断方式的程序段解:方式3为11位异步通信方式,波特率取决于TI的溢出率。查表7-2(P148)可知,当晶振为11.059MHz,波特率为2400b/s时,可取SMOD=0,定时器选择模式2:初值为F4H返回补例7-4:编制一个接收程序,将接收的16B数据送入片内RAM的5OH—5FH单元中。设串行口工作于方式3,波特率为2400b/s。源程序如下:MAIN:MOVTMOD,#20H;设TI工作于模式2MOVTH1,#0F4H;赋循环计数初值MOVTL1,#0F4H;赋计数值SETBTR1;启动定时器TIMOVR0,#50H;首地址送R0MOVR7,#10H;数据长度送R7MOVSCON,#0D0H;串行口工作与方式3,可接收MOVPCON,#00H;设SMOD=0WAIT:JBCRI,PR1;接收完一帧数据,清RI,转PR1SJMPWAIT;否则等待PR1:MOVA,SBUF;读入数据JNBP,PNP;P=0,转PNPJNBRB8,PER;P=1,RB8=0,转出错处理SJMPRIGHTPNP:JBRB8,PER;P=0,RB8=1,转出错处理RIGHT:MOV@R0,A;数据送内存INCR0;修改地址指针DJNZR7,WAIT;数据未接收完,继续接收下一个数据CLRPSW.5;置正确接收完毕标志F0=0RETPER:SETBPSW.5RET返回RB8=0?P=0?YRB8=1?YNYYERPNtxdrxdtxdrxdtxdrxdrxdtxdXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U280C51XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U380C51XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U480C51XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U180C511234567809abcdef234567891RP1RESPACK-8R110kD1LED-GREEND2LED-GREEND3LED-GREEN一个多机通信的例子二、串口的多机通信主机与从机,每个从机有一个唯一的地址码。主机可与每个从机通信,从机之间不能通信。主机每一时段只能与一个从机通信。先叫地址,然后再通信。二、串口的多机通信主机的RXD与从机的TXD相连,主机TXD与从机的RXD端相连。从机地址分别为00H、01H、02H。原理:在串行口以方式2(或方式3)接收时,SM2与RB8共同作用,影响着RI的置位。也就是说,接收到一个数据时,RI置位与否还要看SM2和RB8的组合。而RI不能有效置位,意味着并没有收到这一个数据。要保证主机与所选择的从机实现可靠地通讯,必须保证串口具有识别功能。SCON中的SM2位就是满足这一条件而设置的多机通讯控制位。SM2=0、RB8=0RB8=1RI可以置位SM2=1、RB8=1SM2=1、RB8=0RI可以置位RI不能置位读P138RI可以置位才可以接收到数据SM2=0、RB8=0RB8=1RI可以置位SM2=1、RB8=1SM2=1、RB8=0RI可以置位RI不能置位应用这些特性来安排多机通讯的工作过程:(1)主机先将从机地址(即准备接收数据的从机)发给各从机,希望每个从机都能收到。主机发出的地址信息,以第9位为1为特征。(2)从机串行口编程为方式2或方式3接收,且置“1”SM2和REN位,使从机只处于多机通讯且接收地址帧的状态。(3)各从机接收到地址后,判断是否和本机地址相符合。相符则该从机清“0”SM2位,准备接收主机的数据或命令;若不符,则保持SM2=1状态。(4)接着主机发送数据帧,以第9位为0为特征.此时各从机串行口接收到的RB8=0,只有地址相符合的从机系统(即已清“0”SM2位的从机)才能激活RI,真正收到数据。被叫未被叫2009-11-12作业读P154~156例7-5P15712、14
本文标题:串口的多机通信
链接地址:https://www.777doc.com/doc-312954 .html