双机通信系统的设计.docx
《双机通信系统的设计.docx》由会员分享,可在线阅读,更多相关《双机通信系统的设计.docx(12页珍藏版)》请在冰豆网上搜索。
![双机通信系统的设计.docx](https://file1.bdocx.com/fileroot1/2022-10/24/15abe992-8f50-4838-a0ac-d5133c3dcf2d/15abe992-8f50-4838-a0ac-d5133c3dcf2d1.gif)
双机通信系统的设计
双机通信系统的设计
一、课程设计的目的与要求
1、课程设计目的:
(1)进一步理解和消化书本知识,运用所学知识和技能进行简单的设计。
(2)通过课程设计提高应用能力,分析问题和解决问题的能力。
(3)培养查阅资料的习惯,训练和提高自学,独立思考的能力。
2、课程设计要求
双机通信系统的设计
1)掌握串行口工作方式的程序设计。
2)掌握单片机通讯程序的编制。
3)了解实现串行通讯的硬件环境,数据格式、数据交换的协议。
4)掌握在8031系统中扩展8279键盘显示接口的方法。
5)了解键盘电路工作原理及编程方法。
从课程设计的目的出发,通过设计工作的各个环节,达到以下要求:
(1)能够正确理解课程设计的题目和意义,全面思考问题。
(2)运用科学合理的方法,认真按时完成。
二、课程设计课题的分析
MCS—51单片机内穿行口的SBUF有两个:
接收SBUF和发送SBUF,二者在物理结构上是独立的,单片机用它们来接收和发送数据。
专用寄存器SCON和PCON控制串行口的工作方式和波特率。
定时器1作为波特率发生器。
编程时注意两点:
一时初始化,设置波特率和数据格式。
二是确定数据传送方式。
数据传送方式有两种:
查询方式和中断方式。
为确保通讯成功,甲机和乙机必须有一个一致的通讯协议,例程的通讯协议如下:
通讯双方均采用2400波特的速率传送,甲机发送数据,乙机接收数据。
双机开始通讯时,甲机发送一个呼叫信号“06”,询问乙机是否可以接收数据;乙机受到呼叫信号后,若同意接收数据则发回“00”作为应答,否则发“F0”表示暂不能接收数据;甲机只有受到乙机的应答信号“00”后才可把要发送的数据发送给乙机,否则继续向乙机呼叫,直到乙机同意接受。
其发送数据格式为:
字节数n:
甲机将向乙机发送的数据个数
数据1~数据n:
甲机将向乙机发送的n个数据
乙机接收到数据后,向甲机回发“0F”信号。
甲机只有接到信号“0F”才算完成发送任务,否则继续呼叫,重发数据。
电路及程序的设计
8031串行口显示电路
原理图,硬件电路图,较详细的程序流程图。
流程图:
A机流程图:
B机流程图:
三、课程设计的结果
1基本功能
利用8031串行口发送和接收数据,并将接收的数据通过扩展I/O口74LS273输出到发光二极管显示,结合延时来模拟一个循环彩灯。
彩灯变化花样可自行设计。
例:
①L1、L2、…L8依次点亮;②L1、L2、…L8依次熄灭;③L1、L2、…L8全亮、全灭。
各时序间隔为0.5秒。
让发光二极管按以上规律循环显示下去。
;8031的TXD接RXD;74LS273的CS273接CS0;SO0~SO7接发光二极管的L1~L8;
CSEGAT0000H
LJMPSTART
CSEGAT4100H
PORTEQU0CFA0H
START:
MOVTMOD,#20H;
MOVTL1,#0F2H;
MOVTH1,#0F2H
MOV87H,#00H;
SETBTR1;
MOVSCON,#50H;
MOVR1,#12H;
MOVDPTR,#TABLE
MOVA,DPL
MOVDPTR,#L1
CLRC
SUBBA,DPL;
MOVR5,A;
MOVR0,A
SEND:
MOVA,R0
MOVCA,@A+PC;
L1:
MOVSBUF,A;
WAIT:
JBCRI,L2;
SJMPWAIT
L2:
CLRRI
CLRTI
MOVA,SBUF
MOVDPTR,#PORT
MOVX@DPTR,A
ACALLDELAY
INCR0
DJNZR1,SEND
MOVR1,#12H
MOVA,R5
MOVR0,A
JMPSEND
TABLE:
DB01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH
DB0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H
DELAY:
MOVR4,#05H
DEL1:
MOVR3,#200
DEL2:
MOVR2,#126
DEL3:
DJNZR2,DEL3
DJNZR3,DEL2
DJNZR4,DEL1
RET
END
现象:
8个LED小灯按表中取出的指令顺序点亮
2、双机通信系统的设计
(1)发送机
NAMET13F;双机通讯实验(发送程序)
CSEGAT0000H
LJMPSTART
CSEGAT4100H
PORTEQU0CFE8H
START:
MOVDPTR,#PORT+1;8279命令字
MOVA,#0D1H;清除
MOVX@DPTR,A
WAIT:
MOVXA,@DPTR
JBACC.7,WAIT;等待清除完毕
MOVTMOD,#20H
MOVTH1,#0F2H
MOVTL1,#0F2H
SETBTR1
MOVSCON,#50H
MOV87H,#80H
MOV50H,#00H
MOV51H,#00H
MOV52H,#00H
MOV53H,#00H
MOV54H,#00H
MOV55H,#00H
LOOP1:
MOVXA,@DPTR
ANLA,#0FH
JZLOOP1;有键按下?
MOVA,#0A0H;显示消隐命令
MOVX@DPTR,A
MOVDPTR,#PORT;读键值
MOVXA,@DPTR
ANLA,#3FH
MOVR7,A;状态保存
MOV50H,51H
MOV51H,52H
MOV52H,53H
MOV53H,54H
MOV54H,55H
LOP:
MOVA,R7
MOVDPTR,#TAB1
MOVCA,@A+DPTR;查取数字键的字型码
MOV55H,A
mov40h,a
SUBBA,#80H
JZERROR;非数字键则跳转
ACALLDISP
SJMPTXACK
DISP:
MOVDPTR,#PORT+1
MOVA,#90H
MOVX@DPTR,A
MOVR6,#06H
MOVR1,#50H
MOVDPTR,#PORT
DL0:
MOVA,@R1
MOVX@DPTR,A
INCR1
DJNZR6,DL0
RET
TXACK:
MOVA,#06H;发呼叫信号"06"
MOVSBUF,A
WAIT1:
JBCTI,RXYES;等待发送完一个字节
SJMPWAIT1
RXYES:
JBCRI,NEXT1;等待乙机回答
SJMPRXYES
NEXT1:
MOVA,SBUF;判断乙机是否同意接收,不同意继续呼叫
CJNEA,#00H,TXACK
MOVA,40H
MOVSBUF,A
WAIT2:
JBCTI,TXNEWS
SJMPWAIT2
TXNEWS:
JBCRI,IF0DDH
SJMPTXNEWS
IF0DDH:
MOVA,SBUF
CJNEA,#0FH,TXACK;判断乙机是否接收正确,不正确继续呼叫
MOVDPTR,#0CFE9H
LJMPLOOP1
ERROR:
MOV50H,#79H
MOV51H,#31H
MOV52H,#31H
MOV53H,#5CH
MOV54H,#31H
MOV55H,#80H
LCALLDISP
DD:
MOVDPTR,#PORT+1
MOVXA,@DPTR
ANLA,#0FH
JZDD;有键按下?
MOVA,#0A0H;显示消隐命令
MOVX@DPTR,A
MOVDPTR,#0CFE8H;读键值
MOVXA,@DPTR
ANLA,#3FH
MOVR7,A;状态保存
MOV50H,#00H
MOV51H,#00H
MOV52H,#00H
MOV53H,#00H
MOV54H,#00H
LJMPLOP
TAB1:
DB3FH,06H,5BH,4FH,80H,80H;键值字型码表
DB66H,6DH,7DH,07H,80H,80H
DB7FH,6FH,77H,7CH,80H,80H
DB39H,5EH,79H,71H,80H,80H
DB80H,80H,80H,80H
END
(2)接收机
NAMET13J;双机通讯实验
CSEGAT0000H
LJMPSTART
CSEGAT4100H
PORTEQU0CFE8H
START:
MOVDPTR,#PORT+1;8279命令字
MOVA,#0D1H;清除
MOVX@DPTR,A
WAIT:
MOVXA,@DPTR
JBACC.7,WAIT;等待清除完毕
MOVTMOD,#20H
MOVTH1,#0F2H;初始化定时器
MOVTL1,#0F2H
SETBTR1
MOVSCON,#50H;初始化串行口
MOV87H,#80H
MOV50H,#00H
MOV51H,#00H
MOV52H,#00H
MOV53H,#00H
MOV54H,#00H
MOV55H,#00H
SJMPRXACK
DISP:
MOVDPTR,#PORT+1
MOVA,#90H
MOVX@DPTR,A
MOVR6,#06H
MOVR1,#50H
MOVDPTR,#PORT
DL0:
MOVA,@R1
MOVX@DPTR,A
INCR1
DJNZR6,DL0
RET
RXACK:
JBCRI,IF06H;接收呼叫信号
SJMPRXACK
IF06H:
MOVA,SBUF;判断呼叫是否有误
CJNEA,#06H,TX15H
TX00H:
MOVA,#00H
MOVSBUF,A
WAIT1:
JBCTI,RXBYTES;等待应答信号发送完
SJMPWAIT1
TX15H:
MOVA,#0F0H;向甲机报告接收的呼叫信号不正确
MOVSBUF,A
WAIT2:
JBCTI,HAVE1
SJMPWAIT2
HAVE1:
SJMPRXACK
RXBYTES:
JBCRI,HAVE2
SJMPRXBYTES
HAVE2:
MOVA,SBUF
MOVR7,A
MOVA,#0FH
MOVSBUF,A
WAIT3:
JBCTI,LOOP1
SJMPWAIT3
LOOP1:
MOVDPTR,#PORT+1
MOVA,#0A0H;显示消隐命令
MOVX@DPTR,A
MOV50H,51H
MOV51H,52H
MOV52H,53H
MOV53H,54H
MOV54H,55H
MOVA,R7
MOV55H,A
LCALLDISP
LJMPRXACK
END
四、课程设计的心得与体会
单片机的课程设计是这学期的最后一个课设了,主要是把学习的课本知识运用到实践中。
我选择的是第三个题目,双机通信系统设计,选择这个课题的同学比较少,本来想好好的发挥一下,结