一、串行通信与并行通信

1、串行通信

  • 定义:数据一位一位地按顺序通过单条传输线进行传输的通信方式。
  • 优点:传输线少,成本低,适合长距离传输
  • 缺点:传输速度相对较慢

2、并行通信

  • 定义:数据的各位同时通过多条并行传输线进行传输的通信方式。
  • 优点:传输速度快,一次可以传输多个位
  • 缺点:需要多条传输线,成本高,抗干扰能力弱,不适合长距离传输

在 51 单片机中,串口通信属于串行通信,而像 P0 口作为数据总线进行 8 位数据传输时则属于并行通信方式。

二、单工、半双工与全双工通信

1、单工通信

  • 定义:数据传输只能在一个方向上进行,不能反向传输。
  • 例子:收音机接收广播、打印机接收数据

2、半双工通信

  • 定义:数据可以双向传输,但不能同时进行,只能交替进行。
  • 特点:双方都能发送和接收数据,但同一时刻只能有一方发送
  • 例子:对讲机

3、全双工通信

  • 定义:数据可以同时在两个方向上进行传输。
  • 特点:双方可以同时发送和接收数据,需要两条独立的传输线
  • 例子:电话通信、51 单片机的 UART 串口通信

三、串口通信及其时序

1、定义

        串口通信(串行端口通信)是一种通过串行方式(一位接一位)在设备之间传输数据的通信协议。在 51 单片机中,通常指 UART(通用异步收发传输器)通信。

2、串口通信时序

    1)空闲状态:通信线路处于高电平状态

    2)起始位:发送方发送一个低电平,表示数据传输开始

    3)数据位:紧接着起始位之后,是实际传输的数据,可以是 5-8 位,通常使用 8 位

    4)校验位(可选):用于数据校验,有奇校验、偶校验、无校验等方式

    5)停止位:表示一帧数据传输结束,通常为 1 位、1.5 位或 2 位的高电平

四、串口通信速率及常见波特率

1、定义

        串口通信的速率由波特率(Baud Rate) 决定,波特率表示单位时间内传输的位数,单位是 bps(比特每秒)。

2、常见的波特率

  • 1200 bps
  • 2400 bps
  • 4800 bps
  • 9600 bps(51 单片机最常用)
  • 115200 bps

在实际应用中,通信双方必须使用相同的波特率才能正常通信。

五、同步通信与异步通信

1、同步通信

  • 定义:发送方和接收方使用同一个时钟信号来同步数据传输,数据连续传输,传输效率高。
  • 特点:需要时钟信号线,数据传输速率高,适用于短距离高速通信
  • 例子:SPI 通信、I2C 通信

2、异步通信

  • 定义:发送方和接收方使用各自独立的时钟信号,通过起始位和停止位来实现数据同步。
  • 特点:不需要时钟信号线,硬件简单,适用于长距离通信
  • 例子:UART 串口通信

串口通信属于异步通信,它通过起始位和停止位来标记一帧数据的开始和结束,不需要专门的时钟线。

六、TTL、RS232 与 RS485

1、TTL 电平

  • 是单片机内部使用的电平标准
  • 逻辑 1:+5V(或 3.3V)
  • 逻辑 0:0V
  • 传输距离短,一般不超过 1 米
  • 51 单片机的串口直接输出的就是 TTL 电平

2、RS232

  • 是一种串行通信接口标准
  • 逻辑 1:-3V 至 - 15V
  • 逻辑 0:+3V 至 + 15V
  • 需要通过电平转换芯片(如 MAX232)与 TTL 电平相互转换
  • 传输距离相对较短,一般不超过 15 米
  • 支持全双工通信

3、RS485

  • 是一种差分信号传输的串行通信标准
  • 采用差分信号传输,抗干扰能力强
  • 支持多点通信,可以连接多个设备
  • 传输距离远,可达 1200 米
  • 通常工作在半双工模式
  • 广泛应用于工业控制领域

在 51 单片机应用中,常通过 MAX232 芯片将 TTL 电平转换为 RS232 电平,或通过 MAX485 芯片转换为 RS485 电平,以满足不同的通信需求。

七、应用示例

1、利用单片机实现不同按键产生不同Hz的声响(电子琴)

#include <reg52.h>
#include "key.h"#define Hz200 63035
#define Hz400 64285
#define Hz600 64702
#define Hz800 64910
#define Hz1000 65035unsigned short n = Hz200;void init_timer0(void)
{TMOD &= ~(3 << 2);TMOD &= ~(3 << 0);TMOD |= (1 << 0);TH0 = n >> 8;TL0 = n;IE |= (1 << 7) | (1 << 1); //中断允许寄存器
}void timer0_handler(void) interrupt 1
{P2 ^= (1 << 1);TH0 = n >> 8;TL0 = n;
}int main(void)
{init_timer0();init_key();while(1){int key;key = key_pressed();if(key == 1){n = Hz200;TCON |= (1 << 4);}else if(key == 2){n = Hz400;TCON |= (1 << 4);}else if(key == 3){n = Hz600;TCON |= (1 << 4);}else if(key == 4){n = Hz800;TCON |= (1 << 4);}else if(key == 5){n = Hz1000;TCON |= (1 << 4);}else if(key == 0){TCON &= ~(1 << 4);}}return 0;
}

2、打印51单片机中各数据类型的字节长度(int、short、float、char、long、double、指针)

#include <reg52.h>
#include "delay.h"
#include <string.h>
#include <stdio.h>
#include "digiter.h"void init_uart(void)
{unsigned char t;t = SCON; //串行控制寄存器t &= ~(3 << 6);t |= (1 << 6) | (1 << 4);SCON = t;PCON |= (1 << 7); //SMOD=1IE |= (1 << 7) | (1 << 4);//2 中断允许寄存器t = TMOD;t &= ~(3 << 4);t |= (2 << 4);t &= ~(3 << 6);TMOD = t;TH1 = 204;TL1 = 204;TCON |= (1 << 6);
}xdata char rcv_buffer[64] = {0};
int pos = 0;void uart_handle(void) interrupt 4//串口中断
{if((SCON & (1 << 0)) != 0){rcv_buffer[pos++] = SBUF;//P2 = SBUF;SCON &= ~(1 << 0);}
}void send_char(char ch)
{SBUF = ch;while((SCON & (1 << 1)) == 0);SCON &= ~(1 << 1);
}	   void send_buffer(const char *p, int len)
{while(len--){send_char(*p++);}
}int main(void)
{xdata char buff[64];init_uart();while(1){int n = sizeof(int);sprintf(buff, "int size = %d\n", n);send_buffer(buff, strlen(buff));n = sizeof(char);sprintf(buff, "char size = %d\n", n);send_buffer(buff, strlen(buff));n = sizeof(short);sprintf(buff, "short size = %d\n", n);send_buffer(buff, strlen(buff));n = sizeof(long);sprintf(buff, "long size = %d\n", n);send_buffer(buff, strlen(buff));n = sizeof(float);sprintf(buff, "float size = %d\n", n);send_buffer(buff, strlen(buff));n = sizeof(double);sprintf(buff, "double size = %d\n", n);send_buffer(buff, strlen(buff));n = sizeof(s);sprintf(buff, "* size = %d\n", n);send_buffer(buff, strlen(buff));send_buffer(s, strlen(s));if(pos != 0){delay(0x9FFF);pos = 0;memset(rcv_buffer, 0, sizeof(rcv_buffer));}	}return 0;
}

3、实现主从应答模式(主机发送指令,从机发送相对应的语句)

#include <reg52.h>
#include "delay.h"
#include <string.h>
#include <stdio.h>
#include "digiter.h"
#include "key.h"void init_uart(void)
{unsigned char t;t = SCON; //串行控制寄存器t &= ~(3 << 6);t |= (1 << 6) | (1 << 4);SCON = t;PCON |= (1 << 7); //SMOD=1IE |= (1 << 7) | (1 << 4);//2 中断允许寄存器 P160t = TMOD;t &= ~(3 << 4);t |= (2 << 4);t &= ~(3 << 6);TMOD = t;TH1 = 204;TL1 = 204;TCON |= (1 << 6);
}xdata char rcv_buffer[64] = {0};
int pos = 0;void uart_handle(void) interrupt 4//串口中断
{if((SCON & (1 << 0)) != 0){rcv_buffer[pos++] = SBUF;//P2 = SBUF;SCON &= ~(1 << 0);}
}void send_char(char ch)
{SBUF = ch;while((SCON & (1 << 1)) == 0);SCON &= ~(1 << 1);
}	   void send_buffer(const char *p, int len)
{while(len--){send_char(*p++);}
}int main(void)
{xdata char buff[64];init_uart();while(1){if(pos != 0){delay(0x9FFF);if(strcmp(rcv_buffer, "China") == 0){send_buffer("OK", 2);}else if(strcmp(rcv_buffer, "Hello") == 0){send_buffer("confirm", 7);}pos = 0;memset(rcv_buffer, 0, sizeof(rcv_buffer));}	}return 0;
}

4、DS18B20传感器显示温度

    1)ds18b20.c 
#include <reg52.h>
#include <intrins.h>
#include "delay.h"
#include "ds18b20.h"static int reset_ds18b20(void)
{int t;DS18B20_CLEAR;Delay10us(70);DS18B20_SET;Delay10us(4);t = 0;while(DS18B20_TST && t < 30){		   Delay10us(1);++t;}if(t >= 30){return 0;}t = 0; while( !DS18B20_TST && t < 30){Delay10us(1);++t;}if(t >= 30){return 0;}return 1;
}void ds18b20_write(unsigned char n)
{int i;for(i = 0; i < 8; i++){if(n & 0x01) //1{DS18B20_CLEAR;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();DS18B20_SET;Delay10us(5);}else{DS18B20_CLEAR;Delay10us(6);DS18B20_SET;}n >>= 1;}
}unsigned char ds18b20_read(void)
{unsigned char ret = 0;int i;for(i = 0; i < 8; ++i){DS18B20_CLEAR;_nop_();_nop_();DS18B20_SET;_nop_();_nop_();_nop_();_nop_();if(DS18B20_TST){ret |= 1 << i;}Delay10us(5);}return ret;
}float get_temp(void)
{unsigned char tl, th;short t;reset_ds18b20();ds18b20_write(0xCC);ds18b20_write(0x44);delay_1ms(750);reset_ds18b20();ds18b20_write(0xCC);ds18b20_write(0xBE);tl = ds18b20_read();th = ds18b20_read();t = tl;t |= th << 8;return t * 0.0625;
}
    2)uart.c
#include "uart.h"
#include <reg52.h>xdata char rcv_buffer[64] = {0};
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); //SMOD=1IE |= (1 << 7) | (1 << 4);//2 中断允许寄存器 P160t = TMOD;t &= ~(3 << 4);t |= (2 << 4);t &= ~(3 << 6);TMOD = t;TH1 = 204;TL1 = 204;TCON |= (1 << 6);
}void uart_handle(void) interrupt 4
{if((SCON & (1 << 0)) != 0){rcv_buffer[pos++] = SBUF;SCON &= ~(1 << 0);}
}void send_char(char ch)
{SBUF = ch;while((SCON & (1 << 1)) == 0);SCON &= ~(1 << 1);
}	   void send_buffer(const char *p, int len)
{while(len--){send_char(*p++);}
}
    3)delay.c
#include "delay.h"
#include <intrins.h>void delay(unsigned int n) //0~65535
{while(n--);
}void Delay10us(unsigned int n)//12MHz
{unsigned char data i;_nop_();_nop_();_nop_();i = 2 * n;while(--i){_nop_();}	  
}void delay_1ms(unsigned int n)
{while(n--){Delay10us(100);}
}
    4)main.c主函数
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <string.h>
#include "uart.h"
#include "delay.h"
#include "ds18b20.h"#define DS18B20_SET   (P3 |= (1 << 7))//置位,释放
#define DS18B20_CLEAR (P3 &= ~(1 << 7))
#define DS18B20_TST   ((P3 & (1 << 7)) != 0)//检测int main(void)
{	xdata char s[24];init_uart();while(1){float f;f = get_temp();sprintf(s, "%f", f);send_buffer(s, strlen(s));}return 0;
}

5、modbus模型(主机通过输入不同的指令组,实现对从机功能的控制)

#include <reg52.h>
#include "delay.h"
#include <string.h>
#include <stdio.h>
#include "digiter.h"
#include "key.h"#define Hz200 63035
#define Hz400 64285
#define Hz600 64702
#define Hz800 64910
#define Hz1000 65035void init_uart(void)
{unsigned char t;t = SCON; //串行控制寄存器t &= ~(3 << 6);t |= (1 << 6) | (1 << 4);SCON = t;PCON |= (1 << 7); //SMOD=1IE |= (1 << 7) | (1 << 4);//2 中断允许寄存器 P160t = TMOD;t &= ~(3 << 4);t |= (2 << 4);t &= ~(3 << 6);TMOD = t;TH1 = 204;TL1 = 204;TCON |= (1 << 6);
}unsigned short 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 timer0_handler(void) interrupt 1
{P2 ^= (1 << 1);TH0 = n >> 8;TL0 = n;
}void show_Hz(void)
{int key;key = key_pressed();if(key == 1){n = Hz200;TCON |= (1 << 4);}else if(key == 2){n = Hz400;TCON |= (1 << 4);}else if(key == 3){n = Hz600;TCON |= (1 << 4);}else if(key == 4){n = Hz800;TCON |= (1 << 4);}else if(key == 5){n = Hz1000;TCON |= (1 << 4);}else if(key == 0){TCON &= ~(1 << 4);}
}xdata char rcv_buffer[64] = {0};
int pos = 0;
int digiter_num = 0;
int display_t = 0;
int dis = 0;void uart_handle(void) interrupt 4
{if((SCON & (1 << 0)) != 0){rcv_buffer[pos++] = SBUF;//P2 = SBUF;SCON &= ~(1 << 0);}
}void send_char(char ch)
{SBUF = ch;while((SCON & (1 << 1)) == 0);SCON &= ~(1 << 1);
}	   void send_buffer(const char *p, int len)
{while(len--){send_char(*p++);}
}//校验码
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)
{float t;xdata unsigned char s[12];unsigned char nub1 = 0;unsigned char nub2 = 0;nub1 = (unsigned char)rcv_buffer[3];nub2 = (unsigned char)rcv_buffer[4];//起始字节、结束码if((unsigned char)rcv_buffer[0] == 0xAA && (unsigned char)rcv_buffer[pos - 1] == 0x0D){ //设备地址if((unsigned char)rcv_buffer[1] == 0x01){ //校验码if(sumOfTheArray(rcv_buffer, 7) == (unsigned char)rcv_buffer[7]){ //功能码	unsigned char order;order = rcv_buffer[2];switch(order){case 0x01://亮灯P2 = nub1;display_t = 0;break;case 0x02://show_num 数码管digiter_num = (nub1 << 8 | nub2);display_t = 1;break;case 0x03://温度t = get_temp();s[0] = 0xAA;s[1] = 0x01;s[2] = 0x83;memcpy(s + 3, &t, sizeof(t));s[7] = sumOfTheArray(s, 7);s[8] = 0x0D;send_buffer(s, 9);break;case 0x04://发声n = Hz200;TCON |= (1 << 4);break;case 0x05:n = Hz400;TCON |= (1 << 4);break;case 0x06:n = Hz600;TCON |= (1 << 4);break;case 0x07:n = Hz800;TCON |= (1 << 4);break;case 0x08:n = Hz1000;TCON |= (1 << 4);break;case 0x09://实现按键发声dis = 1;break;}}}}
}int main(void)
{init_uart();init_timer0();init_key();while(1){if(display_t == 1){show_number(digiter_num);}if(dis = 1){show_Hz();}pos = 0;memset(rcv_buffer, 0, sizeof(rcv_buffer));}	}return 0;
}

【END】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95915.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95915.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95915.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot后端开发常用工具详细介绍——SpringSecurity认证用户保证安全

简单的开始 创建SpringBoot项目 首先创建一个简单的springboot项目&#xff0c;假设端口为8888&#xff0c;添加controller控制层&#xff0c;并在其中添加TestController控制类&#xff0c;那么启动springboot项目之后&#xff0c;访localhost:8888/api/message页面会显示my…

别再手工缝合API了!开源LLMOps神器LMForge,让你像搭积木一样玩转AI智能体!

你是否受够了这些&#xff1f; 刚调通OpenAI的API&#xff0c;老板说“咱们试试国产模型降本增效”&#xff0c;你看着满屏的if-else只想说“我晕”。想给AI加上“查天气”、“执行代码”的能力&#xff0c;却发现Function Calling的代码复杂得让人头皮发麻。本地的Agentdemo惊…

window使用ffmep工具,加自定义脚本执行视频转码成h264(运营人员使用)

技术文章大纲&#xff1a;ffmep配合脚本使用1. 需要提供脚本给视频转码的给运营,给运营上传视频使用安装ffmep windows版本(目前我使用的就是windows)将脚本里面的执行路径修改成自己的电脑安装ffmep/bin/ffmep.exe路径处理好之后就点击执行2.环境准备ffmep windows版解压到一个…

Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分

原题链接&#xff1a; Leetcode 240. 搜索二维矩阵 II 解法一&#xff1a;排除法 参考 【图解】排除法&#xff0c;一图秒懂&#xff01;&#xff08;Python/Java/C/C/Go/JS/Rust&#xff09; 从右上角&#xff1a; class Solution { public:bool searchMatrix(vector<vec…

OCR 证件识别:驱动澳门酒店自助入住智能化

澳门酒店作为国际旅游窗口&#xff0c;每日接待持多元证件的旅客&#xff0c;OCR 证件识别技术的应用&#xff0c;让自助入住终端实现 “一证通办”&#xff0c;大幅提升服务效率。​旅客在自助终端办理入住时&#xff0c;只需将护照、港澳通行证、回乡证、电子身份证等证件贴近…

深入解析汇编语言的奥秘

汇编语言简介汇编语言&#xff08;Assembly Language&#xff09;是一种低级编程语言&#xff0c;直接对应计算机的机器指令集。它通过助记符&#xff08;如 MOV、ADD&#xff09;代替二进制操作码&#xff0c;更接近硬件架构&#xff0c;常用于性能优化、嵌入式开发或逆向工程…

Nextcloud 实战:打造属于你的私有云与在线协作平台

随着数据安全与隐私保护意识的提升&#xff0c;越来越多的个人和组织选择自建云平台来替代公有云。Nextcloud 作为一款开源的文件同步与协作套件&#xff0c;不仅能实现类似网盘的文件存储与分享&#xff0c;还提供日历、联系人、即时通讯、在线文档编辑等协作功能&#xff0c;…

实践指南:利用衡石AI Data Agent实现自然语言驱动的指标开发与归因

在数字化转型的深水区&#xff0c;企业数据团队常面临两难困境&#xff1a;业务部门需要敏捷响应的指标分析&#xff0c;但传统BI工具依赖技术团队编写SQL&#xff0c;导致需求交付周期长达数周&#xff1b;而直接暴露底层数据又存在安全与合规风险。衡石科技推出的AI Data Age…

知微集:Python中的线程(三)

欢迎来到"一起学点什么吧"的合集「NLP知微集」。在这里&#xff0c;我们不愿宏大叙事&#xff0c;只聚焦于自然语言处理领域中那些细微却关键的“齿轮”与“螺丝钉”。我相信&#xff0c;真正深刻的理解&#xff0c;源于对细节的洞察。本期&#xff0c;我将为您拆解的…

动态规划入门:从记忆化搜索到动态规划

在开始对动态规划的讲解之前&#xff0c;我们需要先对记忆化搜索进行回顾&#xff1a; 什么是记忆化搜索&#xff1f; 在搜索过程中&#xff0c;当搜索树中存在大量重复的节点时&#xff0c;我们可以通过引入一个"备忘录"&#xff08;通常是一个数组或哈希表&#…

Boost搜索引擎 网络库与前端(4)

文章目录前言一、引入网络库模块引入cpp-httplibcpp-httplib测试正式编写http_server二、前端模块三、项目的可能拓展总结前言 终于到了最后一篇喽&#xff0c;嘻嘻&#xff01; 一、引入网络库模块 引入cpp-httplib 下载地址如下&#xff0c;我个人不喜欢新版本   cpp-http…

Flink反压问题

背景在使用flink的过程中&#xff0c;多次遇到过反压&#xff08;backpressure&#xff09;的问题&#xff0c;这通常是因为数据处理的速率超过了数据源或下游系统的处理能力导致。反压的底层剖析网络流控一个重要的概念是网络流控&#xff0c;如上图&#xff0c;不同的Consume…

Day5-中间件与请求处理

昨天搞定了异步优化&#xff0c;今天来解决一些实际问题。Day4的API虽然性能不错&#xff0c;但还缺少一些企业级应用必备的功能。 现在的问题 前端无法访问API&#xff08;跨域问题&#xff09;没有请求日志&#xff0c;出问题难以排查错误信息格式不统一缺少统一的请求处理机…

【LeetCode热题100道笔记】反转链表

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a;输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a;输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&#xff1a;…

Oracle:select top 5

在Oracle数据库中实现SELECT TOP 5功能需采用特定语法&#xff0c;因其原生不支持TOP关键字。以下是两种主流实现方式&#xff1a;‌ROWNUM结合子查询‌先通过子查询排序数据&#xff0c;再在外层用ROWNUM限制行数&#xff1a;SELECT * FROM ( SELECT * FROM 表名 ORDER BY 排序…

Kubernetes(k8s) 增量更新 po

文章目录前言k8s 增量更新 po1. 导出要新建po 的控制器配置2. 配置详解3. 重新生效前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在…

基于stm32的车辆安全驾驶预警系统

若该文为原创文章&#xff0c;转载请注明原文出处。一、 项目背景与引言(一) 研究背景及意义道路交通安全是全球性的重大公共安全问题。据统计&#xff0c;绝大多数交通事故源于驾驶员的危险状态&#xff08;疲劳、分心、健康突发状况&#xff09;和危险驾驶行为&#xff08;超…

React学习教程,从入门到精通, React 新创建组件语法知识点及案例代码(11)

React 新创建组件语法知识点及案例代码 React 是由 Facebook 开发的一个用于构建用户界面的 JavaScript 库。随着 React 的不断发展&#xff0c;创建组件的方式也在不断演进。本文将详细介绍 React 中创建组件的最新语法&#xff0c;包括函数组件&#xff08;Functional Compo…

SQL Server全链路安全防护

SQL Server 的安全性是一个多层次、综合性的体系&#xff0c;旨在保护数据免受未授权访问、篡改和泄露。其核心安全机制可概括为以下几个方面&#xff1a;1. 身份验证&#xff08;Authentication&#xff09; Windows 身份验证&#xff1a; 使用 Windows 账户&#xff08;域/本…

如何利用Web3提升企业竞争力

在这个信息爆炸的时代&#xff0c;Web3技术以其独特的去中心化、透明性和用户主权特性&#xff0c;成为企业提升竞争力的新战场。本文将深入探讨企业如何把握Web3的浪潮&#xff0c;实现业务的飞跃。 1. 把握Web3的核心价值 Web3的核心在于去中心化、透明性和用户主权。这种模式…