单片机串口通信浅谈
- 格式:docx
- 大小:99.07 KB
- 文档页数:7
单片机双机串口通信在现代电子技术领域,单片机的应用无处不在。
而单片机之间的通信则是实现复杂系统功能的关键之一。
其中,双机串口通信是一种常见且重要的通信方式。
什么是单片机双机串口通信呢?简单来说,就是让两个单片机能够通过串口相互交换数据和信息。
想象一下,两个单片机就像是两个小伙伴,它们需要交流分享彼此的“想法”和“知识”,串口通信就是它们交流的“语言”。
串口通信,顾名思义,是通过串行的方式来传输数据。
这和我们日常生活中并行传输数据有所不同。
在并行传输中,多个数据位同时传输;而在串行传输中,数据一位一位地按顺序传送。
虽然串行传输速度相对较慢,但它所需的硬件连线简单,成本较低,对于单片机这种资源有限的设备来说,是一种非常实用的通信方式。
在进行单片机双机串口通信时,我们首先要了解串口通信的一些基本参数。
比如波特率,它决定了数据传输的速度。
就像两个人说话的快慢,如果波特率设置得不一致,那么双方就无法正常理解对方的意思,数据传输就会出错。
常见的波特率有 9600、115200 等。
还有数据位、停止位和校验位。
数据位决定了每次传输的数据长度,常见的有 8 位;停止位表示一个数据帧的结束,通常是 1 位或 2 位;校验位则用于检验数据传输的正确性,有奇校验、偶校验和无校验等方式。
为了实现双机串口通信,我们需要在两个单片机上分别进行编程。
编程的主要任务包括初始化串口、设置通信参数、发送数据和接收数据。
初始化串口时,我们要配置好相关的寄存器,使其工作在我们期望的模式下。
比如设置波特率发生器的数值,以确定合适的波特率。
发送数据相对来说比较简单。
我们将要发送的数据放入特定的寄存器中,然后启动发送操作,单片机就会自动将数据一位一位地通过串口发送出去。
接收数据则需要我们不断地检查接收标志位,以确定是否有新的数据到来。
当有新数据时,从接收寄存器中读取数据,并进行相应的处理。
在实际应用中,单片机双机串口通信有着广泛的用途。
比如在一个温度监测系统中,一个单片机负责采集温度数据,另一个单片机则负责将数据显示在屏幕上或者上传到网络。
基于单片机的数据串口通信随着科技的不断进步,我们生活中越来越多的设备需要进行数据传输和通信。
而技术成为了我们日常生活中无法忽视的一部分。
本文将从单片机的基本原理、串口通信的工作原理以及应用案例三个方面来详细介绍。
一、单片机的基本原理单片机,是一种集成电路芯片,具有微处理器、内存、输入输出设备以及其他辅助功能电路等一系列电子元件。
单片机通常包含中央处理器(CPU)、存储器、定时器/计数器、输入/输出接口等功能单元。
它的特点是集成度高、体积小、功耗低,适合嵌入式应用。
二、串口通信的工作原理串口通信是指通过串行接口进行的数据传输方式。
串口通信中使用的串行通信接口有RS-232、RS-485等。
在单片机中实现串口通信,需要通过串口通信芯片与外部设备进行交互。
在串口通信中,数据通过逐位传输的方式进行传输。
发送端通过发送器将数据位、起始位、停止位以及校验位等信息编码成串行数据,通过串口发送出去。
接收端通过接收器解码接收到的串行数据,将其还原成数据位、起始位、停止位以及校验位等信息,供单片机进行处理。
三、应用案例技术在现实生活中有着广泛的应用。
下面将介绍几个常见的应用案例。
1. 远程监控系统技术可以用于远程监控系统,如智能家居、安防系统等。
通过单片机和传感器建立连接并实现数据采集,再通过串口与中央服务器进行通信,实现信息传输和远程控制。
2. 工业自动化在工业自动化领域中,技术被广泛应用于控制系统。
通过串口连接各种传感器和执行器,收集和传输数据,实现自动控制。
例如,监测温度、湿度、气压等信息,并根据预设条件自动控制设备的开关。
3. 移动设备数据传输技术也可以用于移动设备的数据传输。
例如,通过串口与智能手机进行连接,将单片机中收集到的数据传输到智能手机上,便于用户实时获取数据并进行分析。
总结:技术在现代生活中扮演着重要的角色。
通过串口通信,单片机可以与其他设备进行数据传输和通信,实现各种应用需求。
从远程监控到工业自动化,再到移动设备数据传输,技术正越来越广泛地应用于各个领域,为我们的生活带来了更多便利与可能性技术在现实生活中的广泛应用为我们的生活带来了许多便利和可能性。
单片机串口通信原理
单片机串口通信原理是指通过串口进行数据的发送和接收。
串口通信是一种异步通信方式,它使用两根信号线(TXD和RXD)进行数据的传输。
在发送数据时,单片机将待发送的数据通过串口发送数据线(TXD)发送出去。
发送的数据会经过一个串口发送缓冲区,然后按照一定的通信协议进行处理,并通过串口传输线将数据发送给外部设备。
在接收数据时,外部设备将待发送的数据通过串口传输线发送给单片机。
单片机接收数据线(RXD)会将接收到的数据传
输到一个串口接收缓冲区中。
然后,单片机会根据通信协议进行数据的解析和处理,最后将数据保存在内部的寄存器中供程序使用。
串口通信协议通常包括数据位、停止位、校验位等信息。
数据位指的是每个数据字节占据的位数,常见的有8位和9位两种。
停止位用于表示数据的结束,常用的有1位和2位两种。
校验位用于检测数据在传输过程中是否发生错误,常见的校验方式有奇偶校验和无校验。
总的来说,单片机串口通信原理是通过串口发送数据线和接收数据线进行数据的传输和接收,并通过一定的通信协议进行数据的解析和处理。
这种通信方式可以实现单片机与外部设备的数据交换,广泛应用于各种嵌入式系统和物联网设备中。
单片机串口通信协议1. 引言单片机串口通信是一种常见的数据通信方式,它允许单片机与其他外部设备进行通信。
串口通信协议定义了数据传输的格式、波特率等参数,确保通信的稳定和可靠性。
本文将介绍单片机串口通信协议的基本原理和常用协议。
2. 串口通信基础串口通信是通过串行数据传输来实现的。
其中,UART(通用异步收发传输器)是实现串口通信的重要组件。
UART将并行数据转换为串行数据,并通过串口进行传输。
在单片机中,常用的串口通信引脚是TX(发送)和RX(接收)。
3. 串口通信协议串口通信协议定义了数据传输时各个数据包的格式和规则。
常见的串口通信协议有以下几种:3.1. RS-232RS-232是最早出现的串口通信协议之一。
它定义了数据传输的电气特性和信号级别。
RS-232使用9个引脚进行数据传输,包括发送和接收数据线、数据控制线等。
该协议具有较长的最大传输距离和可靠性,但通信速率相对较慢。
3.2. RS-485RS-485是一种多点通信的串口协议。
相比于RS-232,RS-485支持多个设备之间的通信。
它使用不同的信号级别和电气特性,可实现更远的传输距离和更高的通信速率。
RS-485通信中设备分为主设备和从设备,主设备负责控制通信流程。
3.3. SPISPI(Serial Peripheral Interface)是一种同步串口通信协议,常用于单片机与外部设备之间的通信。
SPI使用四条引脚进行通信,包括时钟线、数据线、主设备输出从设备输入线和主设备输入从设备输出线。
SPI通信速率较快,适用于高速数据传输。
3.4. I2CI2C(Inter-Integrated Circuit)是一种多主从通信的串口协议。
I2C使用两条引脚进行通信,包括时钟线和数据线。
在I2C总线上,可以连接多个设备,实现多个设备之间的通信和数据交换。
I2C通信速率较慢,但具有较简单的硬件设计和较低的功耗。
4. 协议选择和配置选择合适的串口通信协议需要考虑通信距离、通信速率、设备数量等因素。
单片机串口通讯协议在现代电子技术领域中,单片机的应用越来越广泛。
而串口通讯作为单片机与外部设备进行数据交换的重要方式之一,其通讯协议的理解和掌握对于单片机系统的开发至关重要。
什么是串口通讯呢?简单来说,串口通讯就是指数据一位一位地顺序传送。
这种方式就像是一个人在一条窄窄的通道上,依次把东西传递给另一个人。
在单片机中,串口通讯通常使用两根线来实现,一根用于发送数据(TXD),另一根用于接收数据(RXD)。
单片机串口通讯协议主要包含了以下几个关键的要素。
首先是波特率。
波特率就好比是数据传递的速度,它决定了每秒钟传输的比特数。
常见的波特率有 9600、115200 等等。
打个比方,如果把数据比作货物,波特率就是运输货物的车辆速度。
选择合适的波特率非常重要,如果波特率设置不正确,接收方就无法正确地解析发送方传来的数据,就像货物运输速度不匹配,导致接收方无法及时收到或者收到错误的货物。
其次是数据位。
数据位指的是每次传输数据的实际有效位数。
通常有 5 位、6 位、7 位和 8 位等选择。
这就好比是每次运输货物的数量,选择合适的数据位取决于要传输的数据类型和信息量。
然后是停止位。
停止位用于表示一次数据传输的结束。
常见的停止位有 1 位、15 位和 2 位。
停止位就像是运输货物后的一个结束标志,告诉接收方这一批货物已经传输完毕。
还有校验位。
校验位用于检测传输过程中是否出现错误。
常见的校验方式有奇校验、偶校验和无校验。
校验位就像是给货物贴上的一个标签,用于检查货物在运输过程中是否有损坏或者丢失。
在实际的单片机串口通讯中,发送方和接收方需要按照事先约定好的协议设置来进行数据的发送和接收。
比如,发送方设置波特率为9600,数据位为 8 位,停止位为 1 位,无校验位,那么接收方也必须设置相同的参数,才能正确地接收到数据。
为了更好地理解串口通讯协议,我们来看一个简单的例子。
假设我们要通过串口从单片机向电脑发送一个字节的数据 0x55。
单片机中的串口通信技术串口通信技术是指通过串行接口将数据传输和接收的技术。
在单片机领域,串口通信是一种常见的数据交互方式。
本文将介绍单片机中的串口通信技术,并探讨其在实际应用中的重要性。
一、串口通信的原理串口通信是指通过串行接口传输数据的方式,其中包括一个数据引脚和一个时钟引脚。
数据引脚用于传输二进制数据,在每个时钟周期内,数据引脚上的数据会被读取或写入。
时钟引脚则用于控制数据的传输速度。
单片机中的串口通信主要包含两个部分:发送和接收。
发送时,单片机将数据转换为二进制形式,并通过串口发送出去。
接收时,单片机会从串口接收到二进制数据,并将其转换为可识别的格式。
通过发送和接收两个过程,单片机可以与外部设备进行数据交互。
二、串口通信的类型在单片机中,串口通信主要包含两种类型:同步串口和异步串口。
同步串口是指发送和接收两个设备之间使用相同的时钟信号,以保持数据同步。
同步串口通信速度快,但需要额外的时钟信号输入。
异步串口则是通过发送数据前提供起始位和终止位来区分不同数据帧的方式进行通信。
异步串口通信的优势是不需要额外的时钟信号,但速度相对较慢。
在实际应用中,通常使用异步串口通信。
异步串口通信相对简单易用,适合多种应用场景。
三、单片机串口通信的实现单片机中实现串口通信通常需要以下几个方面的内容:1. 串口通信引脚配置:单片机需要连接到一个串口芯片或者其他外部设备,因此需要配置相应的引脚作为串口通信的数据引脚和时钟引脚。
2. 波特率设置:波特率是指单位时间内传输的数据位数。
在进行串口通信时,发送端和接收端的波特率需要相同。
单片机中通常通过寄存器设置波特率,以确保数据传输的稳定性。
3. 数据发送和接收:在单片机中,通过将数据写入发送缓冲器并启动发送操作来发送数据。
接收数据时,单片机会接收到串口中的数据,并将其保存在接收缓冲器中。
4. 中断机制:在进行串口通信时,单片机通常会使用中断机制来处理数据接收和发送。
中断机制可以减轻单片机的负担,提高系统效率。
51单片机串口通信(相关例程) 51单片机串口通信(相关例程)一、简介51单片机是一种常用的微控制器,它具有体积小、功耗低、易于编程等特点,被广泛应用于各种电子设备和嵌入式系统中。
串口通信是51单片机的常见应用之一,通过串口通信,可以使单片机与其他外部设备进行数据交互和通信。
本文将介绍51单片机串口通信的相关例程,并提供一些实用的编程代码。
二、串口通信基础知识1. 串口通信原理串口通信是通过串行数据传输的方式,在数据传输过程中,将信息分为一个个字节进行传输。
在51单片机中,常用的串口通信标准包括RS232、RS485等。
其中,RS232是一种常用的串口标准,具有常见的DB-9或DB-25连接器。
2. 串口通信参数在进行串口通信时,需要设置一些参数,如波特率、数据位、停止位和校验位等。
波特率表示在单位时间内传输的比特数,常见的波特率有9600、115200等。
数据位表示每个数据字节中的位数,一般为8位。
停止位表示停止数据传输的时间,常用的停止位有1位和2位。
校验位用于数据传输的错误检测和纠正。
三、串口通信例程介绍下面是几个常见的51单片机串口通信的例程,提供给读者参考和学习:1. 串口发送数据```C#include <reg51.h>void UART_Init(){TMOD = 0x20; // 设置计数器1为工作方式2(8位自动重装) TH1 = 0xFD; // 设置波特率为9600SCON = 0x50; // 设置串口工作方式1,允许串行接收TR1 = 1; // 启动计数器1}void UART_SendChar(unsigned char dat){SBUF = dat; // 发送数据while (!TI); // 等待发送完成TI = 0; // 清除发送完成标志}void main(){UART_Init(); // 初始化串口while (1){UART_SendChar('A'); // 发送字母A}}```2. 串口接收数据```C#include <reg51.h>void UART_Init(){TMOD = 0x20; // 设置计数器1为工作方式2(8位自动重装) TH1 = 0xFD; // 设置波特率为9600SCON = 0x50; // 设置串口工作方式1,允许串行接收TR1 = 1; // 启动计数器1}void UART_Recv(){unsigned char dat;if (RI) // 检测是否接收到数据{dat = SBUF; // 读取接收到的数据 RI = 0; // 清除接收中断标志// 处理接收到的数据}}void main(){UART_Init(); // 初始化串口EA = 1; // 允许中断ES = 1; // 允许串口中断while (1)// 主循环处理其他任务}}```3. 串口发送字符串```C#include <reg51.h>void UART_Init(){TMOD = 0x20; // 设置计数器1为工作方式2(8位自动重装) TH1 = 0xFD; // 设置波特率为9600SCON = 0x50; // 设置串口工作方式1,允许串行接收TR1 = 1; // 启动计数器1}void UART_SendString(unsigned char *str){while (*str != '\0')SBUF = *str; // 逐个发送字符while (!TI); // 等待发送完成TI = 0; // 清除发送完成标志str++; // 指针指向下一个字符}}void main(){UART_Init(); // 初始化串口while (1){UART_SendString("Hello, World!"); // 发送字符串}}```四、总结本文介绍了51单片机串口通信的基础知识和相关编程例程,包括串口发送数据、串口接收数据和串口发送字符串。
单片机指令的串口通信实现方法串口通信是指通过串行通信接口实现的数据传输方式。
在单片机系统中,串口通信是一种重要的通信方式,可以实现与外部设备(如PC 机、传感器等)的数据交互。
本文将介绍单片机指令的串口通信实现方法,包括硬件连接和软件编程两方面。
一、硬件连接串口通信需要通过发送器和接收器两个设备来完成数据的发送和接收。
在单片机系统中,可使用通用异步收发器(UART)作为串行通信接口。
下面是串口通信的硬件连接步骤:1. 将单片机与UART连接:首先,确保单片机具有UART接口,并根据其引脚定义将UART的发送线(TXD)连接到单片机的接收引脚,接收线(RXD)连接到单片机的发送引脚。
2. 选择波特率:波特率指每秒钟传送的位数,通常使用的波特率有9600、115200等。
在发送和接收数据时,单片机和外部设备需要使用相同的波特率,以保证数据的正确传输。
3. 连接外部设备:根据实际需求,将UART的发送线和接收线分别连接到外部设备的接收引脚和发送引脚。
二、软件编程实现单片机指令的串口通信需要编写相应的软件程序。
下面是基于C语言的软件编程实现方法:1. 初始化串口:在程序开始时,需要对串口进行初始化设置。
通过设置寄存器来配置波特率、数据位、停止位等参数。
2. 发送数据:使用发送指令将待发送的数据写入UART的数据寄存器,等待数据传输完成。
3. 接收数据:通过接收指令读取UART接收到的数据,并进行相应的处理。
可以使用中断或轮询方式进行数据接收。
4. 错误处理:在数据传输过程中,可能会出现错误,例如帧错误、奇偶校验错误等。
需要进行相应的错误处理操作,例如重新发送数据或发出错误提示。
5. 通信协议:根据通信需求,可以制定相应的通信协议。
通信协议包括数据帧结构、数据格式、数据校验等内容,用于确保数据的可靠传输。
三、实例演示下面通过一个简单的示例来演示单片机指令的串口通信实现方法。
假设我们需要实现从单片机向PC机发送一条消息,并接收PC机返回的确认信息。
深入理解51单片机串口通信及通信实例串口通信的原理串口通信(SerialCommunicaTIons)的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成,分别是地线、发送、接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通信的端口,这些参数必须匹配。
a,波特率:这是一个衡量符号传输速率的参数。
指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。
一般调制速率大于波特率,比如曼彻斯特编码)。
通常电话线的波特率为14400,28800和36600。
波特率可以远远大于这些值,但是波特率和距离成反比。
高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:这是衡量通信中实际数据位的参数。
当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。
如何设置取决于你想传送的信息。
比如,标准的ASCII码是0~127(7位)。
扩展的ASCII码是0~255(8位)。
如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。
每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。
由于实际数据位取决于通信协议的选取,术语包指任何通信的情况。
单片机的双机串口通信原理单片机的双机串口通信原理是通过串口连接两个单片机,使它们能够进行数据的传输和通信。
串口是一种常见的通信方式,它使用两条信号线进行数据的传输:一条是串行数据线(TXD),用于发送数据;另一条是串行接收线(RXD),用于接收数据。
通过串口通信,两个单片机可以进行双向的数据传输,实现信息的互相交流和共享。
在双机串口通信中,一台单片机充当主机(Master),另一台单片机充当从机(Slave)。
主机负责发起通信请求并发送数据,从机负责接收并响应主机发送的数据。
通信过程中,主机和从机需要遵守相同的协议和通信规则,以确保数据的正确和可靠传输。
双机串口通信的主要步骤如下:1. 端口初始化:在双机串口通信开始之前,两台单片机的串口端口需要初始化。
主机和从机需要设置相同的波特率(Baud Rate),数据位数(Data Bits)、停止位数(Stop Bits)和校验方式(Parity Bit),确保两台单片机之间的通信能够正常进行。
2. 数据发送:主机将要发送的数据写入到串口发送寄存器中,然后通过串口发送线路将数据位一位一位地发送给从机。
主机发送完所有数据位后,等待从机的响应。
3. 数据接收:从机通过串口接收线路接收主机发送的数据位,然后将接收到的数据位存放在串口接收寄存器中,等待从机的处理。
4. 数据处理:从机接收到主机发送的数据后,根据通信协议和通信规则进行数据处理。
从机可能需要对数据进行校验、解析和执行相应的操作,然后将处理结果写入到串口发送寄存器中,以供主机进行相应的处理。
5. 响应发送:从机将处理结果写入到串口发送寄存器中,然后通过串口发送线路将数据位一位一位地发送给主机。
从机发送完所有数据位后,等待主机的进一步操作。
6. 数据接收:主机通过串口接收线路接收从机发送的数据位,然后将接收到的数据位存放在串口接收寄存器中,等待主机的处理。
7. 数据处理:主机接收到从机发送的数据后,根据通信协议和通信规则进行数据处理。
单片机串口通信浅谈一、准备知识1.什么是串口?串即串行的意思,是指数据在一根数据线上按照二进制数的数位一位接一位的传输,例如要传输一个字节的数据10110010,先将最低位的0 通过数据线传送过去,然后是下一位的1(两次传送时间间隔很小),依次将8 位数据(1 字节)传送过去。
在此对比一下并口的传输方式,并就是并行的意思,就是说数据是并行传过去的,假如一个并口有8 根数据线,那么它一次可以传送8 位即一个字节,仍以刚才的数据为例,在某一时刻,通过并口传送此数据,那么此并口的一根线上传的是0 信号,另一根是1 信号,以此类推,每根线上在同一时刻传的数据不一样,这样就达到一次传送多位的目的。
初次接触的同学可能会很自然地认为并口比串口速度快,但其实不是这样的,首先,并口需要不只一根线,成本相对较高,多根线也造成线路阻抗、噪声等问题更加突出,不适合长距离传输。
而串口只需两根线(一根发送,一根接收)即可完成通讯的功能,目前串口的速度以比并行端口传输速率快,rs232 (即通常所说的串口)、USB、1394 等都属于串口。
以下是串口的照片:需要注意的是,串口是2 排共9 针(每针具体功能见下文),而我们常用的显示器接口VGA 用的则是3 排共15 针,需要将两者区分开来。
2.什么是波特率?波特率又称比特率,单位bps(bit/s),指的是每秒传输的二进制位数,8 个二进制位即1 个字节。
Rs232 常用的波特率有19200、9600、4800,其中9600 最常用。
3.什么是单片机的寄存器?寄存器是单片机内的重要组成部分,在初学51 时通过控制相应寄存器的值来告诉单片机你要使用他的什么功能。
例如,我在代码中输入SCON=0x50,就告诉单片机我要使用它的串行端口,使用的是模式1(模式的讲解见下文)。
二、单片机端准备工作1.需要用到的元器件或模块:单片机最小系统模块×1,max232×1,10uF 电容×4,串口接头×12.串口接头各引脚说明3.电路图4.51 单片机串口通信需要用到的寄存器及讲解 需要用到的几个寄存器:TMOD (定时器/计数器模式寄存器)、TCON (定时器/计数器控制寄存器)、SCON (串行端口寄存器)、PCON (电源控制寄存器)。
本文串口通信所使用的波特率为 9600,要想单片机能够得到一个准确的频率就必须使用到单片机的定时器/计数器功能,当定时器走了一定秒数时就会让单片机发一个脉冲,脉 冲上就承载着此次传输的一位数据,TMOD 用来告诉单片机定时器是如何工作的,SCON 用 来在串口进行通讯时告诉单片机一些注意事项,如什么时候开始传送、什么时候开始接收等。
PCON 告诉单片机怎么通过计算知道定时器具体走了多久来发让单片机发送脉冲。
下面来具体说下如何设置各个寄存器来实现串口通信:以下寄存器均位 8 位寄存器,从右到左依次是从二进制低位到高位,第一行表格每一个 代表一个二进制位,表格里的内容代表此二进制位的名字,最后一行为本文所使用的配置, 第一个表格中间一行表示高四位用来控制 Timer1,低四位控制 Timer2。
紧跟表格下方的第 一行为此文配置,第二行为配置说明,剩下的为各二进制位的功能讲解。
连 51 单片机 P3.1 口 连 51 单片机 P3.0 口TMOD=0x20; 此配置作用:使用 Timer 1 的 mode2 工作模式,提供自动加载的 8 位定时器/计数器→TH1GATE 位:为 Timer 的控制开关,为 0 时只要 TCON 寄存器的 TR 位为 1 即可启动定时器,称 为内部启动,为 1 时则需要 TR 位为 1,同时外部给 INT0 引脚一个高电平,称为外部启动, 我们只用内部启动,外部启动作为了解。
C/T 位:为 0时使用单片机内部的计数器,为 1 时使用外部的计数器。
非特殊情况下都使用 内部计数器。
另一个 Timer 的各位功能同上。
TCON (只使用 TR )作用:TR=1, 启动 Timer1此寄存器只需了解 TR1 控制 Timer1,TR0 控制 Timer0,详细见 TMOD 寄存器 GATE 位讲解。
SCON=0x50;此配置作用:使用串行端口的 mode1 SM0、SM1 组合设置串行端口的模式SM2: Mode 0 时,SM2=0;Mode 1 时,若 SM2=1,且收到有效的停止位,则 RI=1,(产生 RI 中断),否则 RI=0; Mode 2 或 3 时,若 SM2=1,且收到的第 9 位为 1,则 RI=1(产生 RI 中断)。
REN :为 1,开始接收,为 0,停止接收。
TB8:mode2 或 3 传送数据时,本位为第 9 位传送位,可通过写代码来设定或清除。
RB8:mode2 或 3 接收数据时,本位为第 9 位接收位;mode1 时,若 SM2=0,则本位为停止位; mode0 时,本位无作用。
TI :本位为传送中断标志位,当中断结束时,本位并不会恢复为 0,必须在代码中清除。
Mode1、2、3 时,若完成传送停止位,则本位自动设定为 1,并产生 TI 中断。
Mode0 时,若完成传送第 8 位,则本位自动设定为 1,产生 TI 中断。
RI :本位为接收中断标志位,当中断结束时,本位并不会恢复为 0,必须在代码中清除。
Mode1、2、3 时,若完成接收停止位,则本位自动设定为 1,并产生 RI 中断。
Mode0 时,若完成接收第 8 位,则本位自动设定为 1,产生 RI 中断。
此配置作用:使 SMOD=1,计算比特率 此寄存器不作理解,只需知道设置 SMOD 值可影响波特率计算即可。
比特率计算公式(串行端口 mode1): 比特率=(2SMOD /32)*(OSC/(12*(256‐TH1)))5.代码编写Main 函数开始对寄存器进行初始化操作: TMOD = 0x20; TMOD = 0x20; SCON = 0x50; SCON = 0x50; TH1 = 0xFA; 或者 TH1 = 0xFD; PCON = 0x80; PCON = 0x00; TR1 = 1; TR1 = 1; 发送数据代码(在程序相应位置写上): SBUF=变量; //在相应的位置写上此代码,讲需要发送的数据先送到 SBUF 寄存器中 while(TI==0); //等到数据发送完再进行下一句代码 TI=0; //TI 为传送结束标志,必须软件置零起始位 停止位 (低电平)(高电平)二、PC 机端编程(使用VB)Private Sub Form_Load()MSComm1.Settings = "9600,n,8,1" ' 设置波特率和发送字符格式mPort = 4 ' 设置通讯串口MSComm1.InputLen = 0 ' 设置或返回一次从接收缓冲区中读取字节数,0 表示一次读取所有数据MSComm1.InBufferSize = 512 ' 设置接收缓冲区512ByteMSComm1.InBufferCount = 0MSComm1.OutBufferSize = 512 ' 设置发送缓冲区512ByteMSComm1.OutBufferCount = 0MSComm1.RThreshold = 1 ' 每个字符到接收缓冲区都触发接收事件MSComm1.SThreshold = 1MSComm1.PortOpen = True ' 打开串口End SubPrivate Sub MSComm1_OnComm()Select Case mEvent ' 设置oncomm 事件,读取片机内存的值Case comEvReceiveinputsignal = MSComm1.InputText13.Text = Asc(inputsignal) ' 单片机内存的值用Text 显示出Case ElseEnd Selectr = Val(Text13.Text) '将得到的数据赋给需要的变量,val 为数值转换函数,将text 内的内容转换成数值类型End Sub如果只是对单片机串口通信功能进行测试,可从网上下载测试工具,如:comdebug.exe,commix.exe,scomv21.exe ,Terminal.exe,将单片机与PC 通过rs232 串口线连接即可测试。
三、结束语串口通信并没有大家想像的那么困难,在熟练使用单片机的前提下,稍微看些相应的资料即可自己做出来,希望大家不要被吓到,只要努力学,这些都不会成太难的问题的。
以下附上作者写的一段源代码,实现的功能为扫描4*4 键盘(编号0~9,a~f),按下键后将相应的编号通过串口传送出去。
#include <reg52.h>#define rowkey (~P2)&0x0funsigned char keycode;void scanner();void delay(unsigned char ms);void put(char str);void main(){//寄存器初始化SCON = 0x50;TMOD = 0x20;TH1 = 0xFA;TR1 = 1;PCON = 0x80;while(1){scanner();}}void scanner() //扫描键盘函数{char col,row;char scan,keyin;scan=0xef;for(col=0;col<4;col++){P2=scan;keyin=rowkey;if(keyin!=0){delay(100);for(row=0;row<4;row++)if(keyin==(0x01<<row)){keycode=row+4*col;SBUF=keycode; //以下3 行为发送代码while(TI==0);TI=0;}while(rowkey!=0); //键盘防抖delay(100);}scan=(scan<<1)|0x01;}}void delay(unsigned char ms){unsigned char i;while(ms‐‐)for(i=0;i<124;i++);}本文完成后未来得及校对,肯定有错误之处,实在影响阅读欢迎发邮件讨论luxiakun@。