上位机报告.docx
《上位机报告.docx》由会员分享,可在线阅读,更多相关《上位机报告.docx(16页珍藏版)》请在冰豆网上搜索。
上位机报告
单片机接口设计
上位机
一、设计要求
1.定时呼叫下面每一个下位机(如5秒)
应答则表示通,显示:
地址_P(如1_P)
不应答表示不通,显示:
地址_E(如3_E)
2.可通过按键决定反复呼叫某个地址
3.通过按键控制要某地址的数据并显示(要数据命令为AAH)
4.通过按键控制修改某地址的数据并显示(修改定值或指示电梯楼层命令为55H)
5.显示下位机报警,如:
1:
FF
二、硬件系统设计
1、元件列表
元件
数量
AT89C51
1
75452
2
8段数码管(共阴)
4
300Ω电阻
9
2KΩ电阻
8
5KΩ电阻
1
晶振12M
1
20pF非极性电容
2
20uF电解电容
1
按钮
4
开关
4
2、整体电路图
单片机的引脚资源分配:
18、19脚接12M晶振,9脚接按键复位,20脚接地,40脚接VCC,P1.0、P1.1、P1.2、P1.3、P1.4、P1.5、P1.6接7个控制开关和按钮,P1.7接发光二极管,P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7接共阴极数码管字形码控制端,P2.0,、P2.1、P2.2、P2.3接数码管驱动电路75452,RXD和TXD接口用于通信接口与从机相连。
3、整体实物电路图
三、软件系统说明
1、软件流程图
说明:
图中只画出了查询过程,还有定时5s后调用M0,并发送非法命令03H。
2、软件清单
说明:
1、工作寄存器分配:
R0:
用于发送数据寻址,初值:
30H
R1:
用于接收数据寻址,初值:
40H
R2:
用于存放通信地址
R3:
用于存放命令
R4:
用于存放数据传输个数
R5:
用于存放定时器中断次数
R5、R6:
用于DELY延时
2、I/O分配
P0:
数码管显示的字形码输出
P1:
接控制开关和按钮
P2:
数码管显示的片选
P3:
通行口P3.0、P3.1
ORG0000H;定义段首地址
LJMPMAIN;跳到主程序
ORG000BH;定时器1中断入口
LJMPT0
ORG0023H;串行口中断入口
LJMPCUK
ORG0030H
MAIN:
MOVTMOD,#21H;初始化定时器0,1
MOVTH0,#3CH
MOVTL0,#0B0H
MOVR5,#100
MOVTL1,#0FCH
MOVTH1,#0FCH
MOVPCON,#00H
MOVSCON,#0D8H;选择串行口方式3
SETBTR1;开T1定时器,产生波特率
SETBEA
CLRES
SETBET0
MOV30H,#01H
MOV31H,#01H
MOV32H,#01H
MOV33H,#01H
LCALLDSP1;开始显示横杠等待
SETBTR0
MOVR2,#0FFH
MOVP1,#0FFH;将P1口电平抬高,P1作输入
MOVA,P1
AA:
JBACC.4,BB;查询P1.4口,判断是否反复呼叫
CLRTR0
ANLA,#0FH
MOVR2,A
MOVR3,#03H
LCALLM0;调用通信子程序
SETBTR0
BB:
MOVP1,#0FFH
MOVA,P1
JBACC.5,CC;查询P1.5,判断是否向下位机要数据
CLRTR0
ANLA,#0FH
MOVR2,A
MOVR3,#0AAH
LCALLM0;调用通信子程序
SETBTR0
CC:
MOVP1,#0FFH
MOVA,P1
JBACC.6,AA;查询P1.5,判断是否向下位机传数据
CLRTR0
ANLA,#0FH
MOVR2,A
MOVR3,#55H
LCALLM0;调用通信子程序
SETBTR0
AJMPAA
ORG0100H
T0:
MOVTL0,#0B0H;T0中断服务程序
MOVTH0,#3CH
DJNZR5,TM
INCR2
MOVR3,#03H
MOVR4,#6
LCALLM0;定时5S后,调用通信子程序
MOVR5,#100
TM:
RETI
CUK:
JNBTI,C1;串行口中断服务程序
CLRTI
C1:
MOVA,SBUF
CJNEA,#0FFH,DD;判断下位机发的数据是否为报警
LCALLDSPF;调用报警显示子程序
DD:
RETI
;通信服务子程序
M0:
MOVR0,#30H;初始化,传输数据和接收数据首地址
MOVR1,#40H
MOVR4,#6
MOVSCON,#0D8H
M1:
CJNER2,#3,EE;判断查询的下位机的数是否超过范围
SJMPFF
EE:
JCFF
MOVR2,#0
FF:
MOVA,R2
MOVSBUF,A;发送地址
GG:
LCALLDELY1;延时
JNBRI,M2;判断是否能正常通信
CLRRI
MOVA,SBUF;判断下位机是否收到
XRLA,R2
JZM3;建立一对一连接
M2:
LCALLFALL;连接失败,显示EE
LCALLDSP1;显示横杆等待
SETBTB8
SJMPBACK
M3:
LCALLSUCC;连接成功,显示PP
LCALLDSP1;显示横杆等待
CLRTB8
CLRTB8
MOVSBUF,R3;发送指令
JNBRI,$
CLRRI
MOVA,SBUF;接收下位机状态字
JNBACC.7,M4;下位机收到的命令是否合法
SJMPBACK
M4:
CJNER3,#55H,M5
JNBACC.0,M2;下位机接收收是否就绪
MOVR0,#30H
MOVR4,#04H
TRAN:
MOVSBUF,@R0;主机向下位机发送数据
JNBTI,$
CLRTI
LCALLDELY
INCR0
DJNZR4,TRAN
MOVR0,#30H
LCALLOUT;调用OUT发送数据显示
LCALLDSP1
RET
M5:
JNBACC.1,M2;下位机发送是否就绪
MOVR1,#40H
MOVR4,#4
RECE:
JNBRI,$;主机接收数据
CLRRI
MOVA,SBUF
MOV@R1,A
INCR1
DJNZR4,RECE
MOVR1,#40H
LCALLIN;调用IN接收数据显示
LCALLDSP1
BACK:
RET
DSP1:
MOVP2,#00001111B;显示等待横杆子程序
MOVP0,#40H
LCALLDELY
RET
DSPF:
MOVDPTR,#TABL;显示报警错误子程序
MOVA,R2
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00000001B
LCALLDELY
MOVP2,#00000010B
MOVP0,#08H
LCALLDELY
MOVP2,#00001100B
MOVP0,#71H
LCALLDELY
RET
SUCC:
MOVDPTR,#TABL;显示连接成功主程序
MOVA,R2
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00000001B
LCALLDELY
MOVP2,#00000010B
MOVP0,#08H
LCALLDELY
MOVP2,#00000011B
MOVP0,#73H
LCALLDELY
RET
FALL:
MOVDPTR,#TABL;显示连接失败子程序
MOVA,R2
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00000001B
LCALLDELY
MOVP2,#00000010B
MOVP0,#08H
LCALLDELY
MOVP2,#00000100B
MOVP0,#79H
LCALLDELY
RET
OUT:
MOVDPTR,#TABL;显示发送数据子程序
MOVA,@R0
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00000001B
LCALLDELY
INCR0
MOVA,@R0
MOVDPTR,#TABL
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00000010B
LCALLDELY
INCR0
MOVA,@R0
MOVDPTR,#TABL
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00000100B
LCALLDELY
INCR0
MOVA,@R0
MOVDPTR,#TABL
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00001000B
LCALLDELY
RET
IN:
MOVDPTR,#TABL;显示接收数据子程序
MOVA,@R1
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00000001B
LCALLDELY
INCR1
MOVA,@R1
MOVDPTR,#TABL
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00000010B
LCALLDELY
INCR1
MOVA,@R1
MOVDPTR,#TABL
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00000100B
LCALLDELY
INCR1
MOVA,@R1
MOVDPTR,#TABL
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#00001000B
LCALLDELY
RET
DELY:
MOVR6,#0FFH;延时子程序DELY
DY:
MOVR7,#0FFH
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZR7,$
DJNZR6,DY
RET
DELY1:
MOV50H,#0FFH;延时子程序DELY1
XX:
MOV51H,#0FFH
DJNZ51H,$
NOP
NOP
NOP
NOP
DJNZ50H,XX
SETB00H
RET
TABL:
DB3FH06H5BH4FH66H6DH7DH07H7FH6FH
END
四、调试过程
1、程序编写完后,首先使用了PROTEUS软件进行模拟仿真。
但是始终无法正常通信。
(主机发送数据,从机收不到,而主机收到的数据一直是00H),经过2天反复调试始终没有结果,最终放弃了PROTEUS的模拟仿真,直接使用伟福实验箱进行主从机通信实验。
2、在用伟福实验箱进行调试过程中,也不是一帆风顺,经过了反复的调试。
可是在主机发出地址呼叫从机的时候,主机总是不能接受到从机发来的地址验证,而通过程序执行指示灯从机确实接收到主机发送的地址,并返回了地址验证,而主机接收不到地址验证,一直等待接收。
在经过老师的指导下,发现是因为串行通信未接地。
最终使得通信正常(可能是因为没有共公的地线,单片机无法确定收到和接受到信号的电平)。
接下来的调试都比较顺利,很快就使得程序能实现功能。
3、因为没有印刷的电路板,电路的焊接的工作量很大。
元件布局和走线都很麻烦。
但幸运的是没有焊接和连线的错误,所以硬件调试很顺利。
4、为了确定硬件的显示是否正常,先编了一个小显示程序检验电路的数码管显示功能。
正常后重新写入程序,演示功能。
五、心得体会
课程设计的时间比较短,所以这6天一直没闲着,从第一天选题到最后验收,中间没有中断过。
源程序的编写难度并不大,整体的思路很容易想的,但是最令我头疼的是软件仿真调试和和硬件调试。
程序有错很好改,程序执行功能没实现也好办,就怕在不应该出错的地方出错,那就无从下手。
编程一天,但是调试用了3天,焊接电路一天。
值得庆幸的是硬件焊接没有出错,也许是布线和焊接都比较小心的原因吧!
通过本次单片机接口的课程设计,熟悉了基本的单片机系统的开发过程,最重要的是有积累了一些软件和硬件调试的技巧。
以往做实验没有考虑单片机系统的硬件是个什么样子。
此次课程设计彻底明白了单片机硬件的连接和部分元件的使用,可以说是受益匪浅。
以前的学习都只是停留在课本上基本的思想,之前总以为想着很简单的事,但实际做的时候却出现这样、那样的问题。
要在实践中发现问题、解决问题。
空想是要不得的。