哎直接给我算咯, 串行通信一、实验目的1、掌握串行口工作方式2的程序设计,掌握单片机通信程序编制方法。2、了解实现串行通信的硬环境,数据格式的协议,数据交换的协议。3、掌握双机通信的原理和方法。二、实验设备DVCC仿真系统二套。三、实验内容1、 利用8031单片机串行口,实现双机通信。将1号实验机键盘上键入的数字显示到2号实验机的数码管上。四、实验步骤1、按图接线2、两台DVCC实验系统处于“P.”状态下。3、在1号机上选择“双机通信”发送程序,编译并连接,输入0D00后,按EXEC键。4、在2号机上选择“双机通信”接收程序,编译并连接,输入0E30后,按EXEC键。5、从1号机的键盘上输入数字键,会显示在3号机的显示器上。五、实验线路六、程序框图一 工作方式1)方式 0当设定SM1、SM0为00时,串行口工作于方式0,在方式0下,RXD为数据输入/输出端,TXD为同步脉冲输出端,发送或接收的数据为8位,低位在前,高位在后,方式0的波特率固定为ƒ /12,也就是每一机器周期传送一位数据。方式0可以外接移位寄存器,将串行口扩展为并行口,也可以外接同步输入/输出设备。2)方式 1当设定SM1、SM0为01时,串行口工作方式1。方式1为波特率可变的8位异步通信方式,由TXD发送RXD接收,一帧数据为10位,1位起始位(低电平),8位数据位(低位在前)和1位停止位(高电平),波特率取决于定时器 的T 溢出率(1/溢出周期)和波特率的选择位SMOD。波特率 = *(定时器T 溢出率)3)方式2和方式3当设定SM0、SM1为10或11时,串行口工作于方式2或方式3,这两种方式都是9位异步通信,仅波特率不同,适用于多机通信。在方式2或方式3下,数据由TXD发送RXD接收,1帧数据为11位,1位起始位(低电平),8位数据位(低位在前),1位可编程位(第9位数据,用作奇偶校验或地址/数据选择),1位停止位(高电平)。与方式1相比,多了一位可编程位,发送时,第9位数据为TB8,接收时,第9位数据送入RB8。方式(2)波特率 = *ƒ方式(3)波特率 = *(定时器T 溢出率)二 波特率的设置Mcs-51系列单片机串行通信的波特率取决于串行口的工作方式。方式0的波特率固定等于ƒ /12,方式2的波特率有两种:当SMOD=0时,波特率=ƒ /64;当SMOD=1时,波特率=ƒ /32。 SMOD是PCON寄存器的最高位,通过软件可设置SMOD=0或1,但注意PCON无位寻址功能。当串行口工作于方式1和方式3时,波特率= *定时器T 溢出率/32,其中T 溢出率=1/T 溢出周期。因此,影响波特率的因素除了设定的SMOD值以外,还有T 溢出率,使波特率的设置更灵活,范围更广。下面说明溢出率计算和波特率设方法。1) T 溢出率的计算串行通信方式1和3 下,使用定时器T 作为波特率发生器。T 可以工作于方式0、方式1和方式2。其中方式2为自动装入时间常数的8位定时器使用时只需进行初始化,不需要安排中断服务程序重装时间常数,因此是一种常用方式。Mcs-51系列单片机定时器时间计算式为:T = (2 -N)*12/ƒ式中:T ——定时器溢出周期n ——定时器位数N——时间常数即定时器初值ƒ ——振荡频率(2 -N)*12/ƒ当定时器T 工作于方式2,则有溢出周期=(2 -N)*12/ƒ溢出率=1/溢出周期= ƒ /12*(2 -N)2)波特率的设置:由上述可得当串行口工作于方式1或方式3,定时器T 工作于方式2时。 波特率 = 2 * T 溢出率/32=2 * ƒ /[32*12(2 -N);系统晶振是 MHzORG 0E30HSTART:MOV SP,#60Hmov A,#02HMOV R0,#79HMOV @R0,AINC R0MOV A,#10HMOV @R0,AINC R0MOV A,#01HMOV @R0,AINC R0MOV A,#03HMOV @R0,AINC R0MOV A,#00HMOV @R0,AINC R0MOV A,#08HMOV @R0,AMOV A,#7EHMOV DPTR,#1FFFHMOVX @DPTR,AMOV SCON,#50H ;串口 方式 1MOV TMOD,#20H ;T1 方式 1MOV TL1,#0CCH ;波特率 9600 的常数MOV TH1,#0CCHSETB TR1 ;开中断CLR ET1CLR ESWAIT:JBC RI,DIS_REC ;是否接收到数据LCALL DISP ;SJMP WAIT ;DIS_REC:MOV A,SBUF ;读串口接收到的数据LCALL DATAKEY ;显示输入的数字(0-F)DB 79H,7EHAJMP WAITDATAKEY:MOV R4,AMOV DPTR,#1FFFHMOVX A,@DPTRMOV R1,AMOV A,R4MOV @R1,ACLR APOP 83HPOP 82HMOVC A,@A+DPTRINC DPTRCJNE A,01H,DATAKEY2DEC R1CLR AMOVC A,@A+DPTRDATAKEY1:PUSH 82HPUSH 83HMOV DPTR,#1FFFHMOVX @DPTR,APOP 83HPOP 82HINC DPTRPUSH 82HPUSH 83HRETDATAKEY2:DEC R1MOV A,R1SJMP DATAKEY1DISP: SETB 0D4HMOV R1,#7EHMOV R2,#20HMOV R3,#00HDISP1:MOV DPTR,#DATACOMOV A,@R1MOVC A,@A+DPTRMOV DPTR,#0FF22HMOVX @DPTR,AMOV DPTR,#0FF21HMOV A,R2MOVX @DPTR,ALCALL DELAYDEC R1CLR CMOV A,R2RRC AMOV R2,AJNZ DISP1CLR 0D4HRETDELAY: MOV R7,#03HDELAY0: MOV R6,#0FFHDELAY1: DJNZ R6,DELAY1DJNZ R7,DELAY0RETDATACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH,0BFH,0CH,89H,0DEHEND