【51单片机系列】单片机与PC进行串行通信

这篇具有很好参考价值的文章主要介绍了【51单片机系列】单片机与PC进行串行通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、单片机与PC机串行通信的设计

工业现场的测控系统中,常使用单片机进行监测点的数据采集,然后单片机通过串口与PC通信,把采集的数据串行传送到PC机上,再在PC机上进行数据处理。

PC机配置的都是RS-232标准串口,为D型9针插座,输入/输出为RS-232电平。D型9针插头引脚如下:

【51单片机系列】单片机与PC进行串行通信,51单片机,单片机,51单片机,mongodb

如下表为RS-232C的D型9针插头的引脚定义。

引脚号 功能 符号 方向
1 数据暂替检测 DCD 输入
2 接收数据 RXD 输入
3 发送数据 TXD 输出
4 数据终端就绪 DTR 输出
5 信号地 GND
6 数据通信设备准备好 DSR 输入
7 请求发送 RTS 输出
8 清除发送 CTS 输入
9 振铃指示 RI 输入

由于两者电平不匹配,因此必须把单片机输出的TTL电平转换为RS-232电平。

单片机与PC的接口如下图所示。图中的转换芯片为MAX232,接口连接只用了3条线,即RS-232插座中的2引脚、3引脚与5引脚。

【51单片机系列】单片机与PC进行串行通信,51单片机,单片机,51单片机,mongodb

二、单片机向PC发送数据示例

要求单片机通过串行口的TXD引脚向PC机串行发送8个数据字节。在proteus中使用两个串行口虚拟终端观察串行口线上出现的串行传输数据。

两个虚拟终端窗口为VT1和VT2,其中窗口VT1显示的数据表示单片机串口发送给PC机的数据,窗口VT2显示的数据表示由PC机经RS-232串口模型COMPIM接收到的数据,由于使用了串口模型COMPIM,从而省去了PC机的模型。

proteus仿真原理图如下:

【51单片机系列】单片机与PC进行串行通信,51单片机,单片机,51单片机,mongodb

需要注意要设置虚拟终端的波特率与代码中设置的波特率保持一致。经过MAX232转换后电平是相反的,设置VT2属性中的【RX/TX Polarity】为【Inverted】。

软件设计,首先初始化串口通信,设置串口工作方式1,定时器工作方式2,波特率9600bps,波特率不加倍,代码如下:

void UsartInit()
{
	SCON=0x40;  // 设置串口工作方式1
	TMOD=0x20;  // 设置定时器T1工作方式2
	TH1=TL1=0xFD;  // 设置波特率为9600bps,波特率不倍增
	PCON=0x00;
	EA=1;
	TR1=1;
}

发送数据功能单独编写一个函数,如下:

void send(u8 dat)
{
	SBUF=dat;  // 将待发送数据写入发送缓冲器SBUF
	while(!TI);  // 等待串行口发送完毕
	_nop_();  // 空操作
	TI=0;  // 1个字节发送完成,清零TI
}

主函数中首先调用串口通信初始化函数,然后调用发送数据函数,调用8次后,如果不想再次发送数据进入while(1)循环。如下:

void main()
{
	u8 i;
	UsartInit();  // 串口通信初始化
	for(i=0;i<8;i++)
	{
		send(sendBytes[i]);  // 发送数据
		delay();  // 每次发送完数据延时200ms
	}
	while(1);
}

其中sendBytes定义如下:

// 单片机发送给PC机的数据
u8 code sendBytes[]="12345678";

proteus仿真结果如下:

【51单片机系列】单片机与PC进行串行通信,51单片机,单片机,51单片机,mongodb

三、单片机接收PC机发送的数据使用示例

单片机接收PC机发送的串行数据,并把接收到的数据送P1口的8位LED显示。采用单片机的串行口模拟P机 串行口。proteus仿真原理图如下:

【51单片机系列】单片机与PC进行串行通信,51单片机,单片机,51单片机,mongodb

软件设计,发送数据的代码如下:

/*
	实现功能:串口通信,单片机与PC机通信,单片机接收PC机发送的数据。	
		使用一个单片机模拟PC机
		
	[2024-01-15] zoya
*/

#include <reg52.h>
#include <intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;

u8 sendBytes=0xFE;

// 延时函数,单位ms
void delay(u16 i)
{
	u8 j;
	for(;i>0;i--)
	{
		for(j=0;j<125;j++);
	}
}

// 串口通信初始化函数
void UsartInit()
{
	SCON=0x40;  // 串口工作方式1,只发送不接收
	TMOD=0x20;  // 定时器工作方式2
	TH1=TL1=0xFD;  // 设置波特率为9600bps,波特率不倍增
	PCON=0x00;
	TR1=1;  // 启动计数
}

void main()
{
	u8 i;
	UsartInit();
	while(1)
	{
		for(i=0;i<7;i++)
		{
			// 发送数据
			SBUF = sendBytes;
			while(!TI);
			_nop_();
			TI=0;
			delay(200);
			sendBytes=_crol_(sendBytes,1);
		}
		for(i=0;i<7;i++)
		{
			// 发送数据
			SBUF = sendBytes;
			while(!TI);
			_nop_();
			TI=0;
			delay(200);
			sendBytes=_cror_(sendBytes,1);
		}
	}
}

接收数据的代码如下:

/*
	实现功能:串口通信,单片机与PC机通信,单片机接收PC机发送的数据。	
		接收PC机数据
		
	[2024-01-15] zoya
*/
#include <reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

#define GPIO_LED P1

void UsartInit()
{
	SCON=0x50;  // 串口工作方式1,接收数据
	TMOD=0x20;  // 定时器T1工作方式2
	TH1=TL1=0xFD;  // 波特率9600bps,不倍增
	PCON=0x00;
	TR1=1;  // 启动计数
}
void main()
{
	u8 tmp;
	UsartInit();
	while(1)
	{
		while(!RI);  // 等待接收数据结束
		RI=0;
		tmp=SBUF;
		GPIO_LED=tmp;
	}
}

仿真结果:

【51单片机系列】单片机与PC进行串行通信,51单片机,单片机,51单片机,mongodb

四、PC机与单片机或与多个单片机的串行通信

一台PC机与若干台单片机可构成小型分布式测控系统,如下图所示,该系统在许多实时的工业控制和数据采集系统中,可以充分发挥单片机功能强、抗干扰性好、面向控制等优点,同时又可利用PC机弥补单片机在数据处理和人机对话等方面的不足。

【51单片机系列】单片机与PC进行串行通信,51单片机,单片机,51单片机,mongodb

在应用系统中,一般是以PC机作为主机,定时扫描以AT89S52单片机为核心的前沿单片机,以便采集数据或发送控制信息。

在这样的系统中,以AT89S52单片机为核心的智能式测量和控制仪表(从机)既能独立地完成数据处理和控制任务,又可将数据传送给PC机(主机)。PC机将这些数据进行处理,或显示,或打印,同时将各种控制命令传送给各从机,以实现集中管理和最优控制。

要组成上图的分布式测控系统,首先要解决的是PC机与单片机之间的串行通信接口问题。

下面以采用RS-485接口的串行多机通信为例,说明PC机与数台AT89S52单片机进行多机通信的接口电路设计方案。PC机配有RS-232串行标准接口,可通过电路板卡转换成RS-485串行接口,AT89S52单片机本身具有全双工的串行口,该串行口加上驱动电路后就可以实现RS-485接口的串行通信。

PC机与数台AT89S52单片机进行多机通信的RS-485串行通信接口电路如下所示:

【51单片机系列】单片机与PC进行串行通信,51单片机,单片机,51单片机,mongodb

上图中,AT89S52单片机的串行口通过75176芯片驱动后就可以转换成RS-485标准接口,根据RS-485标准接口的电器特性,从机数量不多于32个。PC机与AT89S52单片机之间的串行通信采用主从方式,PC机为主机,各AT89S52为从机,由PC机来确定与哪个单片机进行通信。文章来源地址https://www.toymoban.com/news/detail-796636.html

到了这里,关于【51单片机系列】单片机与PC进行串行通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STC89C51系列单片机与ADC0832通信

    ADC0832是一种常用的8位模数转换器,它可以将模拟信号转换为数字信号,以供单片机进行处理。STC89C51系列单片机是一款常见的8位单片机,具有强大的处理能力和丰富的外设资源,可以与ADC0832通信,实现模拟信号采集的功能。 本文将介绍如何使用STC89C51单片机与ADC0832通信,并

    2024年02月13日
    浏览(32)
  • 基于单片机的串行通信发射机设计

    串行通信是一种常见的数据传输方式,允许将数据以比特流的形式在发送端和接收端之间传输。当前实现基于STC89C52单片机的串行通信发射机,通过红外发射管和接收头实现自定义协议的数据无线传输。 在本设计中,选择了STC89C52作为主控芯片。单片机具有较高的性能和丰富

    2024年02月10日
    浏览(29)
  • 【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)

    前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏 YY的《C++11》专栏 YY的《Linux》专栏 YY的《数据结构》专栏 YY的《C语言基础》专栏 YY的《

    2024年02月02日
    浏览(37)
  • STM32F103单片机通过SPI全双工通信协议与W25Q64(FLASH)进行通信【串行同步通信(数据线与时钟线配合),(一主多从模式)】附相关驱动代码详解

    1.W25Qxx系列是一种低成本、小型化、使用简单的 非易失性存储器 ,常应用于数据存储、字库存储、固件程序存储等场景 2.存储介质: Nor Flash(闪存) 3.时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI) 4.存储容量(24位地址): W25Q40: 4Mbit / 512KByte W25Q80: 8Mbit / 1MByte W25Q16: 16

    2024年04月13日
    浏览(49)
  • 51单片机:设计一单片机双机通信电路

    鱼弦:CSDN内容合伙人、CSDN新星导师、全栈领域优质创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen) 设计一单片机双机通信电路。要求编程实现:甲单片机系统中的按键可以控制乙单片机系统中的数码管(MPX8)动

    2024年02月20日
    浏览(40)
  • PC 机与单片机通信(RS232 协议)

    PC 机与单片机通信 (RS232 协议 ) 目录: 1、单片机串口通信的应用 2、PC控制单片机IO口输出 3、单片机控制实训指导及综合应用实例 4、单片机给计算机发送数据: [实验任务] 单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。 个人电脑作为上位机,向

    2024年02月04日
    浏览(37)
  • 51单片机-串口通信

    目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部结构 2.5.相关寄存器 2.6.工作模式(模式1) 2.7.如何配置串口中断 3.实际应用 3.1.单片机向电脑发送数据 3.2.电脑向单片机发送

    2024年02月01日
    浏览(32)
  • 51单片机串口通信

    串口通信(serial communication)是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,属于串行通信方式。 接口标准:常用RS-232和RS-485 RS-232C有一种9针的非标准连接器口,简称DB9。串口通信使用的大多都是DB9接口。在串口通信中,通常我们只使用2、

    2024年02月05日
    浏览(34)
  • 51单片机学习笔记_6 IO通信:电脑与单片机之间的通信

    单片机还可以通过IO口实现多种通信。 串行通信 :一条数据线,一次发1bit,发很久。 并行通信 :多条数据线,同时发送,发的速度快多了但是费用高、接收困难、抗干扰性差。 异步通信 :发送和接收方时钟可以不用完全一致。 同步通信 :发送和接收方时钟要完全一致。

    2024年02月08日
    浏览(35)
  • c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

         单片机一般采用中断方式接受数据,这样便于及时处理 其中发送数据段采用的是查询方式,接收端采用了中断方式, 要注意的地方有: 在中断处理函数int_0()内,处理数据前要先关闭中断,否则中断可能会不断传过来, EA=0; 然后退出中断处理函数前恢复中断处理能力:

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包