0 实验任务
所设计的主从式多级通信系统有一个主机和两个从机,其中1#从机的地址设为01H,2#从机的地址设为02H。
主机的RXD和从机的TXD相连,TXD和从机的主机的RXD相连,主机的P1口接2个按钮开关,一个代表1#从机,另一个代表2#从机,主机根据开关的状态,发送要访问的从机的地址,地址相符的从机则点亮发光二极管以示和主机进行通信,然后主机向从机发送数据,从机将接收到的数据进行显示。当按下从机1#的按钮的时候,主机会将实时温度发送给从机,从机通过LCD 1602显示温度。P2.4引脚上的发光二极管指示和主机的通信状态。
主机和从机串口都设置为方式3,波特率为9600。主机发送地址时,TB8为1,主机发送数据时,TB8为0。从机在监听状态时SM2设置为1,接收到的地址若和本机地址相符,点亮P2.0引脚上的发光二极管以示和主机联络成功,并置SM2为0,准备接收数据,否则SM2仍维持为1不变,不接收数据。从机接收完数据后,将接收到的数据送显示,然后从机将SM2设置为1,返回到监听状态。主机根据按钮开关的状态,和相应的从机进行通信。
1 系统方案
1.1 系统分析
根据系统功能要求,可将系统组成结构分为四大部分。单片机控制中心、DS18B20测温模块、LCD 1602显示模块、中断触发模块。
其中,单片机控制中心是核心。DS18B20测温模块是数据输入的主要来源,可以实时测温;LCD 1602显示模块是将温度实时显示,用于显示测量地点的温度;报警模块是监视测量地点的温度有没有超出可接受范围,如果超出,报警模块会以声音方式报警。
单片机汇编语言源程序如下(主机):
;采用11.0592MHZ晶振
;++++++++++++执行DJNZ需要两个时间周期+++++++++++++
;T0定时器 方式1 16位计数
;1.init
;2.skip rom
;3.convert-t
;4.init
;5.skip-rom
;6.read
;7.receive-data
;8.cal
;9.display
DAT BIT P3.7 ;定义P3.7口为DQ线
WDLSB DATA 30H ;定义读出温度低字节,将温度低字节放在30H
WDMSB DATA 31H ;定义读出温度高字节,将温度高字节放在31H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT_EXT0 ;外部中断0入口
ORG 0013H
LJMP INT_EXT1 ;外部中断1入口
ORG 0100H
MAIN:
MOV SP,#60H ;设置堆栈指针
SETB EX0 ;允许外部中断0产生中断
SETB IT0 ;外部中断0为跳沿触发方式
SETB EX1 ;允许外部中断1产生中断
SETB IT1 ;外部中断1为跳沿触发方式
SETB EA ;总中断打开
MOV IP,#01H
;---DS18B20测温子程序---
LCALL DS18B20_TP ;调用DS18B20测温子程序
HERE:
LJMP HERE
;----外部中断0子程序
INT_EXT0: ;外部中断子程序
CLR EA ;CPU关中断
PUSH PSW ;现场保护
PUSH ACC
SETB EA ;总中断允许位
MOV TMOD,#20H ;选择定时器T1,波特率是9600
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1 ;运行定时器T1
MOV SCON,#0D8H ;设置串口通信为方式3,SM2=0,RE=1,TB8=1
MOV PCON,#00H ;*****SMOD=0
MOV IE,#00H
MT1:
MOV SBUF,#01H ;发送1#从机地址,呼叫1#从机
LT1:
JBC TI,LT2 ;判TI?TI=1,跳转L2,并将TI=0;否则往下执行
LJMP LT1
LT2:
JBC RI,ST1 ;等待从机应答,如果接收完成,RI=1,转S1,RI=0;
;如果RI=0,往下执行
LJMP LT2
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』