当前位置: 首页 > news >正文

嵌入式第四十六天(51单片机(通信))

一.串行通信与并行通信
1. 
- 串行通信:数据一位一位地依次传输,只需要一条或很少的几条传输线,适合长距离传输,但传输速度相对较慢。例如,计算机的串口(COM口)通信就是串行通信。

2.
- 并行通信:数据的各位同时传输,需要多条传输线(一般为8的倍数,如8位、16位、32位等),传输速度快,但传输线多,成本高,适合短距离高速传输。例如,计算机内部的总线(如PCI总线)、打印机的并行口通信都属于并行通信。

3.

常见传行通信协议

  • UART:异步全双工,使用TX(发送)和RX(接收)两条线,常见于单片机与PC通信。
  • SPI:同步全双工,主从设备通过SCLK(时钟)、MOSI(主发从收)、MISO(主收从发)和SS(片选)交互。
  • I2C:同步半双工,利用SDA(数据线)和SCL(时钟线)支持多设备总线连接。
  • 串行与并行通信的对比

    对比项串行通信并行通信
    传输方式逐位传输多位同时传输
    线路复杂度低(线少)高(线多)
    抗干扰能力强(适合长距离)弱(短距离)
    典型协议UART、SPI、I2C并行总线(如LPT)

    通过合理选择协议和配置参数(如波特率、数据位),串行通信可灵活适配不同场景需求。

二.单工、半双工、全双工通信
1. 
- 单工通信:数据只能沿一个固定方向传输,发送方只能发送,接收方只能接收。例如,广播电台的广播就是单工通信,电台只能发送信号,收音机只能接收信号。

2.
- 半双工通信:数据可以双向传输,但同一时间只能沿一个方向传输,不能同时双向传输。例如,对讲机通信就是半双工通信,一方说话时,另一方只能听,等一方说完,另一方才能说。

3.
- 全双工通信:数据可以同时双向传输,发送方和接收方可以同时发送和接收数据。例如,电话通信就是全双工通信,双方可以同时说话和听对方说话。


三.串口通信及通信时序

1.
- 串口通信:即串行接口通信,是指采用串行通信方式进行数据传输的通信方式,通过串行端口(如RS - 232、RS - 485等接口)来实现设备间的数据交互。

2.
- 串口通信时序(以异步串口为例):通常包括起始位、数据位、校验位(可选)、停止位。通信开始时,先发送一个起始位(低电平),表示数据传输的开始;接着发送数据位(一般为5 - 8位),数据位是要传输的实际数据;然后可选择发送校验位(用于校验数据传输是否正确);最后发送停止位(高电平,一般为1位、1.5位或2位),表示数据传输的结束。


四. 串口通信速率相关


- 串口通信的速率由波特率决定,波特率是指单位时间内传输的码元个数。


- 常见的波特率有300、600、1200、2400、4800、9600、19200、38400、57600、115200等。


五. 同步通信与异步通信

1.
- 同步通信:发送方和接收方使用同一时钟信号来同步数据的传输,在传输数据时,会先发送同步字符或同步信号,使双方的时钟保持同步,然后再传输数据块。

2.
- 异步通信:发送方和接收方不使用同一时钟信号,而是通过在数据中加入起始位、停止位等方式来实现数据的同步传输,每次传输一个字符(或字节)的数据。
- 串口通信属于异步通信。


六. TTL、RS - 232、RS - 485

1.
- TTL(Transistor - Transistor Logic):是一种晶体管 - 晶体管逻辑电平标准,高电平通常为+5V(或+3.3V等),低电平为0V。主要用于数字电路内部的逻辑电平表示,传输距离较短,一般在几米以内。

2.
- RS - 232:是一种串行通信接口标准,规定了通信的电气特性、机械特性等。采用负逻辑,逻辑“1”为- 3V~- 15V,逻辑“0”为+3V~+15V。适合短距离(约15米以内)的串行通信,在计算机串口通信等领域曾广泛应用。

3.
- RS - 485:也是一种串行通信接口标准,采用差分传输方式(用两根线之间的电压差来表示逻辑电平),抗干扰能力强,传输距离远(可达上千米),并且支持多节点(最多可连接32个或更多节点)通信,常用于工业控制、智能楼宇等需要长距离、多节点通信的场景。

七.简单代码示例(uart)

#include <reg52.h>
#include "delay.h"
#include <string.h>
#include <stdio.h>
#include "digtub.h"xdata char recv_buffer[64];
int pos = 0;void init_uart(void)
{unsigned char t;t = SCON;t &= ~(3 << 6);t |= (1 << 6) | (1 << 4);SCON = t;PCON |= (1 << 7);IE |= (1<<7)|(1<<4);t = TMOD;t &= ~(3 << 4);t |= (2 << 4);t &= ~(3 << 6);TMOD = t;TH1 = 208;TL1 = 208;TCON |= (1 << 6);
}void send_char(char ch)
{//P2 = 0;SBUF = ch;while((SCON & (1 << 1)) == 0);SCON &= ~(1 << 1);
}void send_buffer(const char *p,int len)
{while(len--){send_char(*p++);		}
}void uart_recv_hander(void) interrupt 4
{if((SCON & (1<<0)) != 0){//P2 = SBUF;recv_buffer[pos++] = SBUF;SCON &= ~(1<<0);}
}int digiter_num = 0;
#define Hz200 63035
#define Hz400 64285
#define Hz800 64910
#define Hz2000 65285
unsigned int n = Hz200;void init_timer0(void)
{TMOD &= ~(3<<2);TMOD &= ~(3<<0);TMOD |= (1<<0);TH0 = n >> 8;TL0 = n;//TCON |= (1<<4);IE |= (1<<7)|(1<<1);
}void timer1_hander(void) interrupt 1
{P2 ^= (1<<1);TH0 = n >> 8;TL0 = n;
}unsigned char sumOfTheArray(unsigned char *p,int len)
{unsigned char sum = 0;int i;for(i = 0;i < len;++i){sum += p[i];}return sum;
}void parse(void)
{if((unsigned char)recv_buffer[0] == 0xAA && (unsigned char)recv_buffer[pos - 1] == 0x0D){if((unsigned char)recv_buffer[1] == 0x01){if(sumOfTheArray(recv_buffer,5) == (unsigned char)recv_buffer[5]){unsigned char order;order = recv_buffer[2];switch(order){case 0x01:P2 = 0;break;case 0x02:digiter_num = (unsigned char)recv_buffer[3];break;default:init_timer0();init_key();while(1){int ret;ret = key_pressed();if(ret == 0){TCON &= ~(1<<4);		}if(ret == 1){n = Hz200;TCON |= (1<<4);}if(ret == 2){n = Hz400;TCON |= (1<<4);}if(ret == 3){n = Hz800;TCON |= (1<<4);}if(ret == 4){n = Hz2000;TCON |= (1<<4);}}break;}}}}
}int main(void)
{//xdata char buffer[64];//int a,b,c,d,e,f,g;//int *p = NULL;init_uart();/*while(1){//send_char('A');a = sizeof(int);b = sizeof(short);c = sizeof(long);d = sizeof(float);e = sizeof(double);f = sizeof(char);g = sizeof(p);sprintf(buffer,"size1 = %d\n",a);send_buffer(buffer,strlen(buffer));sprintf(buffer,"size2 = %d\n",b);send_buffer(buffer,strlen(buffer));sprintf(buffer,"size3 = %d\n",c);send_buffer(buffer,strlen(buffer));sprintf(buffer,"size4 = %d\n",d);send_buffer(buffer,strlen(buffer));sprintf(buffer,"size5 = %d\n",e);send_buffer(buffer,strlen(buffer));sprintf(buffer,"size6 = %d\n",f);send_buffer(buffer,strlen(buffer));sprintf(buffer,"size7 = %d\n",g);send_buffer(buffer,strlen(buffer));delay(0x9FFF);	}*//*while(1){if(pos != 0){delay(0xFFFF);if(strcmp(recv_buffer,"Hello") == 0){send_buffer("Hi",7);}else if(strcmp(recv_buffer,"China") ==0){send_buffer("NB",2);}//send_buffer(recv_buffer,pos);pos = 0;memset(recv_buffer,0,sizeof(recv_buffer));}} */while(1){if(pos != 0){delay(0xFFFF);parse();pos = 0;memset(recv_buffer,0,sizeof(recv_buffer));}show_number(digiter_num);}return 0;
}


文章转载自:

http://ikThpkiA.wmqxt.cn
http://YgrEFK75.wmqxt.cn
http://dl45fkd8.wmqxt.cn
http://7Bd0XpyY.wmqxt.cn
http://efpz63Px.wmqxt.cn
http://wGPfms6y.wmqxt.cn
http://naQWya8D.wmqxt.cn
http://VR0dG92v.wmqxt.cn
http://SbUx5qjW.wmqxt.cn
http://V3vo96go.wmqxt.cn
http://yjWIgXeo.wmqxt.cn
http://nGErWMNW.wmqxt.cn
http://sEIV4FZ8.wmqxt.cn
http://ofTSevSl.wmqxt.cn
http://fxMLxeXi.wmqxt.cn
http://RlvYSpE6.wmqxt.cn
http://W1AxYNzK.wmqxt.cn
http://O4jhRWwz.wmqxt.cn
http://R62Xr84E.wmqxt.cn
http://JVp78SEA.wmqxt.cn
http://EcGhL87Q.wmqxt.cn
http://xpHIxtK9.wmqxt.cn
http://5ldlk5hL.wmqxt.cn
http://ZCUIbh1V.wmqxt.cn
http://QhuewJb2.wmqxt.cn
http://7cG2cHwX.wmqxt.cn
http://CvM9mZDQ.wmqxt.cn
http://pJUNTdtJ.wmqxt.cn
http://awW9fc1i.wmqxt.cn
http://iryH4Roj.wmqxt.cn
http://www.dtcms.com/a/367927.html

相关文章:

  • 通过Gen AI SDK调用gemini 2.5 pro,单独上传pdf文件 | ai agent 开发笔记 2025.9.2 Day 2
  • Linux服务器暴走,用Netdata+cpolar轻松驯化
  • Node.js 做 Web 后端优势为什么这么大?
  • Windows 文件资源管理器无法预览文件内容word、ppt、excel、pdf
  • android 四大组件—BroadcastReceiver
  • 聊一聊 .NET 中的 CancellationTokenSource
  • Ubuntu 22 redis集群搭建
  • 开发环境 之 编辑器、编译器、IDE梳理
  • adobe acrobat 安装到使用再到PDF编辑【适合小白,只看一篇就够!!!】
  • [VF2] Boot Ubuntu和Debian发行版
  • 模型剪枝----ResNet18剪枝实战
  • CSS Position 属性
  • 【Android】制造一个ANR并进行简单分析
  • 《sklearn机器学习——回归指标1》
  • 使用tomcat本地部署draw.io
  • C++《C++11》(上)
  • XR数字融合工作站打造智能制造专业学习新范式
  • windows通过xrdp远程连接Ubuntu黑屏问题解决
  • 第25节:VR基础与WebXR API入门
  • Vue-25-利用Vue3大模型对话框设计之前端和后端的基础实现
  • 沪深300股指期权包含上证50期权吗?
  • webhook使用
  • AMD KFD驱动技术分析16:SVM Aperture
  • linux Nginx服务配置介绍,和配置流程
  • 数字人源头厂商实力全揭秘,系统搭建能力盘点!
  • LangChain: Models, Prompts 模型和提示词
  • 【自动化实战】Python操作Excel/WORD/PDF:openpyxl与docx库详解
  • AI急速搭建网站:Gemini、Bolt或Jules、GitHub、Cloudflare Pages实战全流程!
  • Oracle到ClickHouse:异构数据库ETL的坑与解法
  • Spring Boot 参数校验全攻略:从基础到进阶