上位机报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机接口设计
上位机
一、设计要求
1.定时呼叫下面每一个下位机(如5秒)
应答则表示通,显示:地址_P(如1_P)
不应答表示不通,显示:地址_E(如3_E)
2.可通过按键决定反复呼叫某个地址
3.通过按键控制要某地址的数据并显示(要数据命令为AAH)
4.通过按键控制修改某地址的数据并显示(修改定值或指示电梯楼层命令为55H)
5.显示下位机报警,如:1:FF
二、硬件系统设计
1、元件列表
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
ORG 0000H ;定义段首地址
LJMP MAIN ;跳到主程序
ORG 000BH ;定时器1中断入口
LJMP T0
ORG 0023H ;串行口中断入口
LJMP CUK
ORG 0030H
MAIN:MOV TMOD,#21H ;初始化定时器0,1
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R5,#100
MOV TL1,#0FCH
MOV TH1,#0FCH
MOV PCON,#00H
MOV SCON,#0D8H ;选择串行口方式3
SETB TR1 ;开T1定时器,产生波特率
SETB EA
CLR ES
SETB ET0
MOV 30H,#01H
MOV 31H,#01H
MOV 32H,#01H
MOV 33H,#01H
LCALL DSP1 ;开始显示横杠等待
SETB TR0
MOV R2,#0FFH
MOV P1,#0FFH ;将P1口电平抬高,P1作输入
MOV A,P1
AA:JB ACC.4,BB ;查询P1.4口,判断是否反复呼叫
CLR TR0
ANL A,#0FH
MOV R2,A
MOV R3,#03H
LCALL M0 ;调用通信子程序
SETB TR0
BB:MOV P1,#0FFH
MOV A,P1
JB ACC.5,CC ;查询P1.5,判断是否向下位机要数据 CLR TR0
ANL A,#0FH
MOV R2,A
MOV R3,#0AAH
LCALL M0 ;调用通信子程序
SETB TR0
CC:MOV P1,#0FFH
MOV A,P1
JB ACC.6,AA ;查询P1.5,判断是否向下位机传数据 CLR TR0
ANL A,#0FH
MOV R2,A
MOV R3,#55H
LCALL M0 ;调用通信子程序
SETB TR0
AJMP AA
ORG 0100H
T0:MOV TL0,#0B0H ;T0中断服务程序
MOV TH0,#3CH
DJNZ R5,TM
INC R2
MOV R3,#03H
MOV R4,#6
LCALL M0 ;定时5S后,调用通信子程序
MOV R5,#100
TM:RETI
CUK:JNB TI,C1 ;串行口中断服务程序
CLR TI
C1:MOV A,SBUF
CJNE A,#0FFH,DD ;判断下位机发的数据是否为报警
LCALL DSPF ;调用报警显示子程序
DD:RETI
;通信服务子程序
M0:MOV R0,#30H ;初始化,传输数据和接收数据首地址 MOV R1,#40H
MOV R4,#6
MOV SCON,#0D8H
M1:CJNE R2,#3,EE ;判断查询的下位机的数是否超过范围 SJMP FF
EE:JC FF
MOV R2,#0
FF:MOV A,R2
MOV SBUF,A ;发送地址
GG:LCALL DELY1 ;延时
JNB RI,M2 ;判断是否能正常通信
CLR RI
MOV A,SBUF ;判断下位机是否收到
XRL A,R2
JZ M3 ;建立一对一连接
M2:LCALL FALL ;连接失败,显示EE
LCALL DSP1 ;显示横杆等待
SETB TB8
SJMP BACK
M3:LCALL SUCC ;连接成功,显示PP
LCALL DSP1 ;显示横杆等待
CLR TB8
CLR TB8
MOV SBUF,R3 ;发送指令
JNB RI,$
CLR RI
MOV A,SBUF ;接收下位机状态字
JNB ACC.7,M4 ;下位机收到的命令是否合法
SJMP BACK
M4:CJNE R3,#55H,M5
JNB ACC.0,M2 ;下位机接收收是否就绪
MOV R0,#30H
MOV R4,#04H
TRAN:MOV SBUF,@R0 ;主机向下位机发送数据
JNB TI,$
CLR TI
LCALL DELY
INC R0
DJNZ R4,TRAN
MOV R0,#30H
LCALL OUT ;调用OUT发送数据显示 LCALL DSP1
RET
M5:JNB ACC.1,M2 ;下位机发送是否就绪
MOV R1,#40H
MOV R4,#4
RECE:JNB RI,$ ;主机接收数据
CLR RI
MOV A,SBUF
MOV @R1,A
INC R1
DJNZ R4,RECE
MOV R1,#40H
LCALL IN ;调用IN接收数据显示 LCALL DSP1
BACK:RET
DSP1:MOV P2,#00001111B ;显示等待横杆子程序
MOV P0,#40H
LCALL DELY
RET
DSPF:MOV DPTR,#TABL ;显示报警错误子程序
MOV A,R2
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00000001B
LCALL DELY
MOV P2,#00000010B
MOV P0,#08H
LCALL DELY
MOV P2,#00001100B
MOV P0,#71H
LCALL DELY
RET
SUCC:MOV DPTR,#TABL ;显示连接成功主程序
MOV A,R2
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00000001B
LCALL DELY
MOV P2,#00000010B
MOV P0,#08H
LCALL DELY
MOV P2,#00000011B
MOV P0,#73H
LCALL DELY
RET
FALL:MOV DPTR,#TABL ;显示连接失败子程序 MOV A,R2
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00000001B
LCALL DELY
MOV P2,#00000010B
MOV P0,#08H
LCALL DELY
MOV P2,#00000100B
MOV P0,#79H
LCALL DELY
RET
OUT:MOV DPTR,#TABL ;显示发送数据子程序 MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00000001B
LCALL DELY
INC R0
MOV A,@R0
MOV DPTR,#TABL
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00000010B
LCALL DELY
INC R0
MOV A,@R0
MOV DPTR,#TABL
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00000100B
LCALL DELY
INC R0
MOV A,@R0
MOV DPTR,#TABL
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00001000B
LCALL DELY
RET
IN:MOV DPTR,#TABL ;显示接收数据子程序 MOV A,@R1
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00000001B
LCALL DELY
INC R1
MOV A,@R1
MOV DPTR,#TABL
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00000010B
LCALL DELY
INC R1
MOV A,@R1
MOV DPTR,#TABL
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00000100B
LCALL DELY
INC R1
MOV A,@R1
MOV DPTR,#TABL
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#00001000B
LCALL DELY
RET
DELY:MOV R6,#0FFH ;延时子程序DELY
DY:MOV R7,#0FFH
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,$
DJNZ R6,DY
RET
DELY1:MOV 50H,#0FFH ;延时子程序DELY1
XX:MOV 51H,#0FFH
DJNZ 51H,$
NOP
NOP
NOP
NOP
DJNZ 50H,XX
SETB 00H
RET
TABL:DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH
END
四、调试过程
1、程序编写完后,首先使用了PROTEUS软件进行模拟仿真。
但是始终无法正常通信。
(主机发送数据,从机收不到,而主机收到的数据一直是00H),经过2天反复调试始终没有结果,最终放弃了PROTEUS的模拟仿真,直接使用伟福实验箱进行主从机通信实验。
2、在用伟福实验箱进行调试过程中,也不是一帆风顺,经过了反复的调试。
可是在主机发出地址呼叫从机的时候,主机总是不能接受到从机发来的地址验证,而通过程序执行指示灯从机确实接收到主机发送的地址,并返回了地址验证,而主机接收不到地址验证,一直等待接收。
在经过老师的指导下,发现是因为串行通信未接地。
最终使得通信正常(可能是因为没有共公的地线,单片机无法确定收到和接受到信号的电平)。
接下来的调试都比较顺利,很快就使得程序能实现功能。
3、因为没有印刷的电路板,电路的焊接的工作量很大。
元件布局和走线都很麻烦。
但幸运的是没有焊接和连线的错误,所以硬件调试很顺利。
4、为了确定硬件的显示是否正常,先编了一个小显示程序检验电路的数码管显示功能。
正常后重新写入程序,演示功能。
五、心得体会
课程设计的时间比较短,所以这6天一直没闲着,从第一天选题到最后验收,中间没有中断过。
源程序的编写难度并不大,整体的思路很容易想的,但是最令我头疼的是软件仿真调试和和硬件调试。
程序有错很好改,程序执行功能没实现也好办,就怕在不应该出错的地方出错,那就无从下手。
编程一天,但是调试用了3天,焊接电路一天。
值得庆幸的是硬件焊接没有出错,也许是布线和焊接都比较小心的原因吧!
通过本次单片机接口的课程设计,熟悉了基本的单片机系统的开发过程,最重要的是有积累了一些软件和硬件调试的技巧。
以往做实验没有考虑单片机系统的硬件是个什么样子。
此次课程设计彻底明白了单片机硬件的连接和部分元件的使用,可以说是受益匪浅。
以前的学习都只是停留在课本上基本的思想,之前总以为想着很简单的事,但实际做的时候却出现这样、那样的问题。
要在实践中发现问题、解决问题。
空想是要不得的。