一、课程设计的目的与要求
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;
CSEG AT 0000H
LJMP START
CSEG AT 4100H
PORT EQU 0CFA0H
START: MOV TMOD,#20H ;
MOV TL1,#0F2H ;
MOV TH1,#0F2H
MOV 87H,#00H ;
SETB TR1 ;
MOV SCON,#50H ;
MOV R1,#12H ;
MOV DPTR,#TABLE
MOV A,DPL
MOV DPTR,#L1
CLR C
SUBB A,DPL ;
MOV R5,A ;
MOV R0,A
SEND: MOV A,R0
MOVC A,@A+PC ;
L1: MOV SBUF,A ;
WAIT: JBC RI,L2 ;
SJMP WAIT
L2: CLR RI
CLR TI
MOV A,SBUF
MOV DPTR,#PORT
MOVX @DPTR,A
ACALL DELAY
INC R0
DJNZ R1,SEND
MOV R1,#12H
MOV A,R5
MOV R0,A
JMP SEND
TABLE: DB 01H, 03H, 07H, 0FH, 1FH, 3FH,7FH,0FFH,0FEH
DB 0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H
DELAY: MOV R4,#05H
DEL1: MOV R3,#200
DEL2: MOV R2,#126
DEL3: DJNZ R2,DEL3
DJNZ R3,DEL2
DJNZ R4,DEL1
RET
END
现象:8个LED小灯按表中取出的指令顺序点亮
2、双机通信系统的设计
(1)发送机
NAME T13F ;双机通讯实验(发送程序)
CSEG AT 0000H
LJMP START
CSEG AT 4100H
PORT EQU 0CFE8H
START: MOV DPTR,#PORT+1 ;8279命令字
MOV A,#0D1H ;清除
MOVX @DPTR,A
WAIT: MOVX A,@DPTR
JB ACC.7,WAIT ;等待清除完毕
MOV TMOD,#20H
MOV TH1,#0F2H
MOV TL1,#0F2H
SETB TR1
MOV SCON,#50H
MOV 87H,#80H
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
LOOP1: MOVX A,@DPTR
ANL A,#0FH
JZ LOOP1 ;有键按下?
MOV A,#0A0H ;显示消隐命令
MOVX @DPTR,A
MOV DPTR,#PORT ;读键值
MOVX A,@DPTR
ANL A,#3FH
MOV R7,A ;状态保存
MOV 50H,51H
MOV 51H,52H
MOV 52H,53H
MOV 53H,54H
MOV 54H,55H
LOP: MOV A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR ;查取数字键的字型码
MOV 55H,A
mov 40h,a
SUBB A,#80H
JZ ERROR ;非数字键则跳转
ACALL DISP
SJMP TXACK
DISP: MOV DPTR,#PORT+1
MOV A,#90H
MOVX @DPTR,A
MOV R6,#06H
MOV R1,#50H
MOV DPTR,#PORT
DL0: MOV A,@R1
MOVX @DPTR,A
INC R1
DJNZ R6,DL0
RET
TXACK: MOV A,#06H ;发呼叫信号"06"
MOV SBUF,A
WAIT1: JBC TI,RXYES ;等待发送完一个字节
SJMP WAIT1
RXYES: JBC RI,NEXT1 ;等待乙机回答
SJMP RXYES
NEXT1: MOV A,SBUF ;判断乙机是否同意接收,不同意继续呼叫
CJNE A,#00H,TXACK
MOV A,40H
MOV SBUF,A
WAIT2: JBC TI,TXNEWS
SJMP WAIT2
TXNEWS: JBC RI,IF0DDH
SJMP TXNEWS
IF0DDH: MOV A,SBUF
CJNE A,#0FH,TXACK ;判断乙机是否接收正确,不正确继续呼叫
MOV DPTR,#0CFE9H
LJMP LOOP1
ERROR: MOV 50H,#79H
MOV 51H,#31H
MOV 52H,#31H
MOV 53H,#5CH
MOV 54H,#31H
MOV 55H,#80H
LCALL DISP
DD: MOV DPTR,#PORT+1
MOVX A,@DPTR
ANL A,#0FH
JZ DD ;有键按下?
MOV A,#0A0H ;显示消隐命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;读键值
MOVX A,@DPTR
ANL A,#3FH
MOV R7,A ;状态保存
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
LJMP LOP
TAB1: DB 3FH,06H,5BH,4FH,80H,80H ;键值字型码表
DB 66H,6DH,7DH,07H,80H,80H
DB 7FH,6FH,77H,7CH,80H,80H
DB 39H,5EH,79H,71H,80H,80H
DB 80H,80H,80H,80H
END
(2)接收机
NAME T13J ;双机通讯实验
CSEG AT 0000H
LJMP START
CSEG AT 4100H
PORT EQU 0CFE8H
START: MOV DPTR,#PORT+1 ;8279命令字
MOV A,#0D1H ;清除
MOVX @DPTR,A
WAIT: MOVX A,@DPTR
JB ACC.7,WAIT ;等待清除完毕
MOV TMOD,#20H
MOV TH1,#0F2H ;初始化定时器
MOV TL1,#0F2H
SETB TR1
MOV SCON,#50H ;初始化串行口
MOV 87H,#80H
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
SJMP RXACK
DISP: MOV DPTR,#PORT+1
MOV A,#90H
MOVX @DPTR,A
MOV R6,#06H
MOV R1,#50H
MOV DPTR,#PORT
DL0: MOV A,@R1
MOVX @DPTR,A
INC R1
DJNZ R6,DL0
RET
RXACK: JBC RI,IF06H ;接收呼叫信号
SJMP RXACK
IF06H: MOV A,SBUF ;判断呼叫是否有误
CJNE A,#06H,TX15H
TX00H: MOV A,#00H
MOV SBUF,A
WAIT1: JBC TI,RXBYTES ;等待应答信号发送完
SJMP WAIT1
TX15H: MOV A,#0F0H ;向甲机报告接收的呼叫信号不正确
MOV SBUF,A
WAIT2: JBC TI,HAVE1
SJMP WAIT2
HAVE1: SJMP RXACK
RXBYTES:JBC RI,HAVE2
SJMP RXBYTES
HAVE2: MOV A,SBUF
MOV R7,A
MOV A,#0FH
MOV SBUF,A
WAIT3: JBC TI,LOOP1
SJMP WAIT3
LOOP1: MOV DPTR,#PORT+1
MOV A,#0A0H ;显示消隐命令
MOVX @DPTR,A
MOV 50H,51H
MOV 51H,52H
MOV 52H,53H
MOV 53H,54H
MOV 54H,55H
MOV A,R7
MOV 55H,A
LCALL DISP
LJMP RXACK
END
四、课程设计的心得与体会
单片机的课程设计是这学期的最后一个课设了,主要是把学习的课本知识运用到实践中。我选择的是第三个题目,双机通信系统设计,选择这个课题的同学比较少,本来想好好的发挥一下,结果失败了。基本的要求达到了,但是,我们少了一些环节,键盘接入后不能正确的传输过去。虽然没有成功,但是我们从中学到了一些课堂上不能得到的知识。我认为,课程设计的目的不只在于结果的成功与否,而在于锻炼我们的实际动手能力,从而学到一些实质性的操作意。紧张的实操环节已经结束了,希望在此次课设中的收获能够对接下来的相关专业学习有所帮助。
感谢老师的指导!
五、参考文献
[1] 李全利.单片机原理与接口技术.高等教育出版社
[2] 李向军.单片机原理与接口技术实验指导书.自编教材
[3] 李江全.单片机数据通讯及测控应用技术详解.电子工业出版社