小白网-奉贤部落-奉贤免费信息发布平台

查看: 48|回复: 0

2个单片机之间串口通讯(2个单片机之间串口通讯例题)

[复制链接]

2万

主题

0

回帖

8万

积分

论坛元老

Rank: 8Rank: 8

积分
88256
发表于 2025-7-26 13:08 | 显示全部楼层 |阅读模式
1.基于proteus 19的51单片机开辟实例-两台单片机之间的串行通讯1.1他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。尝试目标在本例中,我们进修了51单片机串行通讯RS-232的根基道理、用法和编程实现他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.2.设想理念
图1两台单片机之间的串行通讯
串行通讯由两台51单片机实现,其中一台作为串行数据发送器,另一台作为串行数据接收器他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。为了直观地看到串行数据的发送和接收,在电路中的两个单片机上别离毗连了8个发光二极管来指示发送的数据和接收的数据,方便比力发送和接收的数据能否分歧他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.3.根本常识经过这个例子,领会并熟悉串行通讯的根本常识、常用术语、尝试电路和编程方式他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.3.1.串行通讯的根基概念单片机与外设的数据交互凡是有两种方式:并行通讯和串行通讯他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
并行通讯是指一组数据的一切位同时传输的通讯方式,以下图所示他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
图2并行通讯
所谓串行通讯,是指一组数据按逐位顺序传输的一种通讯方式,以下图所示他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
图3串行通讯
并行通讯速度高,但数据线多,结构复杂,本钱高,一般用于短间隔传输,数据位数少他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
串行通讯速度慢,但数据线少,布线简单,合适远间隔传输他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.3.2.串行通讯的根基术语串行通讯有两种根基方式:异步串行通讯和同步串行通讯他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。本例中我们利用的是RS-232串行通讯,RS-232串行通讯方式为异步串行通讯他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。是以,这里我们重点会商异步串行通讯的根基术语他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.3.2.1 .异步通讯是一种基于“位”数据的通讯方式他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。它不要求两个通讯发送方(接收方和发送方)具有同步的时钟信号,但要求发送方和接收方具有不异的数据帧结构和波特率,通讯进程中的数据发送和接收不需要持续他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
在现实利用中,异步串行通讯的数据是“一帧一帧”传输的,即传输完一帧数据后,再传输下一帧数据他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。每帧数据发送后,可以停息他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。在停息时代,数据线连结在高电平他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
异步通讯的数据格式以下图所示他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
图4异步串行通讯的数据格式
其中数据可所以5-8比特的数据,奇偶校验位可以设备有或没有奇偶校验位他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
我们可以看到,在一帧数据中,需要的元素有:肇端位、数据和竣事位他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。其中肇端位必须是低电平,竣事位必须是高电平他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.3.2.2 .异步串行通讯中的波特率,为了保证通讯双方可以正确发送(接收)数据,必须做出约定他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。协议是什么?一个是数据帧的格式,一个是数据每一位的传输时候,也就是波特率他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
波特率是指单元时候内传输的二进制数据的位数他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。波特率的单元是比特/秒,它是串行通讯的一个很是重要的目标和参数他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
例如,假如波特率为9600,则意味着每秒可以发送9600位数据他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。假如一个字节依照8位计较,就是1200字节的数据(但异步串行通讯有肇端位、停止位、奇偶位等他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。,所以它不能发送1200字节)他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.3.2.3 .奇偶校验位奇偶校验位的目标是避免一位或多位数据在通讯进程中因干扰而出错他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
一般来说,异步串行通讯中的奇偶校验位可以经过设备响应的控制寄存器来自动天生和检查他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.3.3.51单片机串口内部结构下图是51单片机串口内部结构他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
51单片机串口内部结构
从图中可以看出,51单片机的串口首要由以下几部分组成
数据缓冲器SBUF有两个数据缓冲器SBUF,一个用于接收数据,另一个用于发送数据他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
在接收控制器的控制下,输入移位寄存器将数据逐位放入缓冲器SBUF他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
串行控制寄存器设备和控制串行通讯的工作形式他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
按时器T1用作串行通讯的波特率发生器他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。也就是说,在利用串行通讯时,51单片机的按时器T1不能再用于计时或计数,只能作为串口的波特率发生器他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
单片机51中串行通讯的控制,在停止串行通讯时,需要设置相关寄存器,使串口一般工作他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。有四个相关的寄存器他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。他们是SCON、PCON、IE和IP他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。IE寄存器用于控制能否答应中断触发他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。IP用于设备中断优先级他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。这两个寄存器我们之前已经晓得了,这里就不赘述了他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。(本例中未利用串行端口中断)
串口控制寄存器SCON串口控制寄存器SCON用于设备串口的工作形式他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。同时还可以监控串口的工作状态,发送和接收的状态控制等他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
SCON位的寄义以下图所示他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
SCON
操纵方式
电源寄存器PCON在这个控制器中,只要第7个SMOD位与串口相关,它是波特率挑选位他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。假如SMOD=0,波特率为设定的波特率;假如SMOD=1,波特率是设定波特率的两倍他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.4.电路设想图1是这个例子的电路图他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。电路中利用了两个单片机,一个发送串行数据,另一个接收串行数据他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。每个单片机毗连8个发光二极管,用来指示发送的数据和接收的数据,以便直观地检查数据的正确性他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
1.5.编程这个例子有两个单片机,每个单片机都有自己的代码法式他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。法式代码以下:
呼唤定单
# include///data sentunsigned char code led tab[16]= { 0x 11、0x22、0x33、0x44、0x55、0x66、0x77、0x88、0x99、0xaa、0xbb、0xcc、0x他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。//串行数据发送函数,利用查询形式void send(unsigned char UC data){sbuf = UC data;//首先将待发送的数据放入发送缓冲区,同时(TI = = 0);//等到发送终了,TI = 0;//发送后设备为0,方便下次发送数据} /delay函数void delay(void){unsigned int m,n;for(m = 0;m  lt800;m++)for(n = 0;n  lt250;n++);}void main(void){unsigned char I;TMOD = 0x 20;//按时器工作形式2SCON = 0x 40;//串口工作形式1PCON = 0x 00;//波特率不加倍TH1 = 0x FD;//按时器给初始值TL1 = 0x FD;//TR1 = 1;//翻开计时器起头工作P1 = 0x ff;//让一切led先熄灭,而(1){for(I = 0;我 lt16;++)//循环发送16个数据{P1 = led tab[I];//发送前让LED指示要发送的数据Send(LED tab[I]);//经过串口和查询方式发送数据delay();//发送后提早一段时候,观察LED指示能否正确} }
接收法式
#include//串口接收函数,利用查询方式unsigned char receive(void){unsigned char UC data;while(RI = = 0);//期待接收中断标志置位,暗示稀有据来了RI = 0;//手动断根标志UC data = SBUF;//从接收缓冲区提取数据返回ucData}void main(void){TMOD = 0x 20;//按时器工作形式2SCON = 0x 50;//串口工作形式1,答应接收PCON = 0x 00;//波特率不加倍TH1 = 0x FD;//将按时器初始值设备为波特率9600TL1 = 0x FD;//TR1 = 1;//启动按时器REN = 1;//答应串行数据接收P1 = 0x ff;while①{P1 = Receive();//经过P1 }}端口的8个led显现串口接收到的数据
1.6.示例仿真法式编译完成后,可以加载到仿真电路中,其中send.hex加载到MCU中用于发送数据,receive.hex加载到MCU中用于接收数据他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。在模拟起头时,观察毗连到发送MCU的8个led的光发射,并比力同时毗连到接收MCU的8个led的光发射他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。这两个应当是分歧的他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
视频加载中...1.7.经过这个例子,我们进修了若何发送和接收单片机的串行数据他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。至于串行通讯,在现实的单片机利用系统中有大量的利用,是我们需要把握的一个很是重要的功用他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|小白网-奉贤部落-奉贤免费信息发布平台  

GMT+8, 2025-11-11 12:43 , Processed in 2.560462 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表