基本信息
文件名称:《单片机技术与应用》 课件 项目六任务4-单片机双机通信.pptx
文件大小:475.47 KB
总页数:22 页
更新时间:2025-06-19
总字数:约2.24千字
文档摘要

项目六温度检测报警系统设计

串口概述任务一用串口扩展I0口(1)任务二用串口扩展I0口(2)任务三单片机双机通信任务四PC与单片机通信任务五DS18B20温度采集报警系统设计任务六

任务四单片机双机通信

双机通讯就是:

两个单片机之间或单片机与PC之间的通讯。

什么是双机通信呢?

任务描述甲机发送信息,乙机就将接收到的信息送数码管显示,反之,乙机发送信息,甲机就将接收到的信息同样送数码管显示出来。

知识链接一工作方式1、2、3二多机通信基础

一工作方式1、2、3方式1是一帧10位的异步串行通信方式,包括1个起始位(0),8个数据位和一个停止位(1),其帧格式如下:1.工作方式1起始位0D0D1D2D3D4D5D6D7停止位1

(1)数据发送过程当TI=0时,执行“SBUF=0xxx”指令后开始发送,由硬件自动加入起始位和停止位,构成一帧数据,然后由TXD端串行输出。发送完后,TXD输出线维持在“1”状态下,并将SCON中的TI置1,表示一帧数据发送完毕。

(2)数据接收过程RI=0,REN=1时,接收电路以波特率的16倍速度采样RXD引脚,如出现由“1”变“0”跳变,认为有数据正在发送。在接收到第9位数据(即停止位)时,必须同时满足以下两个条件:RI=0和SM2=0或接收到的停止位为“1”,才把接收到的数据存入SBUF中,停止位送RB8,同时置位RI。若上述条件不满足,接收到的数据不装入SBUF被舍弃。在方式1下,SM2应设定为0。

(3)波特率波特率=2SMOD×(T1溢出率)/32T1溢出率=1/T1定时时间=1/((M-T初)·T机)波特率=2SMOD·fosc/(32·12·(M-T初))

工作方式2和方式3都是11位异步收发串行通信方式,两者的差异仅在波特率上有所不同。2.工作方式2、3方式2:波特率=2SMOD·fosc/64(SMOD=0或1)方式3:波特率=2SMOD·fosc/(32·12·(M-T初))(与方式1相同)

二双机通信基础当要使用单片机的串口进行双机通信时,需要保证通信双方使用同样的波特率。单片机串口初始化需完成单片机串口工作方式选择、波特率设置、波特率发生器设置等基本的设置。如设置单片机晶振频率为11.0592MHz,串口波特率为9600b/s,串口选择工作方式1,定时器配置为工作方式2。初始化程序如下:

voidUartInit(void){ TMOD=(TMOD0x0f)|0x20; //设置定时器T1为定时方式2 TH1=110592001/12/32/9600; //求波特率为9600时定时器初值 TL1=TH1; TR1=1; //启动T1计数器 SCON=0x70; //设置串行工作方式1,允许接收 PCON=0x80;}

任务实施1.硬件电路2.程序设计

1.硬件电路

2.程序设计#includereg51.h //包含单片机寄存器的头文件#defineucharunsignedchar //宏定义,定义uchar为无符号整型#defineuintunsignedint //宏定义,定义uint为无符号整型#definekey_portP1 //P1=key_port#definedis_portP2 //P2=dis_port

2.程序设计/***********主函数***********/voidmain(void){ ucharkey_in=0xff; SCON=0x50; //方式1,允许接收 TMOD=0x20; //定时器1工作于方式2 TH1=0xf3; //波特率2400波特 TL1=0xf3; ET1=1; //开放定时器1中断 TR1=1; //启动定时器中断 EA=1; //中断允许 ES=1; //开放串行中断while(1) {if(key_in!=key_port)//P1状态不等于0xff { key_in=key_port;//把P1状态送给key_in SBUF=key_in;// 将P1的值发给串口 }}

/***********串口中断服务函数***********/voidget_disp(void)interrupt4using0{ if(RI) //如果是串口输入引起中断 {dis_por