五角大楼和白宫的区别:8031双机串行通信实验设计

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 18:30:10
哪位朋友帮个忙嘛,帮我弄一下这个,我的课程设计弄了几天了还没做出来时间也快到了,真烦哪,请求知道的朋友们帮我一下啊,小弟先谢了,当然我还会追加分的谢谢了急急急~~~~~~~~~~~~
实验设备:DVCC仿真系统二套。
实验内容:利用8031单片机串行口,实现双机通信。将1号实验机键盘上键入的数字显示到2号实验机的数码管上,接受数据无误,则发送方屏幕上显示“OK”否则则发回发送方,并在屏幕上显示所发生的字符
在线等啊急急急~~~~~~~~~~~~~请无随便回答谢谢合作

哎直接给我算咯, 串行通信
  一、实验目的
  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)
  ;系统晶振是 6.0 MHz

  ORG 0E30H
  START:
  MOV SP,#60H
  mov A,#02H
  MOV R0,#79H
  MOV @R0,A
  INC R0
  MOV A,#10H
  MOV @R0,A
  INC R0
  MOV A,#01H
  MOV @R0,A
  INC R0
  MOV A,#03H
  MOV @R0,A
  INC R0
  MOV A,#00H
  MOV @R0,A
  INC R0
  MOV A,#08H
  MOV @R0,A
  MOV A,#7EH
  MOV DPTR,#1FFFH
  MOVX @DPTR,A
  MOV SCON,#50H ;串口 方式 1
  MOV TMOD,#20H ;T1 方式 1
  MOV TL1,#0CCH ;波特率 9600 的常数
  MOV TH1,#0CCH
  SETB TR1 ;开中断
  CLR ET1
  CLR ES
  WAIT:
  JBC RI,DIS_REC ;是否接收到数据
  LCALL DISP ;
  SJMP WAIT ;
  DIS_REC:
  MOV A,SBUF ;读串口接收到的数据
  LCALL DATAKEY ;显示输入的数字(0-F)
  DB 79H,7EH
  AJMP WAIT

  DATAKEY:MOV R4,A
  MOV DPTR,#1FFFH
  MOVX A,@DPTR
  MOV R1,A
  MOV A,R4
  MOV @R1,A
  CLR A
  POP 83H
  POP 82H
  MOVC A,@A+DPTR
  INC DPTR
  CJNE A,01H,DATAKEY2
  DEC R1
  CLR A
  MOVC A,@A+DPTR
  DATAKEY1:PUSH 82H
  PUSH 83H
  MOV DPTR,#1FFFH
  MOVX @DPTR,A
  POP 83H
  POP 82H
  INC DPTR
  PUSH 82H
  PUSH 83H
  RET
  DATAKEY2:DEC R1
  MOV A,R1
  SJMP DATAKEY1

  DISP: SETB 0D4H
  MOV R1,#7EH
  MOV R2,#20H
  MOV R3,#00H
  DISP1:
  MOV DPTR,#DATACO
  MOV A,@R1
  MOVC A,@A+DPTR
  MOV DPTR,#0FF22H
  MOVX @DPTR,A
  MOV DPTR,#0FF21H
  MOV A,R2
  MOVX @DPTR,A
  LCALL DELAY
  DEC R1
  CLR C
  MOV A,R2
  RRC A
  MOV R2,A
  JNZ DISP1
  CLR 0D4H
  RET
  DELAY: MOV R7,#03H
  DELAY0: MOV R6,#0FFH
  DELAY1: DJNZ R6,DELAY1
  DJNZ R7,DELAY0
  RET
  DATACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
  DB 88H,83H,0C6H,0A1H,86H,8EH,0BFH,0CH,89H,0DEH
  END

年轻人多学点东西,这么简单的程序都写不出
到daxia.com去着一下例子吧

这个不简单~~很麻烦的`
建议你找个同学或朋友商量商量

用c51还是用汇编写,c51几行就解决问题了,用汇编的话典型的通讯程序呀,随便找本书抄一个就是了