51单片机的串口通信程序(C语言)

合集下载

[电子工程] 单片机C语言之串口通信协议(代码分享)

[电子工程]  单片机C语言之串口通信协议(代码分享)

现实生活中,我们总是要与人打交道,互通有无。

单片机也一样,需要跟各种设备交互。

例如汽车的显示仪表需要知道汽车的转速及电动机的运行参数,那么显示仪表就需要从汽车的底层控制器取得数据。

而这个数据的获得过程就是一个通信过程。

类似的例子还有控制器通常是单片机或者PLC与变频器的通信。

通信的双方需要遵守一套既定的规则也称为协议,这就好比我们人之间的对话,需要在双方都遵守一套语言语法规则才有可能达成对话。

通信协议又分为硬件层协议和软件层协议。

硬件层协议主要规范了物理上的连线,传输电平信号及传输的秩序等硬件性质的内容。

常用的硬件协议有串口,IIC,SPI,RS485,CAN和USB。

软件层协议则更侧重上层应用的规范,比如modbus协议。

好了,那这里我们就着重介绍51单片机的串口通信协议,以下简称串口。

串口的6个特征如下。

(1)、物理上的连线至少3根,分别是Tx数据发送线,Rx数据接收线,GND共用地线。

(2)、0与1的约定。

RS232电平,约定﹣5V至﹣25V之间的电压信号为1,﹢5V至﹢25V之间的电压信号为0 。

TTL电平,约定5V的电压信号为1,0V电压信号为0 。

CMOS电平,约定3.3V的电压信号为1,0V电压信号为0 。

其中,CMOS电平一般用于ARM芯片中。

(3)、发送秩序。

低位先发。

(4)、波特率。

收发双方共同约定的一个数据位(0或1)在数据传输线上维持的时间。

也可理解为每秒可以传输的位数。

常用的波特率有300bit/s, 600bit/s, 2400bit/s, 4800bit/s, 9600bit/s。

(5)、通信的起始信号。

发送方在没有发送数据时,应该将Tx置1 。

当需发送时,先将Tx置0,并且保持1位的时间。

接受方不断地侦测Rx,如果发现Rx常时间变高后,突然被拉低(置为0),则视为发送方将要发送数据,迅速启动自己的定时器,从而保证了收发双方定时器同步定时。

(6)、停止信号。

发送方发送完最后一个有效位时,必须再将Tx保持1位的时间,即为停止位。

51单片机与串口通信代码

51单片机与串口通信代码

51单片机与串口通信代码作者:佚名来源:本站原创点击数: 9407 更新时间:2007年06月17日【字体:大中小】1. 发送:向总线上发命令2. 接收:从总线接收命令,并分析是地址还是数据。

3. 定时发送:从内存中取数并向主机发送.经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。

程序如下://这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的#i nclude <reg51.h>#i nclude<stdio.h>#i nclude <string.h>#define INBUF_LEN 4 //数据长度unsigned char inbuf1[INBUF_LEN];unsigned char checksum,count3 , flag,temp,ch;bit read_flag=0;sbit cp=P1^1;sbit DIR=P1^2;int i;unsigned int xdata *RAMDATA; /*定义RAM地址指针*/unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ;void init_serialcomm(void){SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收 PCON=0x00;ES=1;TMOD=0x21; //定时器工作于方式2,自动装载方式TH0=(65536-1000)%256;TL0=(65536-1000)/256;TL1=0xfd;TH1=0xfd;ET0=1;TR0=1;TR1=1;// TI=0;EA=1;// TI=1;RAMDATA=0x1F45;}void serial () interrupt 4 using 3{if(RI){ RI=0;ch=SBUF;TI=1; //置SBUF空switch(ch){case 0x01 :printf("A"); TI=0;break;case 0x02 :printf("B"); TI=0;break;case 0x03 :printf("C"); TI=0;break;case 0x04 :printf("D"); TI=0;break;default :printf("fg"); TI=0;break;}}}//向串口发送一个字符void timer0() interrupt 1 using 3{// char i;flag++;TH0=0x00;TL0=0x00;if(flag==10){// cp=!cp;// for(i=0;i<6;i++)P2=0x25;TI=1;temp=*RAMDATA;printf("%c",temp);TI=0;// RAMDATA--;flag=0;}}//主程序main(){init_serialcomm(); //初始化串口//向6264中送数据{*RAMDATA=0x33;}while(1){*RAMDATA=0x33;;}}调试过程中遇到的问题:1. 发送过程:在发送时必须保证TI=1:即发送缓冲器为空,否则将导致数据发不出去,如果想强制发送可以用:T I=1.具体发送数据:利用printf(“akjdfaklfj”);函数直接发送即可。

C51编写 串口通信程序

C51编写 串口通信程序

异步通信的数据格式 :
一个字符帧 空 闲 起 始 位 数据位 校 验 位 停 止 位 空 闲
下一字符 起始位
LSB
MSB
异步通信的特点:不要求收发双方时钟的 严格一致,实现容易,设备开销较小,但 每个字符要附加2~3位用于起止位,各帧 之间还有间隔,因此传输效率不高。
2、同步通信
同步通信时要建立发送方时钟对接收方时钟的直接控制, 使双方达到完全同步。此时,传输数据的位之间的距离均 为“位间隔”的整数倍,同时传送的字符间不留间隙,即 保持位同步关系,也保持字符同步关系。发送方对接收方 的同步可以通过两种方法实现。
串行通信是将数据字节分成一位一位的形 式在一条传输线上逐个地传送。
接 收 设 备
D0 D7
8位顺次传送
发 送 设 备
串行通信的特点:传输线少,长距离传送时 成本低,且可以利用电话网等现成的设备, 但数据的传送控制比并行通信复杂。
7.1.1 串行通信的基本概念
一、异步通信与同步通信
1、异步通信 异步通信是指通信的发送与接收设备使用各自的时钟 控制数据的发送和接收过程。为使双方的收发协调,要求 发送和接收设备的时钟尽可能一致。
面向位的同步格式 :
8位 01111110 8位 地址场 8位 控制场 ≥0位 信息场 16位 校验场 8位 01111110
此时,将数据块看作数据流,并用序列01111110作为开始 和结束标志。为了避免在数据流中出现序列01111110时引起 的混乱,发送方总是在其发送的数据流中每出现5个连续的1 就插入一个附加的0;接收方则每检测到5个连续的1并且其后 有一个0时,就删除该0。 典型的面向位的同步协议如ISO的高级数据链路控制规程 HDLC和IBM的同步数据链路控制规程SDLC。 同步通信的特点是以特定的位组合“01111110”作为帧的 开始和结束标志,所传输的一帧数据可以是任意位。所以传 输的效率较高,但实现的硬件设备比异步通信复杂。

51单片机串口通信程序。。含详细例子

51单片机串口通信程序。。含详细例子

{ P3_4=0; P3_3=1;
} void RstPro()//编程器复位 {
pw.fpProOver();//直接编程结束 SendData();//通知上位机,表示编程器就绪,可以直接用此函数因为协议号(ComBuf[0])还没被修改,下同 }
void ReadSign()//读特征字 {
} void serial () interrupt 4 using 3 //串口接收中断函数 {
if (RI) { RI = 0 ; ch=SBUF; read_flag= 1 ; //就置位取数标志 }
} main()
{ init_serialcom(); //初始化串口 while ( 1 ) { if (read_flag) //如果取数标志已置位,就将读到的数从串口发出 { read_flag= 0 ; //取数标志清 0 send_char_com(ch); } }
while(RI == 0); RI = 0; c = SBUF; // 从缓冲区中把接收的字符放入 c 中 SBUF = c; // 要发送的字符放入缓冲区 while(TI == 0); TI = 0; } }
4.//////////////// /////////////////////////////////////////////////////////
SendData(); } else break;//等待回应失败 } pw.fpProOver();//操作结束设置为运行状态 ComBuf[0]=0;//通知上位机编程器进入就绪状态 SendData(); }
void Lock()//写锁定位
{
pw.fpLock();
SendData();

[电子工程] 单片机C语言之串口通信协议(代码分享)

[电子工程]  单片机C语言之串口通信协议(代码分享)

现实生活中,我们总是要与人打交道,互通有无。

单片机也一样,需要跟各种设备交互。

例如汽车的显示仪表需要知道汽车的转速及电动机的运行参数,那么显示仪表就需要从汽车的底层控制器取得数据。

而这个数据的获得过程就是一个通信过程。

类似的例子还有控制器通常是单片机或者PLC与变频器的通信。

通信的双方需要遵守一套既定的规则也称为协议,这就好比我们人之间的对话,需要在双方都遵守一套语言语法规则才有可能达成对话。

通信协议又分为硬件层协议和软件层协议。

硬件层协议主要规范了物理上的连线,传输电平信号及传输的秩序等硬件性质的内容。

常用的硬件协议有串口,IIC,SPI,RS485,CAN和USB。

软件层协议则更侧重上层应用的规范,比如modbus协议。

好了,那这里我们就着重介绍51单片机的串口通信协议,以下简称串口。

串口的6个特征如下。

(1)、物理上的连线至少3根,分别是Tx数据发送线,Rx数据接收线,GND共用地线。

(2)、0与1的约定。

RS232电平,约定﹣5V至﹣25V之间的电压信号为1,﹢5V至﹢25V之间的电压信号为0 。

TTL电平,约定5V的电压信号为1,0V电压信号为0 。

CMOS电平,约定3.3V的电压信号为1,0V电压信号为0 。

其中,CMOS电平一般用于ARM芯片中。

(3)、发送秩序。

低位先发。

(4)、波特率。

收发双方共同约定的一个数据位(0或1)在数据传输线上维持的时间。

也可理解为每秒可以传输的位数。

常用的波特率有300bit/s, 600bit/s, 2400bit/s, 4800bit/s, 9600bit/s。

(5)、通信的起始信号。

发送方在没有发送数据时,应该将Tx置1 。

当需发送时,先将Tx置0,并且保持1位的时间。

接受方不断地侦测Rx,如果发现Rx常时间变高后,突然被拉低(置为0),则视为发送方将要发送数据,迅速启动自己的定时器,从而保证了收发双方定时器同步定时。

(6)、停止信号。

发送方发送完最后一个有效位时,必须再将Tx保持1位的时间,即为停止位。

51单片机的串口通信程序(C语言)

51单片机的串口通信程序(C语言)

#include <reg52.h>#include<intrins.h>#include <stdio.h>#include <math.h>#define uchar unsigned char#define uint unsigned intsbit Key1 = P2^3;sbit Key2 = P2^2;sbit Key3 = P2^1;sbit Key4 = P2^0;sbit BELL = P3^6;sbit CONNECT = P3^7;unsigned int Key1_flag = 0;unsigned int Key2_flag = 0;unsigned int Key3_flag = 0;unsigned int Key4_flag = 0;unsigned char b;unsigned char code Num[21]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00, 0x10,0x89};unsigned char code Disdigit[4] = {0x7F,0xBF,0xDF,0xEF};unsigned char Disbuf[4];void delayms(uint t){uint i;while(t--){/* 对于11.0592M时钟,约延时1ms */for (i=0;i<125;i++){}}}//-----------------------------------------------------void SendData(uchar Dat){uchar i=0;SBUF = Dat;while (1){if(TI){TI=0;break;}}}void ScanKey(){if(Key1 == 0){delayms(100); if(Key1 == 0){Key1_flag = 1; Key2_flag = 0; Key3_flag = 0;Key4_flag = 0;Key1 = 1;}else;}if(Key2 == 0){delayms(100);if(Key2 == 0){Key2_flag = 1; Key1_flag = 0; Key3_flag = 0;Key4_flag = 0;Key2 = 1;}else;}if(Key3 == 0){delayms(50);if(Key3 == 0){Key3_flag = 1; Key1_flag = 0; Key2_flag = 0;Key4_flag = 0;Key3 = 1;}else;}if(Key4 == 0){delayms(50);if(Key4 == 0){Key4_flag = 1;Key1_flag = 0;Key2_flag = 0;Key3_flag = 0;Key4 = 1;}else;}else;}void KeyProc(){if(Key1_flag){TR1 = 1;SendData(0x55);Key1_flag = 0; }else if(Key2_flag){TR1 = 1;SendData(0x11); Key2_flag = 0;}else if(Key3_flag) {P1=0xff;BELL = 0;CONNECT = 1;Key3_flag = 0;}else if(Key4_flag){CONNECT = 0;BELL = 1;Key4_flag = 0;}else;}void Initdisplay(void){Disbuf[0] = 1;Disbuf[1] = 2;Disbuf[2] = 3;Disbuf[3] = 4;}void Display() //显示{unsigned int i = 0;unsigned int temp,count;temp = Disdigit[count]; P2 =temp;temp = Disbuf[count];temp = Num[temp];P0 =temp;count++;if (count==4)count=0;}void time0() interrupt 1 using 2 {Display();TH0 = (65535 - 2000)/256;TL0 = (65535 - 2000)%256;}void main(){Initdisplay();TMOD = 0x21;TH0 = (65535 - 2000)/256;TL0 = (65535 - 2000)%256;TR0 = 1;ET0 = 1;TH1 = 0xFD; //11.0592MTL1 = 0xFD;PCON&=0x80;TR1 = 1;ET1 = 1;SCON = 0x40; //串口方式REN = 1;PT1 = 0;PT0 = 1;EA = 1;while(1){ScanKey();KeyProc();if(RI){Disbuf[0] = 0;Disbuf[1] = 20;Disbuf[2] = SBUF>>4;Disbuf[3] = SBUF&0x0f;RI = 0;}else;}}51单片机串口通信C语言程序2**************************************************************; 平凡单片机工作室;ckss.asm;功能:反复向主机送AA和55两个数;主机使用一个串口调试软件设置19200,n,8,1***************************************************************/#include "reg51.h"#define uchar unsigned char#define uint unsigned int//延时程序//////////////////由Delay参数确定延迟时间*/void mDelay(unsigned int Delay){ unsigned int i;for(;Delay>0;Delay--){ for(i=0;i<124;i++){;}}}//////////////////// 主程序////////////////////void main(){ uchar OutDat; //定义输出变量TMOD=0x20; //TMOD=0TH1=0xf3; //12MHZ ,BPS:4800,N,8,1TL1=0xf3;PCON=0x80; //方式一TR1=1; //?????????????????????????????SCON=0x40; //串口通信控制寄存器模式一OutDat=0xaa; //向串口发送固定数据值for(;;) //循环程序{SBUF=OutDat;//发送数据for(;;){ if(TI) //发送中断位当发送停止位时置1,表示发送完成break;}mDelay(500);TI=0; //清零中断位OutDat=~OutDat; //显示内容按位取反}}。

51单片机模拟串口通讯

51单片机模拟串口通讯

论坛新老朋友们。

祝大家新年快乐。

在新的一年开始的时候,给大家一点小小的玩意。

工程师经常碰到需要多个串口通信的时候,而低端单片机大多只有一个串行口,甚至没有串口。

这时候无论是选择高端芯片,还是更改系统设计都是比较麻烦的事。

我把以前搞的用普通I/O口模拟串行口通讯的程序拿出来,供大家参考,希望各位兄弟轻点拍砖。

基本原理:我们模拟的是串行口方式1.就是最普通的方式。

一个起始位、8个数据位、一个停止位。

模拟串行口最关键的就是要计算出每个位的时间。

以波特率9600为例,每秒发9 600个位,每个位就是1/9600秒,约104个微秒。

我们需要做一个精确的延时,延时时间+对IO口置位的时间=104微秒。

起始位是低状态,再延时一个位的时间。

停止位是高状态,也是一个位的时间。

数据位是8个位,发送时低位先发出去,接收时先接低位。

了解这些以后,做个IO模拟串口的程序,就是很容易的事。

我们开始。

先上简单原理图:就一个MAX232芯片,没什么好说的,一看就明白。

使用单片机普通I/ O口,232数据输入端使用51单片机P3.2口(外部中断1口,接到普通口上也可以,模拟中断方式的串行口会有用。

呵呵)。

数据输出为P0.4(随便哪个口都行)。

下面这个程序,您只需吧P0.4 和P3.2 当成串口直接使用即可,经过测试完全没有问题.2、底层函数代码如下:sbit TXD1 = P0^4; //定义模拟输出脚sbit RXD1 = P3^2; //定义模拟输入脚bdata unsigned char SBUF1; //定义一个位操作变量sbit SBUF1_bit0 = SBUF1^0;sbit SBUF1_bit1 = SBUF1^1;sbit SBUF1_bit2 = SBUF1^2;sbit SBUF1_bit3 = SBUF1^3;sbit SBUF1_bit4 = SBUF1^4;sbit SBUF1_bit5 = SBUF1^5;sbit SBUF1_bit6 = SBUF1^6;sbit SBUF1_bit7 = SBUF1^7;void delay_bps() {unsigned char i; for (i = 0; i < 29; i++); _nop_(); _nop_();} //波特率9600 模拟一个9600波特率unsigned char getchar2() //模拟接收一个字节数据{while (RXD1);_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); delay_bps();SBUF1_bit0 = RXD1; //0delay_bps();SBUF1_bit1 = RXD1; //1delay_bps();SBUF1_bit2 = RXD1; //2delay_bps();SBUF1_bit3 = RXD1; //3delay_bps();SBUF1_bit4 = RXD1; //4delay_bps();SBUF1_bit5 = RXD1; //5delay_bps();SBUF1_bit6 = RXD1; //6delay_bps();SBUF1_bit7 = RXD1; //7delay_bps();return(SBUF1) ; //返回读取的数据}void putchar2(unsigned char input) //模拟发送一个字节数据{SBUF1 = input;TXD1 = 0; //起始位delay_bps();TXD1 = SBUF1_bit0; //0delay_bps();TXD1 = SBUF1_bit1; //1delay_bps();TXD1 = SBUF1_bit2; //2delay_bps();TXD1 = SBUF1_bit3; //3delay_bps();TXD1 = SBUF1_bit4; //4delay_bps();TXD1 = SBUF1_bit5; //5delay_bps();TXD1 = SBUF1_bit6; //6delay_bps();TXD1 = SBUF1_bit7; //7delay_bps();TXD1 = 1; //停止位delay_bps();}3、实现串行通讯。

51单片机与串口通信代码

51单片机与串口通信代码

51单片机与串口通信代码在当今科技发展迅速的时代,嵌入式系统的应用越来越广泛。

而51单片机是一类常见的嵌入式控制器,它具有体积小巧、功耗低、价格便宜等特点,因此被广泛应用于各个领域。

而串口通信是实现单片机与计算机之间数据传输的常见方式,本文将介绍51单片机与串口通信的相关代码。

1. 串口通信概述串口通信是指通过串行接口,将数据一位一位地传输。

单片机通过串口与计算机或其他设备之间进行数据传输,实现信息的收发和控制指令的执行。

串口通信常用的协议包括RS232、RS485和UART等。

在51单片机中,一般选用UART协议。

2. 串口通信的硬件连接在使用51单片机与计算机进行串口通信时,需要进行相应的硬件连接。

首先,需要将单片机的串口引脚(一般是P3口)与计算机的串口(COM口)进行连接。

单片机的TXD引脚连接到计算机的RXD引脚,而单片机的RXD引脚连接到计算机的TXD引脚。

此外,还需要相连的地线进行电位的匹配。

3. 串口通信的软件设置在使用51单片机进行串口通信时,需要对单片机的串口进行相应的软件设置。

首先,需要设置波特率,波特率指每秒传送的位数,常见的波特率有9600、115200等。

通过设置相同的波特率,实现单片机与计算机之间的数据传输。

其次,还需要设置数据位、停止位和校验位等参数,以确保数据的正确传输。

4. 单片机发送数据的代码示例下面是一个简单的51单片机发送数据的代码示例:```c#include <reg51.h>void main() {TMOD = 0x20; // 配置定时器1为工作方式2TH1 = 0xFD; // 设置波特率为9600SCON = 0x50; // 允许串口工作TR1 = 1; // 启动定时器1while (1) {SBUF = 'A'; // 发送数据while (!TI); // 等待数据发送完毕TI = 0; // 清除发送标志位}}```5. 单片机接收数据的代码示例下面是一个简单的51单片机接收数据的代码示例:```c#include <reg51.h>void main() {TMOD = 0x20; // 配置定时器1为工作方式2TH1 = 0xFD; // 设置波特率为9600SCON = 0x50; // 允许串口工作TR1 = 1; // 启动定时器1while (1) {if (RI) { // 判断是否有数据接收P1 = SBUF; // 将接收到的数据存入P1口RI = 0; // 清除接收标志位}}}```6. 总结本文介绍了51单片机与串口通信代码的相关内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机的串口通信程序(C语言) 51单片机的串口通信程序(C语言)
在嵌入式系统中,串口通信是一种常见的数据传输方式,也是单片
机与外部设备进行通信的重要手段之一。

本文将介绍使用C语言编写
51单片机的串口通信程序。

1. 硬件准备
在开始编写串口通信程序之前,需要准备好相应的硬件设备。

首先,我们需要一块51单片机开发板,内置了串口通信功能。

另外,我们还
需要连接一个与单片机通信的外部设备,例如计算机或其他单片机。

2. 引入头文件
在C语言中,我们需要引入相应的头文件来使用串口通信相关的函数。

在51单片机中,我们需要引入reg51.h头文件,以便使用单片机
的寄存器操作相关函数。

同时,我们还需要引入头文件来定义串口通
信的相关寄存器。

3. 配置串口参数
在使用串口通信之前,我们需要配置串口的参数,例如波特率、数
据位、停止位等。

这些参数的配置需要根据实际需要进行调整。

在51
单片机中,我们可以通过写入相应的寄存器来配置串口参数。

4. 初始化串口
在配置完串口参数之后,我们需要初始化串口,以便开始进行数据
的发送和接收。

初始化串口的过程包括打开串口、设置中断等。

5. 数据发送
在串口通信中,数据的发送通常分为两种方式:阻塞发送和非阻塞
发送。

阻塞发送是指程序在发送完数据之后才会继续执行下面的代码,而非阻塞发送是指程序在发送数据的同时可以继续执行其他代码。

6. 数据接收
数据的接收与数据的发送类似,同样有阻塞接收和非阻塞接收两种
方式。

在接收数据时,需要不断地检测是否有数据到达,并及时进行
处理。

7. 中断处理
在串口通信中,中断是一种常见的处理方式。

通过使用中断,可以
及时地响应串口数据的到达或者发送完成等事件,提高程序的处理效率。

8. 串口通信实例
下面是一个简单的串口通信实例,用于在51单片机与计算机之间
进行数据的传输。

```c
#include <reg51.h>
#include <stdio.h>
#define BAUDRATE 9600
#define FOSC 11059200
void UART_init()
{
TMOD = 0x20; // 设置定时器1为模式2
SCON = 0x50; // 设置串口为模式1,允许接收
TH1 = 256 - FOSC / 12 / 32 / BAUDRATE; // 计算波特率定时器重载值
TR1 = 1; // 启动定时器1
EA = 1; // 允许中断
ES = 1; // 允许串口中断
}
void UART_send_byte(unsigned char byte)
{
SBUF = byte;
while (!TI); // 等待发送完成
TI = 0; // 清除发送完成标志位
}
unsigned char UART_receive_byte()
{
while (!RI); // 等待接收完成
RI = 0; // 清除接收完成标志位
return SBUF;
}
void UART_send_string(char *s)
{
while (*s)
{
UART_send_byte(*s);
s++;
}
}
void main()
{
UART_init();
UART_send_string("Hello, World!"); while (1)
{
unsigned char data = UART_receive_byte();
// 对接收到的数据进行处理
}
}
```
总结:
通过以上步骤,我们可以编写出简单的51单片机串口通信程序。

该程序通过配置串口参数、初始化串口、实现数据的发送和接收,以及使用中断来实现串口通信功能。

通过不断学习和实践,我们可以进一步完善和拓展串口通信程序,实现更复杂的功能。

相关文档
最新文档